app.1574223183500.js
4.37 MB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
/******/ (function(modules) { // webpackBootstrap
/******/ // install a JSONP callback for chunk loading
/******/ function webpackJsonpCallback(data) {
/******/ var chunkIds = data[0];
/******/ var moreModules = data[1];
/******/
/******/
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0, resolves = [];
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
/******/ resolves.push(installedChunks[chunkId][0]);
/******/ }
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ for(moduleId in moreModules) {
/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ modules[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(parentJsonpFunction) parentJsonpFunction(data);
/******/
/******/ while(resolves.length) {
/******/ resolves.shift()();
/******/ }
/******/
/******/ };
/******/
/******/ function hotDisposeChunk(chunkId) {
/******/ delete installedChunks[chunkId];
/******/ }
/******/ var parentHotUpdateCallback = (typeof self !== 'undefined' ? self : this)["webpackHotUpdate"];
/******/ (typeof self !== 'undefined' ? self : this)["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
/******/ function webpackHotUpdateCallback(chunkId, moreModules) {
/******/ hotAddUpdateChunk(chunkId, moreModules);
/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
/******/ } ;
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotDownloadUpdateChunk(chunkId) {
/******/ var script = document.createElement("script");
/******/ script.charset = "utf-8";
/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
/******/ if (null) script.crossOrigin = null;
/******/ document.head.appendChild(script);
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotDownloadManifest(requestTimeout) {
/******/ requestTimeout = requestTimeout || 10000;
/******/ return new Promise(function(resolve, reject) {
/******/ if (typeof XMLHttpRequest === "undefined") {
/******/ return reject(new Error("No browser support"));
/******/ }
/******/ try {
/******/ var request = new XMLHttpRequest();
/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
/******/ request.open("GET", requestPath, true);
/******/ request.timeout = requestTimeout;
/******/ request.send(null);
/******/ } catch (err) {
/******/ return reject(err);
/******/ }
/******/ request.onreadystatechange = function() {
/******/ if (request.readyState !== 4) return;
/******/ if (request.status === 0) {
/******/ // timeout
/******/ reject(
/******/ new Error("Manifest request to " + requestPath + " timed out.")
/******/ );
/******/ } else if (request.status === 404) {
/******/ // no update available
/******/ resolve();
/******/ } else if (request.status !== 200 && request.status !== 304) {
/******/ // other failure
/******/ reject(new Error("Manifest request to " + requestPath + " failed."));
/******/ } else {
/******/ // success
/******/ try {
/******/ var update = JSON.parse(request.responseText);
/******/ } catch (e) {
/******/ reject(e);
/******/ return;
/******/ }
/******/ resolve(update);
/******/ }
/******/ };
/******/ });
/******/ }
/******/
/******/ var hotApplyOnUpdate = true;
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentHash = "ff19ebee8122b4573b5c";
/******/ var hotRequestTimeout = 10000;
/******/ var hotCurrentModuleData = {};
/******/ var hotCurrentChildModule;
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentParents = [];
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentParentsTemp = [];
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotCreateRequire(moduleId) {
/******/ var me = installedModules[moduleId];
/******/ if (!me) return __webpack_require__;
/******/ var fn = function(request) {
/******/ if (me.hot.active) {
/******/ if (installedModules[request]) {
/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
/******/ installedModules[request].parents.push(moduleId);
/******/ }
/******/ } else {
/******/ hotCurrentParents = [moduleId];
/******/ hotCurrentChildModule = request;
/******/ }
/******/ if (me.children.indexOf(request) === -1) {
/******/ me.children.push(request);
/******/ }
/******/ } else {
/******/ console.warn(
/******/ "[HMR] unexpected require(" +
/******/ request +
/******/ ") from disposed module " +
/******/ moduleId
/******/ );
/******/ hotCurrentParents = [];
/******/ }
/******/ return __webpack_require__(request);
/******/ };
/******/ var ObjectFactory = function ObjectFactory(name) {
/******/ return {
/******/ configurable: true,
/******/ enumerable: true,
/******/ get: function() {
/******/ return __webpack_require__[name];
/******/ },
/******/ set: function(value) {
/******/ __webpack_require__[name] = value;
/******/ }
/******/ };
/******/ };
/******/ for (var name in __webpack_require__) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
/******/ name !== "e" &&
/******/ name !== "t"
/******/ ) {
/******/ Object.defineProperty(fn, name, ObjectFactory(name));
/******/ }
/******/ }
/******/ fn.e = function(chunkId) {
/******/ if (hotStatus === "ready") hotSetStatus("prepare");
/******/ hotChunksLoading++;
/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
/******/ finishChunkLoading();
/******/ throw err;
/******/ });
/******/
/******/ function finishChunkLoading() {
/******/ hotChunksLoading--;
/******/ if (hotStatus === "prepare") {
/******/ if (!hotWaitingFilesMap[chunkId]) {
/******/ hotEnsureUpdateChunk(chunkId);
/******/ }
/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ }
/******/ }
/******/ };
/******/ fn.t = function(value, mode) {
/******/ if (mode & 1) value = fn(value);
/******/ return __webpack_require__.t(value, mode & ~1);
/******/ };
/******/ return fn;
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotCreateModule(moduleId) {
/******/ var hot = {
/******/ // private stuff
/******/ _acceptedDependencies: {},
/******/ _declinedDependencies: {},
/******/ _selfAccepted: false,
/******/ _selfDeclined: false,
/******/ _disposeHandlers: [],
/******/ _main: hotCurrentChildModule !== moduleId,
/******/
/******/ // Module API
/******/ active: true,
/******/ accept: function(dep, callback) {
/******/ if (dep === undefined) hot._selfAccepted = true;
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ else if (typeof dep === "object")
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
/******/ else hot._acceptedDependencies[dep] = callback || function() {};
/******/ },
/******/ decline: function(dep) {
/******/ if (dep === undefined) hot._selfDeclined = true;
/******/ else if (typeof dep === "object")
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._declinedDependencies[dep[i]] = true;
/******/ else hot._declinedDependencies[dep] = true;
/******/ },
/******/ dispose: function(callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ addDisposeHandler: function(callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ removeDisposeHandler: function(callback) {
/******/ var idx = hot._disposeHandlers.indexOf(callback);
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ },
/******/
/******/ // Management API
/******/ check: hotCheck,
/******/ apply: hotApply,
/******/ status: function(l) {
/******/ if (!l) return hotStatus;
/******/ hotStatusHandlers.push(l);
/******/ },
/******/ addStatusHandler: function(l) {
/******/ hotStatusHandlers.push(l);
/******/ },
/******/ removeStatusHandler: function(l) {
/******/ var idx = hotStatusHandlers.indexOf(l);
/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
/******/ },
/******/
/******/ //inherit from previous dispose call
/******/ data: hotCurrentModuleData[moduleId]
/******/ };
/******/ hotCurrentChildModule = undefined;
/******/ return hot;
/******/ }
/******/
/******/ var hotStatusHandlers = [];
/******/ var hotStatus = "idle";
/******/
/******/ function hotSetStatus(newStatus) {
/******/ hotStatus = newStatus;
/******/ for (var i = 0; i < hotStatusHandlers.length; i++)
/******/ hotStatusHandlers[i].call(null, newStatus);
/******/ }
/******/
/******/ // while downloading
/******/ var hotWaitingFiles = 0;
/******/ var hotChunksLoading = 0;
/******/ var hotWaitingFilesMap = {};
/******/ var hotRequestedFilesMap = {};
/******/ var hotAvailableFilesMap = {};
/******/ var hotDeferred;
/******/
/******/ // The update info
/******/ var hotUpdate, hotUpdateNewHash;
/******/
/******/ function toModuleId(id) {
/******/ var isNumber = +id + "" === id;
/******/ return isNumber ? +id : id;
/******/ }
/******/
/******/ function hotCheck(apply) {
/******/ if (hotStatus !== "idle") {
/******/ throw new Error("check() is only allowed in idle status");
/******/ }
/******/ hotApplyOnUpdate = apply;
/******/ hotSetStatus("check");
/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
/******/ if (!update) {
/******/ hotSetStatus("idle");
/******/ return null;
/******/ }
/******/ hotRequestedFilesMap = {};
/******/ hotWaitingFilesMap = {};
/******/ hotAvailableFilesMap = update.c;
/******/ hotUpdateNewHash = update.h;
/******/
/******/ hotSetStatus("prepare");
/******/ var promise = new Promise(function(resolve, reject) {
/******/ hotDeferred = {
/******/ resolve: resolve,
/******/ reject: reject
/******/ };
/******/ });
/******/ hotUpdate = {};
/******/ for(var chunkId in installedChunks)
/******/ // eslint-disable-next-line no-lone-blocks
/******/ {
/******/ /*globals chunkId */
/******/ hotEnsureUpdateChunk(chunkId);
/******/ }
/******/ if (
/******/ hotStatus === "prepare" &&
/******/ hotChunksLoading === 0 &&
/******/ hotWaitingFiles === 0
/******/ ) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ return promise;
/******/ });
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotAddUpdateChunk(chunkId, moreModules) {
/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
/******/ return;
/******/ hotRequestedFilesMap[chunkId] = false;
/******/ for (var moduleId in moreModules) {
/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ hotUpdate[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ }
/******/
/******/ function hotEnsureUpdateChunk(chunkId) {
/******/ if (!hotAvailableFilesMap[chunkId]) {
/******/ hotWaitingFilesMap[chunkId] = true;
/******/ } else {
/******/ hotRequestedFilesMap[chunkId] = true;
/******/ hotWaitingFiles++;
/******/ hotDownloadUpdateChunk(chunkId);
/******/ }
/******/ }
/******/
/******/ function hotUpdateDownloaded() {
/******/ hotSetStatus("ready");
/******/ var deferred = hotDeferred;
/******/ hotDeferred = null;
/******/ if (!deferred) return;
/******/ if (hotApplyOnUpdate) {
/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
/******/ // avoid triggering uncaught exception warning in Chrome.
/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
/******/ Promise.resolve()
/******/ .then(function() {
/******/ return hotApply(hotApplyOnUpdate);
/******/ })
/******/ .then(
/******/ function(result) {
/******/ deferred.resolve(result);
/******/ },
/******/ function(err) {
/******/ deferred.reject(err);
/******/ }
/******/ );
/******/ } else {
/******/ var outdatedModules = [];
/******/ for (var id in hotUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ outdatedModules.push(toModuleId(id));
/******/ }
/******/ }
/******/ deferred.resolve(outdatedModules);
/******/ }
/******/ }
/******/
/******/ function hotApply(options) {
/******/ if (hotStatus !== "ready")
/******/ throw new Error("apply() is only allowed in ready status");
/******/ options = options || {};
/******/
/******/ var cb;
/******/ var i;
/******/ var j;
/******/ var module;
/******/ var moduleId;
/******/
/******/ function getAffectedStuff(updateModuleId) {
/******/ var outdatedModules = [updateModuleId];
/******/ var outdatedDependencies = {};
/******/
/******/ var queue = outdatedModules.map(function(id) {
/******/ return {
/******/ chain: [id],
/******/ id: id
/******/ };
/******/ });
/******/ while (queue.length > 0) {
/******/ var queueItem = queue.pop();
/******/ var moduleId = queueItem.id;
/******/ var chain = queueItem.chain;
/******/ module = installedModules[moduleId];
/******/ if (!module || module.hot._selfAccepted) continue;
/******/ if (module.hot._selfDeclined) {
/******/ return {
/******/ type: "self-declined",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ if (module.hot._main) {
/******/ return {
/******/ type: "unaccepted",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ for (var i = 0; i < module.parents.length; i++) {
/******/ var parentId = module.parents[i];
/******/ var parent = installedModules[parentId];
/******/ if (!parent) continue;
/******/ if (parent.hot._declinedDependencies[moduleId]) {
/******/ return {
/******/ type: "declined",
/******/ chain: chain.concat([parentId]),
/******/ moduleId: moduleId,
/******/ parentId: parentId
/******/ };
/******/ }
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
/******/ if (!outdatedDependencies[parentId])
/******/ outdatedDependencies[parentId] = [];
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ continue;
/******/ }
/******/ delete outdatedDependencies[parentId];
/******/ outdatedModules.push(parentId);
/******/ queue.push({
/******/ chain: chain.concat([parentId]),
/******/ id: parentId
/******/ });
/******/ }
/******/ }
/******/
/******/ return {
/******/ type: "accepted",
/******/ moduleId: updateModuleId,
/******/ outdatedModules: outdatedModules,
/******/ outdatedDependencies: outdatedDependencies
/******/ };
/******/ }
/******/
/******/ function addAllToSet(a, b) {
/******/ for (var i = 0; i < b.length; i++) {
/******/ var item = b[i];
/******/ if (a.indexOf(item) === -1) a.push(item);
/******/ }
/******/ }
/******/
/******/ // at begin all updates modules are outdated
/******/ // the "outdated" status can propagate to parents if they don't accept the children
/******/ var outdatedDependencies = {};
/******/ var outdatedModules = [];
/******/ var appliedUpdate = {};
/******/
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
/******/ console.warn(
/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
/******/ );
/******/ };
/******/
/******/ for (var id in hotUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ moduleId = toModuleId(id);
/******/ /** @type {TODO} */
/******/ var result;
/******/ if (hotUpdate[id]) {
/******/ result = getAffectedStuff(moduleId);
/******/ } else {
/******/ result = {
/******/ type: "disposed",
/******/ moduleId: id
/******/ };
/******/ }
/******/ /** @type {Error|false} */
/******/ var abortError = false;
/******/ var doApply = false;
/******/ var doDispose = false;
/******/ var chainInfo = "";
/******/ if (result.chain) {
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ }
/******/ switch (result.type) {
/******/ case "self-declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of self decline: " +
/******/ result.moduleId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of declined dependency: " +
/******/ result.moduleId +
/******/ " in " +
/******/ result.parentId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "unaccepted":
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
/******/ if (!options.ignoreUnaccepted)
/******/ abortError = new Error(
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ );
/******/ break;
/******/ case "accepted":
/******/ if (options.onAccepted) options.onAccepted(result);
/******/ doApply = true;
/******/ break;
/******/ case "disposed":
/******/ if (options.onDisposed) options.onDisposed(result);
/******/ doDispose = true;
/******/ break;
/******/ default:
/******/ throw new Error("Unexception type " + result.type);
/******/ }
/******/ if (abortError) {
/******/ hotSetStatus("abort");
/******/ return Promise.reject(abortError);
/******/ }
/******/ if (doApply) {
/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
/******/ addAllToSet(outdatedModules, result.outdatedModules);
/******/ for (moduleId in result.outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(
/******/ result.outdatedDependencies,
/******/ moduleId
/******/ )
/******/ ) {
/******/ if (!outdatedDependencies[moduleId])
/******/ outdatedDependencies[moduleId] = [];
/******/ addAllToSet(
/******/ outdatedDependencies[moduleId],
/******/ result.outdatedDependencies[moduleId]
/******/ );
/******/ }
/******/ }
/******/ }
/******/ if (doDispose) {
/******/ addAllToSet(outdatedModules, [result.moduleId]);
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ }
/******/ }
/******/ }
/******/
/******/ // Store self accepted outdated modules to require them later by the module system
/******/ var outdatedSelfAcceptedModules = [];
/******/ for (i = 0; i < outdatedModules.length; i++) {
/******/ moduleId = outdatedModules[i];
/******/ if (
/******/ installedModules[moduleId] &&
/******/ installedModules[moduleId].hot._selfAccepted &&
/******/ // removed self-accepted modules should not be required
/******/ appliedUpdate[moduleId] !== warnUnexpectedRequire
/******/ ) {
/******/ outdatedSelfAcceptedModules.push({
/******/ module: moduleId,
/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
/******/ });
/******/ }
/******/ }
/******/
/******/ // Now in "dispose" phase
/******/ hotSetStatus("dispose");
/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
/******/ if (hotAvailableFilesMap[chunkId] === false) {
/******/ hotDisposeChunk(chunkId);
/******/ }
/******/ });
/******/
/******/ var idx;
/******/ var queue = outdatedModules.slice();
/******/ while (queue.length > 0) {
/******/ moduleId = queue.pop();
/******/ module = installedModules[moduleId];
/******/ if (!module) continue;
/******/
/******/ var data = {};
/******/
/******/ // Call dispose handlers
/******/ var disposeHandlers = module.hot._disposeHandlers;
/******/ for (j = 0; j < disposeHandlers.length; j++) {
/******/ cb = disposeHandlers[j];
/******/ cb(data);
/******/ }
/******/ hotCurrentModuleData[moduleId] = data;
/******/
/******/ // disable module (this disables requires from this module)
/******/ module.hot.active = false;
/******/
/******/ // remove module from cache
/******/ delete installedModules[moduleId];
/******/
/******/ // when disposing there is no need to call dispose handler
/******/ delete outdatedDependencies[moduleId];
/******/
/******/ // remove "parents" references from all children
/******/ for (j = 0; j < module.children.length; j++) {
/******/ var child = installedModules[module.children[j]];
/******/ if (!child) continue;
/******/ idx = child.parents.indexOf(moduleId);
/******/ if (idx >= 0) {
/******/ child.parents.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/
/******/ // remove outdated dependency from module children
/******/ var dependency;
/******/ var moduleOutdatedDependencies;
/******/ for (moduleId in outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ ) {
/******/ module = installedModules[moduleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ dependency = moduleOutdatedDependencies[j];
/******/ idx = module.children.indexOf(dependency);
/******/ if (idx >= 0) module.children.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Now in "apply" phase
/******/ hotSetStatus("apply");
/******/
/******/ hotCurrentHash = hotUpdateNewHash;
/******/
/******/ // insert new code
/******/ for (moduleId in appliedUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
/******/ modules[moduleId] = appliedUpdate[moduleId];
/******/ }
/******/ }
/******/
/******/ // call accept handlers
/******/ var error = null;
/******/ for (moduleId in outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ ) {
/******/ module = installedModules[moduleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ var callbacks = [];
/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
/******/ dependency = moduleOutdatedDependencies[i];
/******/ cb = module.hot._acceptedDependencies[dependency];
/******/ if (cb) {
/******/ if (callbacks.indexOf(cb) !== -1) continue;
/******/ callbacks.push(cb);
/******/ }
/******/ }
/******/ for (i = 0; i < callbacks.length; i++) {
/******/ cb = callbacks[i];
/******/ try {
/******/ cb(moduleOutdatedDependencies);
/******/ } catch (err) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-errored",
/******/ moduleId: moduleId,
/******/ dependencyId: moduleOutdatedDependencies[i],
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err;
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Load self accepted modules
/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
/******/ var item = outdatedSelfAcceptedModules[i];
/******/ moduleId = item.module;
/******/ hotCurrentParents = [moduleId];
/******/ try {
/******/ __webpack_require__(moduleId);
/******/ } catch (err) {
/******/ if (typeof item.errorHandler === "function") {
/******/ try {
/******/ item.errorHandler(err);
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-error-handler-errored",
/******/ moduleId: moduleId,
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err2;
/******/ }
/******/ if (!error) error = err;
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-errored",
/******/ moduleId: moduleId,
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err;
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // handle errors in accept handlers and self accepted module load
/******/ if (error) {
/******/ hotSetStatus("fail");
/******/ return Promise.reject(error);
/******/ }
/******/
/******/ hotSetStatus("idle");
/******/ return new Promise(function(resolve) {
/******/ resolve(outdatedModules);
/******/ });
/******/ }
/******/
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // Promise = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ "app": 0
/******/ };
/******/
/******/
/******/
/******/ // script path function
/******/ function jsonpScriptSrc(chunkId) {
/******/ return __webpack_require__.p + "static/js/" + ({}[chunkId]||chunkId) + ".1574223183500.js"
/******/ }
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {},
/******/ hot: hotCreateModule(moduleId),
/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
/******/ children: []
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/ // This file contains only the entry chunk.
/******/ // The chunk loading function for additional chunks
/******/ __webpack_require__.e = function requireEnsure(chunkId) {
/******/ var promises = [];
/******/
/******/
/******/ // JSONP chunk loading for javascript
/******/
/******/ var installedChunkData = installedChunks[chunkId];
/******/ if(installedChunkData !== 0) { // 0 means "already installed".
/******/
/******/ // a Promise means "currently loading".
/******/ if(installedChunkData) {
/******/ promises.push(installedChunkData[2]);
/******/ } else {
/******/ // setup Promise in chunk cache
/******/ var promise = new Promise(function(resolve, reject) {
/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject];
/******/ });
/******/ promises.push(installedChunkData[2] = promise);
/******/
/******/ // start chunk loading
/******/ var script = document.createElement('script');
/******/ var onScriptComplete;
/******/
/******/ script.charset = 'utf-8';
/******/ script.timeout = 120;
/******/ if (__webpack_require__.nc) {
/******/ script.setAttribute("nonce", __webpack_require__.nc);
/******/ }
/******/ script.src = jsonpScriptSrc(chunkId);
/******/
/******/ // create error before stack unwound to get useful stacktrace later
/******/ var error = new Error();
/******/ onScriptComplete = function (event) {
/******/ // avoid mem leaks in IE.
/******/ script.onerror = script.onload = null;
/******/ clearTimeout(timeout);
/******/ var chunk = installedChunks[chunkId];
/******/ if(chunk !== 0) {
/******/ if(chunk) {
/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
/******/ var realSrc = event && event.target && event.target.src;
/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
/******/ error.name = 'ChunkLoadError';
/******/ error.type = errorType;
/******/ error.request = realSrc;
/******/ chunk[1](error);
/******/ }
/******/ installedChunks[chunkId] = undefined;
/******/ }
/******/ };
/******/ var timeout = setTimeout(function(){
/******/ onScriptComplete({ type: 'timeout', target: script });
/******/ }, 120000);
/******/ script.onerror = script.onload = onScriptComplete;
/******/ document.head.appendChild(script);
/******/ }
/******/ }
/******/ return Promise.all(promises);
/******/ };
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // on error function for async loading
/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
/******/
/******/ // __webpack_hash__
/******/ __webpack_require__.h = function() { return hotCurrentHash; };
/******/
/******/ var jsonpArray = (typeof self !== 'undefined' ? self : this)["webpackJsonp"] = (typeof self !== 'undefined' ? self : this)["webpackJsonp"] || [];
/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
/******/ jsonpArray.push = webpackJsonpCallback;
/******/ jsonpArray = jsonpArray.slice();
/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
/******/ var parentJsonpFunction = oldJsonpFunction;
/******/
/******/
/******/ // Load entry module and return exports
/******/ return hotCreateRequire(0)(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js":
/*!*****************************************************************************************!*\
!*** ./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js ***!
\*****************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return _defineProperty; });\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX0BiYWJlbF9ydW50aW1lQDcuNi4zQEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19AYmFiZWxfcnVudGltZUA3LjYuM0BAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcz85N2EzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js\n");
/***/ }),
/***/ "./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js":
/*!******************************************************************************************!*\
!*** ./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js ***!
\******************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js\");\n\nfunction makeResponse(result, config) {\n return {\n status: result[0],\n data: utils.isSimpleObject(result[1]) ? JSON.parse(JSON.stringify(result[1])) : result[1],\n headers: result[2],\n config: config\n };\n}\n\nfunction handleRequest(mockAdapter, resolve, reject, config) {\n var url = config.url;\n if (config.baseURL && config.url.substr(0, config.baseURL.length) === config.baseURL) {\n url = config.url.slice(config.baseURL ? config.baseURL.length : 0);\n }\n\n delete config.adapter;\n mockAdapter.history[config.method].push(config);\n\n var handler = utils.findHandler(\n mockAdapter.handlers,\n config.method,\n url,\n config.data,\n config.params,\n config.headers,\n config.baseURL\n );\n\n if (handler) {\n if (handler.length === 7) {\n utils.purgeIfReplyOnce(mockAdapter, handler);\n }\n\n if (handler.length === 2) {\n // passThrough handler\n mockAdapter.originalAdapter(config).then(resolve, reject);\n } else if (typeof handler[3] !== 'function') {\n utils.settle(\n resolve,\n reject,\n makeResponse(handler.slice(3), config),\n mockAdapter.delayResponse\n );\n } else {\n var result = handler[3](config);\n // TODO throw a sane exception when return value is incorrect\n if (typeof result.then !== 'function') {\n utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse);\n } else {\n result.then(\n function(result) {\n if (result.config && result.status) {\n utils.settle(resolve, reject, makeResponse([result.status, result.data, result.headers], result.config), 0);\n } else {\n utils.settle(resolve, reject, makeResponse(result, config), mockAdapter.delayResponse);\n }\n },\n function(error) {\n if (mockAdapter.delayResponse > 0) {\n setTimeout(function() {\n reject(error);\n }, mockAdapter.delayResponse);\n } else {\n reject(error);\n }\n }\n );\n }\n }\n } else {\n // handler not found\n utils.settle(\n resolve,\n reject,\n {\n status: 404,\n config: config\n },\n mockAdapter.delayResponse\n );\n }\n}\n\nmodule.exports = handleRequest;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zLW1vY2stYWRhcHRlckAxLjE3LjBAYXhpb3MtbW9jay1hZGFwdGVyL3NyYy9oYW5kbGVfcmVxdWVzdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3MtbW9jay1hZGFwdGVyQDEuMTcuMEBheGlvcy1tb2NrLWFkYXB0ZXIvc3JjL2hhbmRsZV9yZXF1ZXN0LmpzPzEwZjkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZShyZXN1bHQsIGNvbmZpZykge1xuICByZXR1cm4ge1xuICAgIHN0YXR1czogcmVzdWx0WzBdLFxuICAgIGRhdGE6IHV0aWxzLmlzU2ltcGxlT2JqZWN0KHJlc3VsdFsxXSkgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdFsxXSkpIDogcmVzdWx0WzFdLFxuICAgIGhlYWRlcnM6IHJlc3VsdFsyXSxcbiAgICBjb25maWc6IGNvbmZpZ1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KG1vY2tBZGFwdGVyLCByZXNvbHZlLCByZWplY3QsIGNvbmZpZykge1xuICB2YXIgdXJsID0gY29uZmlnLnVybDtcbiAgaWYgKGNvbmZpZy5iYXNlVVJMICYmIGNvbmZpZy51cmwuc3Vic3RyKDAsIGNvbmZpZy5iYXNlVVJMLmxlbmd0aCkgPT09IGNvbmZpZy5iYXNlVVJMKSB7XG4gICAgdXJsID0gY29uZmlnLnVybC5zbGljZShjb25maWcuYmFzZVVSTCA/IGNvbmZpZy5iYXNlVVJMLmxlbmd0aCA6IDApO1xuICB9XG5cbiAgZGVsZXRlIGNvbmZpZy5hZGFwdGVyO1xuICBtb2NrQWRhcHRlci5oaXN0b3J5W2NvbmZpZy5tZXRob2RdLnB1c2goY29uZmlnKTtcblxuICB2YXIgaGFuZGxlciA9IHV0aWxzLmZpbmRIYW5kbGVyKFxuICAgIG1vY2tBZGFwdGVyLmhhbmRsZXJzLFxuICAgIGNvbmZpZy5tZXRob2QsXG4gICAgdXJsLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5wYXJhbXMsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLmJhc2VVUkxcbiAgKTtcblxuICBpZiAoaGFuZGxlcikge1xuICAgIGlmIChoYW5kbGVyLmxlbmd0aCA9PT0gNykge1xuICAgICAgdXRpbHMucHVyZ2VJZlJlcGx5T25jZShtb2NrQWRhcHRlciwgaGFuZGxlcik7XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBwYXNzVGhyb3VnaCBoYW5kbGVyXG4gICAgICBtb2NrQWRhcHRlci5vcmlnaW5hbEFkYXB0ZXIoY29uZmlnKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaGFuZGxlclszXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdXRpbHMuc2V0dGxlKFxuICAgICAgICByZXNvbHZlLFxuICAgICAgICByZWplY3QsXG4gICAgICAgIG1ha2VSZXNwb25zZShoYW5kbGVyLnNsaWNlKDMpLCBjb25maWcpLFxuICAgICAgICBtb2NrQWRhcHRlci5kZWxheVJlc3BvbnNlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gaGFuZGxlclszXShjb25maWcpO1xuICAgICAgLy8gVE9ETyB0aHJvdyBhIHNhbmUgZXhjZXB0aW9uIHdoZW4gcmV0dXJuIHZhbHVlIGlzIGluY29ycmVjdFxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQudGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB1dGlscy5zZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBtYWtlUmVzcG9uc2UocmVzdWx0LCBjb25maWcpLCBtb2NrQWRhcHRlci5kZWxheVJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC50aGVuKFxuICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maWcgJiYgcmVzdWx0LnN0YXR1cykge1xuICAgICAgICAgICAgICB1dGlscy5zZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBtYWtlUmVzcG9uc2UoW3Jlc3VsdC5zdGF0dXMsIHJlc3VsdC5kYXRhLCByZXN1bHQuaGVhZGVyc10sIHJlc3VsdC5jb25maWcpLCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHV0aWxzLnNldHRsZShyZXNvbHZlLCByZWplY3QsIG1ha2VSZXNwb25zZShyZXN1bHQsIGNvbmZpZyksIG1vY2tBZGFwdGVyLmRlbGF5UmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChtb2NrQWRhcHRlci5kZWxheVJlc3BvbnNlID4gMCkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIH0sIG1vY2tBZGFwdGVyLmRlbGF5UmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGhhbmRsZXIgbm90IGZvdW5kXG4gICAgdXRpbHMuc2V0dGxlKFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdCxcbiAgICAgIHtcbiAgICAgICAgc3RhdHVzOiA0MDQsXG4gICAgICAgIGNvbmZpZzogY29uZmlnXG4gICAgICB9LFxuICAgICAgbW9ja0FkYXB0ZXIuZGVsYXlSZXNwb25zZVxuICAgICk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYW5kbGVSZXF1ZXN0O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js\n");
/***/ }),
/***/ "./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js":
/*!*********************************************************************************!*\
!*** ./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar deepEqual = __webpack_require__(/*! deep-equal */ \"./node_modules/_deep-equal@1.1.0@deep-equal/index.js\");\n\nvar handleRequest = __webpack_require__(/*! ./handle_request */ \"./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/handle_request.js\");\n\nvar VERBS = ['get', 'post', 'head', 'delete', 'patch', 'put', 'options', 'list'];\n\nfunction adapter() {\n return function(config) {\n var mockAdapter = this;\n // axios >= 0.13.0 only passes the config and expects a promise to be\n // returned. axios < 0.13.0 passes (config, resolve, reject).\n if (arguments.length === 3) {\n handleRequest(mockAdapter, arguments[0], arguments[1], arguments[2]);\n } else {\n return new Promise(function(resolve, reject) {\n handleRequest(mockAdapter, resolve, reject, config);\n });\n }\n }.bind(this);\n}\n\nfunction getVerbObject() {\n return VERBS.reduce(function(accumulator, verb) {\n accumulator[verb] = [];\n return accumulator;\n }, {});\n}\n\nfunction reset() {\n resetHandlers.call(this);\n resetHistory.call(this);\n}\n\nfunction resetHandlers() {\n this.handlers = getVerbObject();\n}\n\nfunction resetHistory() {\n this.history = getVerbObject();\n}\n\nfunction MockAdapter(axiosInstance, options) {\n reset.call(this);\n\n if (axiosInstance) {\n this.axiosInstance = axiosInstance;\n this.originalAdapter = axiosInstance.defaults.adapter;\n this.delayResponse = options && options.delayResponse > 0 ? options.delayResponse : null;\n axiosInstance.defaults.adapter = this.adapter.call(this);\n }\n}\n\nMockAdapter.prototype.adapter = adapter;\n\nMockAdapter.prototype.restore = function restore() {\n if (this.axiosInstance) {\n this.axiosInstance.defaults.adapter = this.originalAdapter;\n }\n};\n\nMockAdapter.prototype.reset = reset;\nMockAdapter.prototype.resetHandlers = resetHandlers;\nMockAdapter.prototype.resetHistory = resetHistory;\n\nVERBS.concat('any').forEach(function(method) {\n var methodName = 'on' + method.charAt(0).toUpperCase() + method.slice(1);\n MockAdapter.prototype[methodName] = function(matcher, body, requestHeaders) {\n var _this = this;\n var matcher = matcher === undefined ? /.*/ : matcher;\n\n function reply(code, response, headers) {\n var handler = [matcher, body, requestHeaders, code, response, headers];\n addHandler(method, _this.handlers, handler);\n return _this;\n }\n\n function replyOnce(code, response, headers) {\n var handler = [matcher, body, requestHeaders, code, response, headers, true];\n addHandler(method, _this.handlers, handler);\n return _this;\n }\n\n return {\n reply: reply,\n\n replyOnce: replyOnce,\n\n passThrough: function passThrough() {\n var handler = [matcher, body];\n addHandler(method, _this.handlers, handler);\n return _this;\n },\n\n networkError: function() {\n reply(function(config) {\n var error = new Error('Network Error');\n error.config = config;\n return Promise.reject(error);\n });\n },\n\n networkErrorOnce: function() {\n replyOnce(function(config) {\n var error = new Error('Network Error');\n error.config = config;\n return Promise.reject(error);\n });\n },\n\n timeout: function() {\n reply(function(config) {\n var error = new Error('timeout of ' + config.timeout + 'ms exceeded');\n error.config = config;\n error.code = 'ECONNABORTED';\n return Promise.reject(error);\n });\n },\n\n timeoutOnce: function() {\n replyOnce(function(config) {\n var error = new Error('timeout of ' + config.timeout + 'ms exceeded');\n error.config = config;\n error.code = 'ECONNABORTED';\n return Promise.reject(error);\n });\n }\n };\n };\n});\n\nfunction findInHandlers(method, handlers, handler) {\n var index = -1;\n for (var i = 0; i < handlers[method].length; i += 1) {\n var item = handlers[method][i];\n var isReplyOnce = item.length === 7;\n var comparePaths = item[0] instanceof RegExp && handler[0] instanceof RegExp\n ? String(item[0]) === String(handler[0])\n : item[0] === handler[0];\n var isSame = (\n comparePaths &&\n deepEqual(item[1], handler[1], { strict: true }) &&\n deepEqual(item[2], handler[2], { strict: true })\n );\n if (isSame && !isReplyOnce) {\n index = i;\n }\n }\n return index;\n}\n\nfunction addHandler(method, handlers, handler) {\n if (method === 'any') {\n VERBS.forEach(function(verb) {\n handlers[verb].push(handler);\n });\n } else {\n var indexOfExistingHandler = findInHandlers(method, handlers, handler);\n if (indexOfExistingHandler > -1 && handler.length < 7) {\n handlers[method].splice(indexOfExistingHandler, 1, handler);\n } else {\n handlers[method].push(handler);\n }\n }\n}\n\nmodule.exports = MockAdapter;\nmodule.exports.default = MockAdapter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zLW1vY2stYWRhcHRlckAxLjE3LjBAYXhpb3MtbW9jay1hZGFwdGVyL3NyYy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3MtbW9jay1hZGFwdGVyQDEuMTcuMEBheGlvcy1tb2NrLWFkYXB0ZXIvc3JjL2luZGV4LmpzP2JlMDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVlcEVxdWFsID0gcmVxdWlyZSgnZGVlcC1lcXVhbCcpO1xuXG52YXIgaGFuZGxlUmVxdWVzdCA9IHJlcXVpcmUoJy4vaGFuZGxlX3JlcXVlc3QnKTtcblxudmFyIFZFUkJTID0gWydnZXQnLCAncG9zdCcsICdoZWFkJywgJ2RlbGV0ZScsICdwYXRjaCcsICdwdXQnLCAnb3B0aW9ucycsICdsaXN0J107XG5cbmZ1bmN0aW9uIGFkYXB0ZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb25maWcpIHtcbiAgICB2YXIgbW9ja0FkYXB0ZXIgPSB0aGlzO1xuICAgIC8vIGF4aW9zID49IDAuMTMuMCBvbmx5IHBhc3NlcyB0aGUgY29uZmlnIGFuZCBleHBlY3RzIGEgcHJvbWlzZSB0byBiZVxuICAgIC8vIHJldHVybmVkLiBheGlvcyA8IDAuMTMuMCBwYXNzZXMgKGNvbmZpZywgcmVzb2x2ZSwgcmVqZWN0KS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgaGFuZGxlUmVxdWVzdChtb2NrQWRhcHRlciwgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaGFuZGxlUmVxdWVzdChtb2NrQWRhcHRlciwgcmVzb2x2ZSwgcmVqZWN0LCBjb25maWcpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LmJpbmQodGhpcyk7XG59XG5cbmZ1bmN0aW9uIGdldFZlcmJPYmplY3QoKSB7XG4gIHJldHVybiBWRVJCUy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZlcmIpIHtcbiAgICBhY2N1bXVsYXRvclt2ZXJiXSA9IFtdO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiByZXNldCgpIHtcbiAgcmVzZXRIYW5kbGVycy5jYWxsKHRoaXMpO1xuICByZXNldEhpc3RvcnkuY2FsbCh0aGlzKTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYW5kbGVycygpIHtcbiAgdGhpcy5oYW5kbGVycyA9IGdldFZlcmJPYmplY3QoKTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIaXN0b3J5KCkge1xuICB0aGlzLmhpc3RvcnkgPSBnZXRWZXJiT2JqZWN0KCk7XG59XG5cbmZ1bmN0aW9uIE1vY2tBZGFwdGVyKGF4aW9zSW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgcmVzZXQuY2FsbCh0aGlzKTtcblxuICBpZiAoYXhpb3NJbnN0YW5jZSkge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZSA9IGF4aW9zSW5zdGFuY2U7XG4gICAgdGhpcy5vcmlnaW5hbEFkYXB0ZXIgPSBheGlvc0luc3RhbmNlLmRlZmF1bHRzLmFkYXB0ZXI7XG4gICAgdGhpcy5kZWxheVJlc3BvbnNlID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlbGF5UmVzcG9uc2UgPiAwID8gb3B0aW9ucy5kZWxheVJlc3BvbnNlIDogbnVsbDtcbiAgICBheGlvc0luc3RhbmNlLmRlZmF1bHRzLmFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXIuY2FsbCh0aGlzKTtcbiAgfVxufVxuXG5Nb2NrQWRhcHRlci5wcm90b3R5cGUuYWRhcHRlciA9IGFkYXB0ZXI7XG5cbk1vY2tBZGFwdGVyLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgaWYgKHRoaXMuYXhpb3NJbnN0YW5jZSkge1xuICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5kZWZhdWx0cy5hZGFwdGVyID0gdGhpcy5vcmlnaW5hbEFkYXB0ZXI7XG4gIH1cbn07XG5cbk1vY2tBZGFwdGVyLnByb3RvdHlwZS5yZXNldCA9IHJlc2V0O1xuTW9ja0FkYXB0ZXIucHJvdG90eXBlLnJlc2V0SGFuZGxlcnMgPSByZXNldEhhbmRsZXJzO1xuTW9ja0FkYXB0ZXIucHJvdG90eXBlLnJlc2V0SGlzdG9yeSA9IHJlc2V0SGlzdG9yeTtcblxuVkVSQlMuY29uY2F0KCdhbnknKS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICB2YXIgbWV0aG9kTmFtZSA9ICdvbicgKyBtZXRob2QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBtZXRob2Quc2xpY2UoMSk7XG4gIE1vY2tBZGFwdGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKG1hdGNoZXIsIGJvZHksIHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgbWF0Y2hlciA9IG1hdGNoZXIgPT09IHVuZGVmaW5lZCA/IC8uKi8gOiBtYXRjaGVyO1xuXG4gICAgZnVuY3Rpb24gcmVwbHkoY29kZSwgcmVzcG9uc2UsIGhlYWRlcnMpIHtcbiAgICAgIHZhciBoYW5kbGVyID0gW21hdGNoZXIsIGJvZHksIHJlcXVlc3RIZWFkZXJzLCBjb2RlLCByZXNwb25zZSwgaGVhZGVyc107XG4gICAgICBhZGRIYW5kbGVyKG1ldGhvZCwgX3RoaXMuaGFuZGxlcnMsIGhhbmRsZXIpO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcGx5T25jZShjb2RlLCByZXNwb25zZSwgaGVhZGVycykge1xuICAgICAgdmFyIGhhbmRsZXIgPSBbbWF0Y2hlciwgYm9keSwgcmVxdWVzdEhlYWRlcnMsIGNvZGUsIHJlc3BvbnNlLCBoZWFkZXJzLCB0cnVlXTtcbiAgICAgIGFkZEhhbmRsZXIobWV0aG9kLCBfdGhpcy5oYW5kbGVycywgaGFuZGxlcik7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcGx5OiByZXBseSxcblxuICAgICAgcmVwbHlPbmNlOiByZXBseU9uY2UsXG5cbiAgICAgIHBhc3NUaHJvdWdoOiBmdW5jdGlvbiBwYXNzVGhyb3VnaCgpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBbbWF0Y2hlciwgYm9keV07XG4gICAgICAgIGFkZEhhbmRsZXIobWV0aG9kLCBfdGhpcy5oYW5kbGVycywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH0sXG5cbiAgICAgIG5ldHdvcmtFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlcGx5KGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignTmV0d29yayBFcnJvcicpO1xuICAgICAgICAgIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIG5ldHdvcmtFcnJvck9uY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXBseU9uY2UoZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdOZXR3b3JrIEVycm9yJyk7XG4gICAgICAgICAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgdGltZW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlcGx5KGZ1bmN0aW9uKGNvbmZpZykge1xuICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnKTtcbiAgICAgICAgICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTkFCT1JURUQnO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgdGltZW91dE9uY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXBseU9uY2UoZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcpO1xuICAgICAgICAgIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICBlcnJvci5jb2RlID0gJ0VDT05OQUJPUlRFRCc7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn0pO1xuXG5mdW5jdGlvbiBmaW5kSW5IYW5kbGVycyhtZXRob2QsIGhhbmRsZXJzLCBoYW5kbGVyKSB7XG4gIHZhciBpbmRleCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXJzW21ldGhvZF0ubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgaXRlbSA9IGhhbmRsZXJzW21ldGhvZF1baV07XG4gICAgdmFyIGlzUmVwbHlPbmNlID0gaXRlbS5sZW5ndGggPT09IDc7XG4gICAgdmFyIGNvbXBhcmVQYXRocyA9IGl0ZW1bMF0gaW5zdGFuY2VvZiBSZWdFeHAgJiYgaGFuZGxlclswXSBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgPyBTdHJpbmcoaXRlbVswXSkgPT09IFN0cmluZyhoYW5kbGVyWzBdKVxuICAgICAgOiBpdGVtWzBdID09PSBoYW5kbGVyWzBdO1xuICAgIHZhciBpc1NhbWUgPSAoXG4gICAgICBjb21wYXJlUGF0aHMgJiZcbiAgICAgIGRlZXBFcXVhbChpdGVtWzFdLCBoYW5kbGVyWzFdLCB7IHN0cmljdDogdHJ1ZSB9KSAmJlxuICAgICAgZGVlcEVxdWFsKGl0ZW1bMl0sIGhhbmRsZXJbMl0sIHsgc3RyaWN0OiB0cnVlIH0pXG4gICAgKTtcbiAgICBpZiAoaXNTYW1lICYmICFpc1JlcGx5T25jZSkge1xuICAgICAgaW5kZXggPSAgaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKG1ldGhvZCwgaGFuZGxlcnMsIGhhbmRsZXIpIHtcbiAgaWYgKG1ldGhvZCA9PT0gJ2FueScpIHtcbiAgICBWRVJCUy5mb3JFYWNoKGZ1bmN0aW9uKHZlcmIpIHtcbiAgICAgIGhhbmRsZXJzW3ZlcmJdLnB1c2goaGFuZGxlcik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluZGV4T2ZFeGlzdGluZ0hhbmRsZXIgPSBmaW5kSW5IYW5kbGVycyhtZXRob2QsIGhhbmRsZXJzLCBoYW5kbGVyKTtcbiAgICBpZiAoaW5kZXhPZkV4aXN0aW5nSGFuZGxlciA+IC0xICYmIGhhbmRsZXIubGVuZ3RoIDwgNykge1xuICAgICAgaGFuZGxlcnNbbWV0aG9kXS5zcGxpY2UoaW5kZXhPZkV4aXN0aW5nSGFuZGxlciwgMSwgaGFuZGxlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzW21ldGhvZF0ucHVzaChoYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQWRhcHRlcjtcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBNb2NrQWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js\n");
/***/ }),
/***/ "./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js":
/*!*********************************************************************************!*\
!*** ./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar axios = __webpack_require__(/*! axios */ \"./node_modules/_axios@0.19.0@axios/index.js\");\nvar deepEqual = __webpack_require__(/*! deep-equal */ \"./node_modules/_deep-equal@1.1.0@deep-equal/index.js\");\n\nfunction isEqual(a, b) {\n return deepEqual(a, b, { strict: true });\n}\n\n// < 0.13.0 will not have default headers set on a custom instance\nvar rejectWithError = !!axios.create().defaults.headers;\n\nfunction find(array, predicate) {\n var length = array.length;\n for (var i = 0; i < length; i++) {\n var value = array[i];\n if (predicate(value)) return value;\n }\n}\n\nfunction combineUrls(baseURL, url) {\n if (baseURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + url.replace(/^\\/+/, '');\n }\n\n return url;\n}\n\nfunction findHandler(handlers, method, url, body, parameters, headers, baseURL) {\n return find(handlers[method.toLowerCase()], function(handler) {\n if (typeof handler[0] === 'string') {\n return (isUrlMatching(url, handler[0]) || isUrlMatching(combineUrls(baseURL, url), handler[0])) && isBodyOrParametersMatching(method, body, parameters, handler[1]) && isRequestHeadersMatching(headers, handler[2]);\n } else if (handler[0] instanceof RegExp) {\n return (handler[0].test(url) || handler[0].test(combineUrls(baseURL, url))) && isBodyOrParametersMatching(method, body, parameters, handler[1]) && isRequestHeadersMatching(headers, handler[2]);\n }\n });\n}\n\nfunction isUrlMatching(url, required) {\n var noSlashUrl = url[0] === '/' ? url.substr(1) : url;\n var noSlashRequired = required[0] === '/' ? required.substr(1) : required;\n return (noSlashUrl === noSlashRequired);\n}\n\nfunction isRequestHeadersMatching(requestHeaders, required) {\n if (required === undefined) return true;\n return isEqual(requestHeaders, required);\n}\n\nfunction isBodyOrParametersMatching(method, body, parameters, required) {\n var allowedParamsMethods = ['delete', 'get', 'head', 'options'];\n if (allowedParamsMethods.indexOf(method.toLowerCase()) >= 0 ) {\n var params = required ? required.params : undefined;\n return isParametersMatching(parameters, params);\n } else {\n return isBodyMatching(body, required);\n }\n}\n\nfunction isParametersMatching(parameters, required) {\n if (required === undefined) return true;\n\n return isEqual(parameters, required);\n}\n\nfunction isBodyMatching(body, requiredBody) {\n if (requiredBody === undefined) {\n return true;\n }\n var parsedBody;\n try {\n parsedBody = JSON.parse(body);\n } catch (e) { }\n return parsedBody ? isEqual(parsedBody, requiredBody) : isEqual(body, requiredBody);\n}\n\nfunction purgeIfReplyOnce(mock, handler) {\n Object.keys(mock.handlers).forEach(function(key) {\n var index = mock.handlers[key].indexOf(handler);\n if (index > -1) {\n mock.handlers[key].splice(index, 1);\n }\n });\n}\n\nfunction settle(resolve, reject, response, delay) {\n if (delay > 0) {\n setTimeout(function() {\n settle(resolve, reject, response);\n }, delay);\n return;\n }\n\n if (response.config && response.config.validateStatus) {\n response.config.validateStatus(response.status)\n ? resolve(response)\n : reject(createErrorResponse(\n 'Request failed with status code ' + response.status,\n response.config,\n response\n ));\n return;\n }\n\n // Support for axios < 0.11\n if (response.status >= 200 && response.status < 300) {\n resolve(response);\n } else {\n reject(response);\n }\n}\n\nfunction createErrorResponse(message, config, response) {\n // Support for axios < 0.13.0\n if (!rejectWithError) return response;\n\n var error = new Error(message);\n error.config = config;\n error.response = response;\n return error;\n}\n\nfunction isSimpleObject(value) {\n return value !== null && value !== undefined && value.toString() === '[object Object]';\n}\n\nmodule.exports = {\n find: find,\n findHandler: findHandler,\n isSimpleObject: isSimpleObject,\n purgeIfReplyOnce: purgeIfReplyOnce,\n settle: settle\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zLW1vY2stYWRhcHRlckAxLjE3LjBAYXhpb3MtbW9jay1hZGFwdGVyL3NyYy91dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3MtbW9jay1hZGFwdGVyQDEuMTcuMEBheGlvcy1tb2NrLWFkYXB0ZXIvc3JjL3V0aWxzLmpzP2NlZTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpO1xudmFyIGRlZXBFcXVhbCA9IHJlcXVpcmUoJ2RlZXAtZXF1YWwnKTtcblxuZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG4gIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgeyBzdHJpY3Q6IHRydWUgfSk7XG59XG5cbi8vIDwgMC4xMy4wIHdpbGwgbm90IGhhdmUgZGVmYXVsdCBoZWFkZXJzIHNldCBvbiBhIGN1c3RvbSBpbnN0YW5jZVxudmFyIHJlamVjdFdpdGhFcnJvciA9ICEhYXhpb3MuY3JlYXRlKCkuZGVmYXVsdHMuaGVhZGVycztcblxuZnVuY3Rpb24gZmluZChhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVUkwsIHVybCkge1xuICBpZiAoYmFzZVVSTCkge1xuICAgIHJldHVybiBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgdXJsLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoaGFuZGxlcnMsIG1ldGhvZCwgdXJsLCBib2R5LCBwYXJhbWV0ZXJzLCBoZWFkZXJzLCBiYXNlVVJMKSB7XG4gIHJldHVybiBmaW5kKGhhbmRsZXJzW21ldGhvZC50b0xvd2VyQ2FzZSgpXSwgZnVuY3Rpb24oaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlclswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAoaXNVcmxNYXRjaGluZyh1cmwsIGhhbmRsZXJbMF0pIHx8IGlzVXJsTWF0Y2hpbmcoY29tYmluZVVybHMoYmFzZVVSTCwgdXJsKSwgaGFuZGxlclswXSkpICYmIGlzQm9keU9yUGFyYW1ldGVyc01hdGNoaW5nKG1ldGhvZCwgYm9keSwgcGFyYW1ldGVycywgaGFuZGxlclsxXSkgICYmIGlzUmVxdWVzdEhlYWRlcnNNYXRjaGluZyhoZWFkZXJzLCBoYW5kbGVyWzJdKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXJbMF0gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAoaGFuZGxlclswXS50ZXN0KHVybCkgfHwgaGFuZGxlclswXS50ZXN0KGNvbWJpbmVVcmxzKGJhc2VVUkwsIHVybCkpKSAmJiBpc0JvZHlPclBhcmFtZXRlcnNNYXRjaGluZyhtZXRob2QsIGJvZHksIHBhcmFtZXRlcnMsIGhhbmRsZXJbMV0pICYmIGlzUmVxdWVzdEhlYWRlcnNNYXRjaGluZyhoZWFkZXJzLCBoYW5kbGVyWzJdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1VybE1hdGNoaW5nKHVybCwgcmVxdWlyZWQpIHtcbiAgdmFyIG5vU2xhc2hVcmwgPSB1cmxbMF0gPT09ICcvJyA/IHVybC5zdWJzdHIoMSkgOiB1cmw7XG4gIHZhciBub1NsYXNoUmVxdWlyZWQgPSByZXF1aXJlZFswXSA9PT0gJy8nID8gcmVxdWlyZWQuc3Vic3RyKDEpIDogcmVxdWlyZWQ7XG4gIHJldHVybiAobm9TbGFzaFVybCA9PT0gbm9TbGFzaFJlcXVpcmVkKTtcbn1cblxuZnVuY3Rpb24gaXNSZXF1ZXN0SGVhZGVyc01hdGNoaW5nKHJlcXVlc3RIZWFkZXJzLCByZXF1aXJlZCkge1xuICBpZiAocmVxdWlyZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBpc0VxdWFsKHJlcXVlc3RIZWFkZXJzLCByZXF1aXJlZCk7XG59XG5cbmZ1bmN0aW9uIGlzQm9keU9yUGFyYW1ldGVyc01hdGNoaW5nKG1ldGhvZCwgYm9keSwgcGFyYW1ldGVycywgcmVxdWlyZWQpIHtcbiAgdmFyIGFsbG93ZWRQYXJhbXNNZXRob2RzID0gWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddO1xuICBpZiAoYWxsb3dlZFBhcmFtc01ldGhvZHMuaW5kZXhPZihtZXRob2QudG9Mb3dlckNhc2UoKSkgPj0gMCApIHtcbiAgICB2YXIgcGFyYW1zID0gcmVxdWlyZWQgPyByZXF1aXJlZC5wYXJhbXMgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzUGFyYW1ldGVyc01hdGNoaW5nKHBhcmFtZXRlcnMsIHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGlzQm9keU1hdGNoaW5nKGJvZHksIHJlcXVpcmVkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BhcmFtZXRlcnNNYXRjaGluZyhwYXJhbWV0ZXJzLCByZXF1aXJlZCkge1xuICBpZiAocmVxdWlyZWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIGlzRXF1YWwocGFyYW1ldGVycywgcmVxdWlyZWQpO1xufVxuXG5mdW5jdGlvbiBpc0JvZHlNYXRjaGluZyhib2R5LCByZXF1aXJlZEJvZHkpIHtcbiAgaWYgKHJlcXVpcmVkQm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIHBhcnNlZEJvZHk7XG4gIHRyeSB7XG4gICAgcGFyc2VkQm9keSA9IEpTT04ucGFyc2UoYm9keSk7XG4gIH0gY2F0Y2ggKGUpIHsgfVxuICByZXR1cm4gcGFyc2VkQm9keSA/IGlzRXF1YWwocGFyc2VkQm9keSwgcmVxdWlyZWRCb2R5KSA6IGlzRXF1YWwoYm9keSwgcmVxdWlyZWRCb2R5KTtcbn1cblxuZnVuY3Rpb24gcHVyZ2VJZlJlcGx5T25jZShtb2NrLCBoYW5kbGVyKSB7XG4gIE9iamVjdC5rZXlzKG1vY2suaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gbW9jay5oYW5kbGVyc1trZXldLmluZGV4T2YoaGFuZGxlcik7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIG1vY2suaGFuZGxlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlLCBkZWxheSkge1xuICBpZiAoZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICB9LCBkZWxheSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNvbmZpZyAmJiByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXMpIHtcbiAgICByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgPyByZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgOiByZWplY3QoY3JlYXRlRXJyb3JSZXNwb25zZShcbiAgICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgICByZXNwb25zZVxuICAgICAgKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU3VwcG9ydCBmb3IgYXhpb3MgPCAwLjExXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChyZXNwb25zZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JSZXNwb25zZShtZXNzYWdlLCBjb25maWcsIHJlc3BvbnNlKSB7XG4gIC8vIFN1cHBvcnQgZm9yIGF4aW9zIDwgMC4xMy4wXG4gIGlmICghcmVqZWN0V2l0aEVycm9yKSByZXR1cm4gcmVzcG9uc2U7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaW5kOiBmaW5kLFxuICBmaW5kSGFuZGxlcjogZmluZEhhbmRsZXIsXG4gIGlzU2ltcGxlT2JqZWN0OiBpc1NpbXBsZU9iamVjdCxcbiAgcHVyZ2VJZlJlcGx5T25jZTogcHVyZ2VJZlJlcGx5T25jZSxcbiAgc2V0dGxlOiBzZXR0bGVcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/utils.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/index.js":
/*!***************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/index.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__(/*! ./lib/axios */ \"./node_modules/_axios@0.19.0@axios/lib/axios.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2luZGV4LmpzPzI0MjciXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/index.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js":
/*!**************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar settle = __webpack_require__(/*! ./../core/settle */ \"./node_modules/_axios@0.19.0@axios/lib/core/settle.js\");\nvar buildURL = __webpack_require__(/*! ./../helpers/buildURL */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js\");\nvar parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js\");\nvar isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js\");\nvar createError = __webpack_require__(/*! ../core/createError */ \"./node_modules/_axios@0.19.0@axios/lib/core/createError.js\");\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = __webpack_require__(/*! ./../helpers/cookies */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js\");\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvYWRhcHRlcnMveGhyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcz8xM2E3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdOZXR3b3JrIEVycm9yJywgY29uZmlnLCBudWxsLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICB2YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG5cbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihjb25maWcudXJsKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/axios.js":
/*!*******************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/axios.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js\");\nvar Axios = __webpack_require__(/*! ./core/Axios */ \"./node_modules/_axios@0.19.0@axios/lib/core/Axios.js\");\nvar mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ \"./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js\");\nvar defaults = __webpack_require__(/*! ./defaults */ \"./node_modules/_axios@0.19.0@axios/lib/defaults.js\");\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js\");\naxios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js\");\naxios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js\");\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = __webpack_require__(/*! ./helpers/spread */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js\");\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvYXhpb3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvYXhpb3MuanM/YjI5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG5heGlvcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGF4aW9zLmRlZmF1bHRzLCBpbnN0YW5jZUNvbmZpZykpO1xufTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/axios.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js":
/*!***************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzPzY5MzgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js":
/*!********************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar Cancel = __webpack_require__(/*! ./Cancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/Cancel.js\");\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcz8xYzBmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/cancel/CancelToken.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js":
/*!*****************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcz9kZWFkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/Axios.js":
/*!************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/Axios.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar buildURL = __webpack_require__(/*! ../helpers/buildURL */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js\");\nvar InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ \"./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js\");\nvar dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ \"./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js\");\nvar mergeConfig = __webpack_require__(/*! ./mergeConfig */ \"./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js\");\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get';\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9BeGlvcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jb3JlL0F4aW9zLmpzPzUyMWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QgPyBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCkgOiAnZ2V0JztcblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/Axios.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js":
/*!*************************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanM/YWM5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/InterceptorManager.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/createError.js":
/*!******************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/createError.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar enhanceError = __webpack_require__(/*! ./enhanceError */ \"./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js\");\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jb3JlL2NyZWF0ZUVycm9yLmpzPzZkMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/createError.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js":
/*!**********************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar transformData = __webpack_require__(/*! ./transformData */ \"./node_modules/_axios@0.19.0@axios/lib/core/transformData.js\");\nvar isCancel = __webpack_require__(/*! ../cancel/isCancel */ \"./node_modules/_axios@0.19.0@axios/lib/cancel/isCancel.js\");\nvar defaults = __webpack_require__(/*! ../defaults */ \"./node_modules/_axios@0.19.0@axios/lib/defaults.js\");\nvar isAbsoluteURL = __webpack_require__(/*! ./../helpers/isAbsoluteURL */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js\");\nvar combineURLs = __webpack_require__(/*! ./../helpers/combineURLs */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js\");\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanM/NTZiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBTdXBwb3J0IGJhc2VVUkwgY29uZmlnXG4gIGlmIChjb25maWcuYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChjb25maWcudXJsKSkge1xuICAgIGNvbmZpZy51cmwgPSBjb21iaW5lVVJMcyhjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gIH1cblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzIHx8IHt9XG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/dispatchRequest.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js":
/*!*******************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanM/NTAzYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGVcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/enhanceError.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js":
/*!******************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach([\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n 'socketPath'\n ], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzPzE1ZDUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHV0aWxzLmZvckVhY2goWyd1cmwnLCAnbWV0aG9kJywgJ3BhcmFtcycsICdkYXRhJ10sIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKFsnaGVhZGVycycsICdhdXRoJywgJ3Byb3h5J10sIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICh1dGlscy5pc09iamVjdChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gdXRpbHMuZGVlcE1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcxW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMVtwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goW1xuICAgICdiYXNlVVJMJywgJ3RyYW5zZm9ybVJlcXVlc3QnLCAndHJhbnNmb3JtUmVzcG9uc2UnLCAncGFyYW1zU2VyaWFsaXplcicsXG4gICAgJ3RpbWVvdXQnLCAnd2l0aENyZWRlbnRpYWxzJywgJ2FkYXB0ZXInLCAncmVzcG9uc2VUeXBlJywgJ3hzcmZDb29raWVOYW1lJyxcbiAgICAneHNyZkhlYWRlck5hbWUnLCAnb25VcGxvYWRQcm9ncmVzcycsICdvbkRvd25sb2FkUHJvZ3Jlc3MnLCAnbWF4Q29udGVudExlbmd0aCcsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJywgJ21heFJlZGlyZWN0cycsICdodHRwQWdlbnQnLCAnaHR0cHNBZ2VudCcsICdjYW5jZWxUb2tlbicsXG4gICAgJ3NvY2tldFBhdGgnXG4gIF0sIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/mergeConfig.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/settle.js":
/*!*************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/settle.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar createError = __webpack_require__(/*! ./createError */ \"./node_modules/_axios@0.19.0@axios/lib/core/createError.js\");\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9zZXR0bGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS9zZXR0bGUuanM/OTM3YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/settle.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/core/transformData.js":
/*!********************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/core/transformData.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcz9mOThjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4oZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/core/transformData.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/defaults.js":
/*!**********************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/defaults.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\nvar normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js\");\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n // Only Node.JS has a process variable that is of [[Class]] process\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = __webpack_require__(/*! ./adapters/http */ \"./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js\");\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = __webpack_require__(/*! ./adapters/xhr */ \"./node_modules/_axios@0.19.0@axios/lib/adapters/xhr.js\");\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../_process@0.11.10@process/browser.js */ \"./node_modules/_process@0.11.10@process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvZGVmYXVsdHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvZGVmYXVsdHMuanM/YTMxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICAvLyBPbmx5IE5vZGUuSlMgaGFzIGEgcHJvY2VzcyB2YXJpYWJsZSB0aGF0IGlzIG9mIFtbQ2xhc3NdXSBwcm9jZXNzXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/defaults.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js":
/*!**************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9iaW5kLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz9jOWVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js":
/*!******************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzP2M5NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/buildURL.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js":
/*!*********************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fYXhpb3NAMC4xOS4wQGF4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzPzA5MmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/combineURLs.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js":
/*!*****************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcz8xMjYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/cookies.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js":
/*!***********************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcz85ODg0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/isAbsoluteURL.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js":
/*!*************************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanM/ZjFiZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/isURLSameOrigin.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js":
/*!*****************************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19heGlvc0AwLjE5LjBAYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcz8wM2NlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/normalizeHeaderName.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js":
/*!**********************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/_axios@0.19.0@axios/lib/utils.js\");\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/ZmI3NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/parseHeaders.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js":
/*!****************************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvaGVscGVycy9zcHJlYWQuanM/OGNjOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/helpers/spread.js\n");
/***/ }),
/***/ "./node_modules/_axios@0.19.0@axios/lib/utils.js":
/*!*******************************************************!*\
!*** ./node_modules/_axios@0.19.0@axios/lib/utils.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/_axios@0.19.0@axios/lib/helpers/bind.js\");\nvar isBuffer = __webpack_require__(/*! is-buffer */ \"./node_modules/_is-buffer@2.0.4@is-buffer/index.js\");\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvdXRpbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2F4aW9zQDAuMTkuMEBheGlvcy9saWIvdXRpbHMuanM/NGExNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGVxdWFsIHRvIG1lcmdlIHdpdGggdGhlIGRpZmZlcmVuY2UgYmVpbmcgdGhhdCBubyByZWZlcmVuY2VcbiAqIHRvIG9yaWdpbmFsIG9iamVjdHMgaXMga2VwdC5cbiAqXG4gKiBAc2VlIG1lcmdlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBkZWVwTWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZGVlcE1lcmdlOiBkZWVwTWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_axios@0.19.0@axios/lib/utils.js\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=script&lang=js& ***!
\********************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es7.object.get-own-property-descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js\");\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es6.object.keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\");\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @utils/utils.js */ \"./src/utils/utils.js\");\n/* harmony import */ var _components_home_header_header_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @components/home/header/header.vue */ \"./src/components/home/header/header.vue\");\n/* harmony import */ var _components_home_footer_footer_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @components/home/footer/footer.vue */ \"./src/components/home/footer/footer.vue\");\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar UA = __webpack_require__(/*! ua-device */ \"./node_modules/_ua-device@0.1.10@ua-device/index.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"app\",\n components: {\n VHeader: _components_home_header_header_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n VFooter: _components_home_footer_footer_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_4__[\"mapState\"])({\n isMobile: function isMobile(state) {\n return state.isMobile;\n }\n })),\n methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_4__[\"mapActions\"])([\"pcorphone\"])),\n created: function created() {\n var _this = this; // 设置UA\n\n\n var output = new UA(navigator.userAgent);\n var deviceType = output.device.type;\n var isMobile = deviceType == \"mobile\";\n this.$store.commit(\"IS_MOBILE\", isMobile); //\n\n var userInfoStr = decodeURIComponent(Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_5__[\"getCookie\"])(\"_user_profile\"));\n\n if (userInfoStr) {\n try {\n var userInfo = JSON.parse(decodeURIComponent(userInfoStr));\n this.$store.commit(\"SET_USER_INFO\", userInfo);\n } catch (e) {}\n }\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9BcHAudnVlPzIzNGUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2IGlkPVwiYXBwXCI+XG4gICAgPHYtaGVhZGVyPjwvdi1oZWFkZXI+XG4gICAgPG1haW4gcmVmPVwiY29udGFpbmVyXCIgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiPlxuICAgICAgPHJvdXRlci12aWV3IC8+XG4gICAgPC9tYWluPlxuICAgIDx2LWZvb3Rlcj48L3YtZm9vdGVyPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cblxuPHNjcmlwdD5cbmltcG9ydCB7IG1hcEdldHRlcnMsIG1hcEFjdGlvbnMsIG1hcFN0YXRlIH0gZnJvbSBcInZ1ZXhcIjtcbmltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gXCJAdXRpbHMvdXRpbHMuanNcIjtcbmltcG9ydCBWSGVhZGVyIGZyb20gXCJAY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlXCI7XG5pbXBvcnQgVkZvb3RlciBmcm9tIFwiQGNvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZVwiO1xudmFyIFVBID0gcmVxdWlyZShcInVhLWRldmljZVwiKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiBcImFwcFwiLFxuICBjb21wb25lbnRzOiB7XG4gICAgVkhlYWRlcixcbiAgICBWRm9vdGVyXG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgLi4ubWFwU3RhdGUoe1xuICAgICAgaXNNb2JpbGU6IHN0YXRlID0+IHN0YXRlLmlzTW9iaWxlXG4gICAgfSlcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIC4uLm1hcEFjdGlvbnMoW1wicGNvcnBob25lXCJdKVxuICB9LFxuICBjcmVhdGVkKCkge1xuICAgIGxldCBfdGhpcyA9IHRoaXM7XG4gICAgLy8g6K6+572uVUFcbiAgICBsZXQgb3V0cHV0ID0gbmV3IFVBKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGxldCBkZXZpY2VUeXBlID0gb3V0cHV0LmRldmljZS50eXBlO1xuICAgIGxldCBpc01vYmlsZSA9IGRldmljZVR5cGUgPT0gXCJtb2JpbGVcIjtcbiAgICB0aGlzLiRzdG9yZS5jb21taXQoXCJJU19NT0JJTEVcIiwgaXNNb2JpbGUpO1xuXG4gICAgLy9cbiAgICBsZXQgdXNlckluZm9TdHIgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0Q29va2llKFwiX3VzZXJfcHJvZmlsZVwiKSk7XG4gICAgaWYgKHVzZXJJbmZvU3RyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgdXNlckluZm8gPSBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh1c2VySW5mb1N0cikpO1xuICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoXCJTRVRfVVNFUl9JTkZPXCIsIHVzZXJJbmZvKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCBcIkAvc3R5bGVzL19zdXBwb3J0XCI7XG5cbmh0bWwge1xuICBmb250LWZhbWlseTogXCJNaWNyb3NvZnQgWWFIZWlcIiwgXCJBcmlhbFwiO1xuICBmb250LXNpemU6IDEycHg7XG4gIHdvcmQtc3BhY2luZzogMXB4O1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgLy8gLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC8vIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLy8gLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgLy8gLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmh0bWwsXG5ib2R5IHtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBub25lO1xufVxuXG5ib2R5LFxuZGl2IHtcbiAgYm9yZGVyOiAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbiosXG4qOmJlZm9yZSxcbio6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG59XG5cbmJvZHksXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYsXG5ocixcbnAsXG5ibG9ja3F1b3RlLFxuZGwsXG5kdCxcbmRkLFxudWwsXG5vbCxcbmxpLFxucHJlLFxuZm9ybSxcbmZpZWxkc2V0LFxubGVnZW5kLFxuYnV0dG9uLFxuaW5wdXQsXG50ZXh0YXJlYSxcbnRoLFxudGQsXG5pZnJhbWUge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmltZyxcbmFydGljbGUsXG5hc2lkZSxcbmRldGFpbHMsXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5LFxudGltZSxcbm1hcmssXG5hdWRpbyxcbnZpZGVvIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1zaXplOiAxMDAlO1xufVxuXG5maWVsZHNldCxcbmltZyB7XG4gIGJvcmRlcjogMDtcbn1cblxuYWRkcmVzcyxcbmNhcHRpb24sXG5jaXRlLFxuZGZuLFxuZW0sXG50aCxcbnZhcixcbmksXG5lbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cblxub2wsXG51bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbmEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBpbmhlcml0O1xuICAmOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbn1cblxuYSxcbmxhYmVsLFxuYnV0dG9uLFxuaW5wdXQsXG5zZWxlY3Qge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG59XG5cbmlucHV0LFxuc2VsZWN0LFxuYnV0dG9uIHtcbiAgLy8gZm9udDogMTAwJSB0YWhvbWEsIFwiXFw1YjhiXFw0ZjUzXCIsIGFyaWFsO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5zZWxlY3Qge1xuICBvdXRsaW5lOiBub25lO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbn1cbnNlbGVjdDo6LW1zLWV4cGFuZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbmlucHV0IHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xufVxuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dCxcbmlucHV0W3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0W3R5cGU9XCJidXR0b25cIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXRbdHlwZT1cImZpbGVcIl0gPiBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiBub25lO1xufVxuXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZSAhaW1wb3J0YW50O1xuICAtbW96LWFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbnB1dDotd2Via2l0LWF1dG9maWxsIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxMDAwcHggd2hpdGUgaW5zZXQ7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0sXG5pbnB1dFt0eXBlPVwidGVsXCJdLFxuaW5wdXRbdHlwZT1cInRleHRcIl0sXG5pbnB1dCB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLyrljrvpmaTns7vnu5/pu5jorqTnmoTmoLflvI8qL1xuICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAvLyBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuaW5wdXQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sXG5pbnB1dDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbi8vICAgY29sb3I6ICRjR3JheSAhaW1wb3J0YW50O1xuLy8gfVxuXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAvKiBXZWJLaXQsIEJsaW5rLCBFZGdlICovXG4gIGNvbG9yOiAkY0dyYXk7XG4gIG9wYWNpdHk6IDE7XG59XG46LW1vei1wbGFjZWhvbGRlciB7XG4gIC8qIE1vemlsbGEgRmlyZWZveCA0IHRvIDE4ICovXG4gIGNvbG9yOiAkY0dyYXk7XG4gIG9wYWNpdHk6IDE7XG59XG46Oi1tb3otcGxhY2Vob2xkZXIge1xuICAvKiBNb3ppbGxhIEZpcmVmb3ggMTkrICovXG4gIGNvbG9yOiAkY0dyYXk7XG4gIG9wYWNpdHk6IDE7XG59XG46LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgLyogSW50ZXJuZXQgRXhwbG9yZXIgMTAtMTEgKi9cbiAgY29sb3I6ICRjR3JheTtcbiAgb3BhY2l0eTogMTtcbn1cblxuc2VsZWN0LFxuaW5wdXQsXG5vcHRpb24ge1xuICBjb2xvcjogJGNMaWdodEJsYWNrO1xufVxuXG50ZXh0YXJlYSB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcmVzaXplOiBub25lO1xuICAvLyBmb250OiAxMDAlIHRhaG9tYSwgXCJcXDViOGJcXDRmNTNcIiwgYXJpYWw7XG4gIGNvbG9yOiAkY0xpZ2h0QmxhY2s7XG59XG5cbi5jT3JhbmdlIHtcbiAgY29sb3I6ICRjT3JhbmdlO1xufVxuLmNHcmVlbiB7XG4gIGNvbG9yOiAkY0dyZWVuO1xufVxuLmNHcmF5IHtcbiAgY29sb3I6ICRjR3JheTtcbn1cbi5jRGFyayB7XG4gIGNvbG9yOiAkY0Rhcms7XG59XG5cbiNhcHAge1xuICBib3JkZXI6IDA7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLm1haW4tY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IDAgYXV0bztcbiAgd2lkdGg6IDEwMCU7XG4gIC8vIG1heC13aWR0aDogMTAyNHB4OyAvLyDorr7orqHnqL/lrr3luqZcbiAgLy8gbWluLWhlaWdodDogNDByZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cblxuLmNvbnRlbnQge1xuICBtYXgtd2lkdGg6IDEwMjRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uYm94LXcge1xuICAvLyBtYXgtd2lkdGg6IDEwMjRweDtcbiAgbWF4LXdpZHRoOiA5NTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uYm94IHtcbiAgbWF4LXdpZHRoOiA5NTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uZm9jdXN7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRjT3JhbmdlIDtcbn1cblxuLmFwcF9fd2lkdGgge1xuICB3aWR0aDogNzUwcHg7XG59XG5cbi5hcHBfX3dpZHRoIHtcbiAgd2lkdGg6IDc1MHB4O1xufVxuXG4uYXBwX19pbm5lciB7XG4gIG1hcmdpbjogMjBweDtcbn1cblxuLmFwcF9fdGl0bGUge1xuICBmb250LXNpemU6ICRmb250U2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRmb250U2l6ZSArIDRweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXItYm90dG9tOiAwLjVweCBzb2xpZCAjZWVlZWVlO1xufVxuXG4uYXBwX19kZXNjIHtcbiAgZm9udC1zaXplOiAkZm9udFNpemVTbWFsbGVyO1xuICBsaW5lLWhlaWdodDogJGZvbnRTaXplU21hbGxlciArIDJweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICRjb2xvckdyYXk7XG59XG5cbi5hcHBfX2JnYyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmFwcF9fYmcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5hcHBfX3RvcC1zaGFkb3cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHdpZHRoOiA3NTBweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJveC1zaGFkb3c6IDBweCA0cHggMC45cHggMC4xcHggcmdiYSg2LCAwLCAxLCAwLjA3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cblxuLmFwcF9fY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XG4gIHdpZHRoOiAxcmVtICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMXJlbSAhaW1wb3J0YW50O1xufVxuXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZSB7XG4gIGJhY2tncm91bmQ6ICNmMDVhMjMgIWltcG9ydGFudDtcbn1cblxuXG4uaXB0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAkY09yYW5nZSAhaW1wb3J0YW50O1xufVxuXG4uaXB0LmVyciB7XG4gIGJvcmRlci1jb2xvcjogJGNPcmFuZ2UgIWltcG9ydGFudDtcbn1cblxuPC9zdHlsZT5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBRUE7QUFBQTtBQUFBO0FBREE7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&":
/*!*******************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js& ***!
\*******************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.function.name */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\");\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/api/api */ \"./src/api/api.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_api_api__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _api_fetch_api_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/api/fetch-api.js */ \"./src/api/fetch-api.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"DropDownList\",\n data: function data() {\n return {\n activeIndex: 0,\n sTitle: this.dataObj && this.dataObj.name || ''\n };\n },\n props: {\n type: {\n type: String,\n default: function _default() {\n return \"nav\";\n }\n },\n dataObj: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n dataList: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n labelProperty: {\n type: String,\n default: function _default() {\n return \"name\";\n }\n }\n },\n directives: {\n dpl: {\n bind: function bind(el) {\n el.style.display = \"none\";\n }\n }\n },\n methods: {\n onNavHandler: function onNavHandler() {\n var path = this.dataObj && this.dataObj.path || \"\";\n\n if (path) {\n this.$router.push({\n path: path\n });\n }\n },\n onOverHandler: function onOverHandler(event) {\n var ul = event.currentTarget.childNodes[1].childNodes[1];\n ul.style.display = \"block\";\n },\n onOutHandler: function onOutHandler(event) {\n // console.log(event);\n var ul = event.currentTarget.childNodes[1].childNodes[1];\n ul.style.display = \"none\";\n },\n onClickHandler: function onClickHandler(event, index) {\n // 隐藏其他\n // let path = event.path || (event.composedPath && event.composedPath()); //兼容火狐和safari\n // path[1].style.display = \"none\";\n if (this.$refs.ul) {\n this.$refs.ul.style.display = \"none\";\n } // 选择item\n\n\n this.activeIndex = index;\n var curData = this.dataList[index];\n\n if (this.type == \"lang\") {\n // 如果是语言设置,则设置语言\n var lang = curData.value;\n this.$i18n.locale = lang;\n localStorage.setItem(\"lang\", lang);\n this.sTitle = curData.name;\n window.location.reload();\n } else {\n // console.log(\"curData.value == =\", curData.value)\n if (curData.value == \"logout\") {\n // this.$store.commit(\"SET_USER_INFO\", null);\n this._loginHandler();\n } else {\n // 不是的话,跳转页面\n this.$router.push({\n path: curData.path\n });\n }\n } // console.log(\"name:\", this.dataList[index].name);\n // this.$emit(\"change\", {\n // \tindex: index,\n // \tvalue: this.dataList[index]\n // });\n\n },\n _loginHandler: function _loginHandler() {\n var _this = this;\n\n Object(_api_fetch_api_js__WEBPACK_IMPORTED_MODULE_3__[\"httpPost\"])({\n url: _api_api__WEBPACK_IMPORTED_MODULE_2___default.a.logout\n }).then(function () {\n _this.$store.commit(\"SET_USER_INFO\", null);\n\n _this._showLogoutTip();\n });\n },\n _showLogoutTip: function _showLogoutTip() {\n // 登出后的提示\n alert(\"登出成功\");\n }\n },\n computed: {\n dplLable: function dplLable() {\n return this.dataList[this.activeIndex][this.labelProperty];\n }\n },\n created: function created() {// this.\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24uanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9kcm9wZG93bi9kcm9wZG93bi5qcz85Mzc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdG1hcFN0YXRlXG59IGZyb20gJ3Z1ZXgnXG5cbmltcG9ydCBhcGkgZnJvbSAnQC9hcGkvYXBpJ1xuaW1wb3J0IHsgaHR0cFBvc3QgfSBmcm9tICdAL2FwaS9mZXRjaC1hcGkuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0bmFtZTogXCJEcm9wRG93bkxpc3RcIixcblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YWN0aXZlSW5kZXg6IDAsXG5cdFx0XHRzVGl0bGU6IHRoaXMuZGF0YU9iaiAmJiB0aGlzLmRhdGFPYmoubmFtZSB8fCAnJyxcblx0XHR9O1xuXHR9LFxuXHRwcm9wczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHR5cGU6IFN0cmluZyxcblx0XHRcdGRlZmF1bHQoKSB7XG5cdFx0XHRcdHJldHVybiBcIm5hdlwiO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGF0YU9iajoge1xuXHRcdFx0dHlwZTogT2JqZWN0LFxuXHRcdFx0ZGVmYXVsdCgpIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGF0YUxpc3Q6IHtcblx0XHRcdHR5cGU6IEFycmF5LFxuXHRcdFx0ZGVmYXVsdCgpIHtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGFiZWxQcm9wZXJ0eToge1xuXHRcdFx0dHlwZTogU3RyaW5nLFxuXHRcdFx0ZGVmYXVsdCgpIHtcblx0XHRcdFx0cmV0dXJuIFwibmFtZVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZGlyZWN0aXZlczoge1xuXHRcdGRwbDoge1xuXHRcdFx0YmluZChlbCkge1xuXHRcdFx0XHRlbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0b25OYXZIYW5kbGVyKCkge1xuXHRcdFx0bGV0IHBhdGggPSB0aGlzLmRhdGFPYmogJiYgdGhpcy5kYXRhT2JqLnBhdGggfHwgXCJcIjtcblx0XHRcdGlmIChwYXRoKSB7XG5cdFx0XHRcdHRoaXMuJHJvdXRlci5wdXNoKHtcblx0XHRcdFx0XHRwYXRoOiBwYXRoXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbk92ZXJIYW5kbGVyKGV2ZW50KSB7XG5cblx0XHRcdGxldCB1bCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzFdO1xuXHRcdFx0dWwuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0XHR9LFxuXHRcdG9uT3V0SGFuZGxlcihldmVudCkge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coZXZlbnQpO1xuXHRcdFx0bGV0IHVsID0gZXZlbnQuY3VycmVudFRhcmdldC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV07XG5cdFx0XHR1bC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0fSxcblx0XHRvbkNsaWNrSGFuZGxlcihldmVudCwgaW5kZXgpIHtcblx0XHRcdC8vIOmakOiXj+WFtuS7llxuXHRcdFx0Ly8gbGV0IHBhdGggPSBldmVudC5wYXRoIHx8IChldmVudC5jb21wb3NlZFBhdGggJiYgZXZlbnQuY29tcG9zZWRQYXRoKCkpOyAvL+WFvOWuueeBq+eLkOWSjHNhZmFyaVxuXHRcdFx0Ly8gcGF0aFsxXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0XHRpZiAodGhpcy4kcmVmcy51bCkge1xuXHRcdFx0XHR0aGlzLiRyZWZzLnVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8g6YCJ5oupaXRlbVxuXHRcdFx0dGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuXHRcdFx0bGV0IGN1ckRhdGEgPSB0aGlzLmRhdGFMaXN0W2luZGV4XTtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT0gXCJsYW5nXCIpIHtcblx0XHRcdFx0Ly8g5aaC5p6c5piv6K+t6KiA6K6+572u77yM5YiZ6K6+572u6K+t6KiAXG5cdFx0XHRcdGxldCBsYW5nID0gY3VyRGF0YS52YWx1ZTtcblx0XHRcdFx0dGhpcy4kaTE4bi5sb2NhbGUgPSBsYW5nO1xuXHRcdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImxhbmdcIiwgbGFuZyk7XG5cdFx0XHRcdHRoaXMuc1RpdGxlID0gY3VyRGF0YS5uYW1lO1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImN1ckRhdGEudmFsdWUgPT0gPVwiLCBjdXJEYXRhLnZhbHVlKVxuXHRcdFx0XHRpZiAoY3VyRGF0YS52YWx1ZSA9PSBcImxvZ291dFwiKSB7XG5cdFx0XHRcdFx0Ly8gdGhpcy4kc3RvcmUuY29tbWl0KFwiU0VUX1VTRVJfSU5GT1wiLCBudWxsKTtcblx0XHRcdFx0XHR0aGlzLl9sb2dpbkhhbmRsZXIoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyDkuI3mmK/nmoTor53vvIzot7PovazpobXpnaJcblx0XHRcdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdFx0XHRwYXRoOiBjdXJEYXRhLnBhdGhcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIm5hbWU6XCIsIHRoaXMuZGF0YUxpc3RbaW5kZXhdLm5hbWUpO1xuXHRcdFx0Ly8gdGhpcy4kZW1pdChcImNoYW5nZVwiLCB7XG5cdFx0XHQvLyBcdGluZGV4OiBpbmRleCxcblx0XHRcdC8vIFx0dmFsdWU6IHRoaXMuZGF0YUxpc3RbaW5kZXhdXG5cdFx0XHQvLyB9KTtcblx0XHR9LFxuXHRcdF9sb2dpbkhhbmRsZXIoKSB7XG5cdFx0XHRodHRwUG9zdCh7IHVybDogYXBpLmxvZ291dCB9KS50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy4kc3RvcmUuY29tbWl0KFwiU0VUX1VTRVJfSU5GT1wiLCBudWxsKTtcblx0XHRcdFx0dGhpcy5fc2hvd0xvZ291dFRpcCgpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRfc2hvd0xvZ291dFRpcCgpIHtcblx0XHRcdC8vIOeZu+WHuuWQjueahOaPkOekulxuXHRcdFx0YWxlcnQoXCLnmbvlh7rmiJDlip9cIik7XG5cdFx0fVxuXHR9LFxuXHRjb21wdXRlZDoge1xuXHRcdGRwbExhYmxlKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGF0YUxpc3RbdGhpcy5hY3RpdmVJbmRleF1bdGhpcy5sYWJlbFByb3BlcnR5XTtcblx0XHR9XG5cdH0sXG5cdGNyZWF0ZWQoKSB7XG5cdFx0Ly8gdGhpcy5cblx0fSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBbkJBO0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWhFQTtBQWtFQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFFQTtBQWxIQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/footer/footer.js?vue&type=script&lang=js&":
/*!***************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/components/home/footer/footer.js?vue&type=script&lang=js& ***!
\***************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/api/api */ \"./src/api/api.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_api_api__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_fetch_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/api/fetch-api.js */ \"./src/api/fetch-api.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n data: function data() {\n return {\n key: 'value'\n };\n },\n components: {},\n methods: {\n toPage: function toPage(name) {\n document.documentElement.scrollTop = 0;\n document.body.scrollTop = 0;\n this.$router.push({\n name: name\n });\n },\n initData: function initData() {}\n },\n mounted: function mounted() {},\n created: function created() {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIuanM/MGNmNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpIGZyb20gJ0AvYXBpL2FwaSdcbmltcG9ydCB7XG5cdGh0dHBHZXQsXG5cdGh0dHBQb3N0XG59IGZyb20gJ0AvYXBpL2ZldGNoLWFwaS5qcydcblxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGRhdGEoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogJ3ZhbHVlJ1xuXHRcdH1cblx0fSxcblx0Y29tcG9uZW50czoge30sXG5cdG1ldGhvZHM6IHtcblx0XHR0b1BhZ2UobmFtZSkge1xuXHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG5cdFx0XHRkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IDA7XG5cdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdG5hbWU6IG5hbWVcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRpbml0RGF0YSgpIHt9XG5cdH0sXG5cdG1vdW50ZWQoKSB7fSxcblx0Y3JlYXRlZCgpIHt9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBbEJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/footer/footer.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/header/header.js?vue&type=script&lang=js&":
/*!***************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/components/home/header/header.js?vue&type=script&lang=js& ***!
\***************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es7.object.get-own-property-descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js\");\n/* harmony import */ var core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_object_get_own_property_descriptors__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es6.object.keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\");\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es6.function.name */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\");\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/defineProperty */ \"./node_modules/_@babel_runtime@7.6.3@@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _utils_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @utils/utils.js */ \"./src/utils/utils.js\");\n/* harmony import */ var _components_home_dropdown_dropdown_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @components/home/dropdown/dropdown.vue */ \"./src/components/home/dropdown/dropdown.vue\");\n\n\n\n\n\n\nvar _name$components$comp;\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_name$components$comp = {\n name: 'VHeader',\n components: {\n VDropdown: _components_home_dropdown_dropdown_vue__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n },\n computed: {\n i18n: function i18n() {\n return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};\n }\n },\n data: function data() {\n return {\n maxClientWidth: 950,\n navList: [],\n loginData: {},\n langData: {\n name: \"繁\",\n path: \"\",\n list: [{\n name: \"繁\",\n path: \"\",\n value: \"tc\"\n }, {\n name: \"简\",\n path: \"\",\n value: \"zh\"\n }, {\n name: \"EN\",\n path: \"\",\n value: \"en\"\n }]\n }\n };\n }\n}, Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"computed\", _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_5__[\"mapState\"])({\n isSmallScreen: function isSmallScreen(state) {\n return state.isSmallScreen;\n },\n userInfo: function userInfo(state) {\n return state.userInfo;\n }\n}))), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"methods\", {\n toIndex: function toIndex() {\n this.$router.push({\n path: \"/\"\n });\n },\n checkIsSmallScreen: function checkIsSmallScreen() {\n var self = this;\n\n if (document.body.clientWidth > self.maxClientWidth) {\n self.$store.commit('IS_SMALL_SCREEN', false);\n } else {\n self.$store.commit('IS_SMALL_SCREEN', true);\n }\n },\n initData: function initData() {\n var i18n = this.$i18n.messages[this.$i18n.locale] || {}; // this.loginData = i18n.nav.loginData;\n\n this._buildLoginMenu();\n\n this.navList = i18n.nav.navList;\n var curLang = Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_6__[\"getObjByListKeyValue\"])(this.$i18n.locale, \"value\", this.langData.list);\n this.langData.name = curLang.name;\n },\n _buildLoginMenu: function _buildLoginMenu() {\n // 构建登录页\n var i18n = this.$i18n.messages[this.$i18n.locale] || {};\n var menuData = JSON.parse(JSON.stringify(i18n.nav.loginData));\n var list = [];\n\n if (this.userInfo && this.userInfo.name) {\n menuData.name = this.userInfo.name;\n menuData.list.forEach(function (element) {\n if (element.type == \"auth\") {\n list.push(element);\n }\n });\n } else {\n menuData.list.forEach(function (element) {\n if (element.type == \"noAuth\") {\n list.push(element);\n }\n });\n }\n\n menuData.list = list;\n this.$set(this, 'loginData', menuData);\n }\n}), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"mounted\", function mounted() {\n var self = this;\n self.checkIsSmallScreen();\n\n document.body.onresize = function () {\n self.checkIsSmallScreen();\n };\n}), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"watch\", {\n userInfo: function userInfo(val) {\n this._buildLoginMenu();\n }\n}), Object(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_name$components$comp, \"created\", function created() {\n this.initData();\n}), _name$components$comp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIuanM/M2FmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRtYXBTdGF0ZVxufSBmcm9tICd2dWV4J1xuXG5pbXBvcnQge1xuXHRnZXRPYmpCeUxpc3RLZXlWYWx1ZVxufSBmcm9tICdAdXRpbHMvdXRpbHMuanMnXG5pbXBvcnQgVkRyb3Bkb3duIGZyb20gJ0Bjb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cdG5hbWU6ICdWSGVhZGVyJyxcblx0Y29tcG9uZW50czoge1xuXHRcdFZEcm9wZG93blxuXHR9LFxuXHRjb21wdXRlZDoge1xuXHRcdGkxOG4oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kaTE4bi5tZXNzYWdlcyAmJiB0aGlzLiRpMThuLmxvY2FsZSA/IHRoaXMuJGkxOG4ubWVzc2FnZXNbdGhpcy4kaTE4bi5sb2NhbGVdIDoge307XG5cdFx0fVxuXHR9LFxuXHRkYXRhKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtYXhDbGllbnRXaWR0aDogOTUwLFxuXHRcdFx0bmF2TGlzdDogW10sXG5cdFx0XHRsb2dpbkRhdGE6IHt9LFxuXHRcdFx0bGFuZ0RhdGE6IHtcblx0XHRcdFx0bmFtZTogXCLnuYFcIixcblx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0bGlzdDogW3tcblx0XHRcdFx0XHRuYW1lOiBcIue5gVwiLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWU6IFwidGNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCLnroBcIixcblx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcInpoXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiRU5cIixcblx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcImVuXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0Y29tcHV0ZWQ6IHtcblx0XHQuLi5tYXBTdGF0ZSh7XG5cdFx0XHRpc1NtYWxsU2NyZWVuOiBzdGF0ZSA9PiBzdGF0ZS5pc1NtYWxsU2NyZWVuLFxuXHRcdFx0dXNlckluZm86IHN0YXRlID0+IHN0YXRlLnVzZXJJbmZvXG5cdFx0fSlcblx0fSxcblx0bWV0aG9kczoge1xuXHRcdHRvSW5kZXgoKSB7XG5cdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdHBhdGg6IFwiL1wiXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0Y2hlY2tJc1NtYWxsU2NyZWVuKCkge1xuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCA+IHNlbGYubWF4Q2xpZW50V2lkdGgpIHtcblx0XHRcdFx0c2VsZi4kc3RvcmUuY29tbWl0KCdJU19TTUFMTF9TQ1JFRU4nLCBmYWxzZSlcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuJHN0b3JlLmNvbW1pdCgnSVNfU01BTExfU0NSRUVOJywgdHJ1ZSlcblx0XHRcdH1cblx0XHR9LFxuXHRcdGluaXREYXRhKCkge1xuXHRcdFx0bGV0IGkxOG4gPSB0aGlzLiRpMThuLm1lc3NhZ2VzW3RoaXMuJGkxOG4ubG9jYWxlXSB8fCB7fTtcblx0XHRcdC8vIHRoaXMubG9naW5EYXRhID0gaTE4bi5uYXYubG9naW5EYXRhO1xuXHRcdFx0dGhpcy5fYnVpbGRMb2dpbk1lbnUoKTtcblx0XHRcdHRoaXMubmF2TGlzdCA9IGkxOG4ubmF2Lm5hdkxpc3Q7XG5cdFx0XHRsZXQgY3VyTGFuZyA9IGdldE9iakJ5TGlzdEtleVZhbHVlKHRoaXMuJGkxOG4ubG9jYWxlLCBcInZhbHVlXCIsIHRoaXMubGFuZ0RhdGEubGlzdClcblx0XHRcdHRoaXMubGFuZ0RhdGEubmFtZSA9IGN1ckxhbmcubmFtZTtcblx0XHR9LFxuXHRcdF9idWlsZExvZ2luTWVudSgpIHtcblx0XHRcdC8vIOaehOW7uueZu+W9lemhtVxuXHRcdFx0bGV0IGkxOG4gPSB0aGlzLiRpMThuLm1lc3NhZ2VzW3RoaXMuJGkxOG4ubG9jYWxlXSB8fCB7fTtcblx0XHRcdGxldCBtZW51RGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaTE4bi5uYXYubG9naW5EYXRhKSk7XG5cdFx0XHRsZXQgbGlzdCA9IFtdO1xuXHRcdFx0aWYgKHRoaXMudXNlckluZm8gJiYgdGhpcy51c2VySW5mby5uYW1lKSB7XG5cdFx0XHRcdG1lbnVEYXRhLm5hbWUgPSB0aGlzLnVzZXJJbmZvLm5hbWU7XG5cdFx0XHRcdG1lbnVEYXRhLmxpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudC50eXBlID09IFwiYXV0aFwiKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lbnVEYXRhLmxpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudC50eXBlID09IFwibm9BdXRoXCIpIHtcblx0XHRcdFx0XHRcdGxpc3QucHVzaChlbGVtZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0bWVudURhdGEubGlzdCA9IGxpc3Q7XG5cdFx0XHR0aGlzLiRzZXQodGhpcywgJ2xvZ2luRGF0YScsIG1lbnVEYXRhKTtcblx0XHR9XG5cdH0sXG5cdG1vdW50ZWQoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c2VsZi5jaGVja0lzU21hbGxTY3JlZW4oKTtcblx0XHRkb2N1bWVudC5ib2R5Lm9ucmVzaXplID0gKCkgPT4ge1xuXHRcdFx0c2VsZi5jaGVja0lzU21hbGxTY3JlZW4oKTtcblx0XHR9XG5cdH0sXG5cdHdhdGNoOiB7XG5cdFx0dXNlckluZm8odmFsKSB7XG5cdFx0XHR0aGlzLl9idWlsZExvZ2luTWVudSgpO1xuXHRcdH1cblx0fSxcblx0Y3JlYXRlZCgpIHtcblx0XHR0aGlzLmluaXREYXRhKCk7XG5cdH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUlBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQWJBO0FBSkE7QUF5QkE7QUFwQ0E7QUF1Q0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBM0NBO0FBOENBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/header/header.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/pages/index/index.js?vue&type=script&lang=js&":
/*!******************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!./node_modules/_babel-loader@8.0.6@babel-loader/lib!./node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./src/pages/index?vue&type=script&lang=js& ***!
\******************************************************************************************************************************************************************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/api/api */ \"./src/api/api.js\");\n/* harmony import */ var _api_api__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_api_api__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _api_fetch_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/api/fetch-api.js */ \"./src/api/fetch-api.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n data: function data() {\n return {\n key: 'value',\n swiperOption: {\n navigation: {\n nextEl: '.swiper-button-next',\n prevEl: '.swiper-button-prev'\n },\n pagination: {\n el: '.swiper-pagination' // renderBullet(index, className) {\n // \treturn `<span class=\"${className} swiper-pagination-bullet-custom\">${index + 1}</span>`\n // }\n\n },\n autoplay: {\n delay: 5000,\n stopOnLastSlide: false,\n disableOnInteraction: false\n },\n speed: 1000\n }\n };\n },\n components: {},\n computed: {\n locale: function locale() {\n return this.$i18n.locale || 'tc';\n },\n i18n: function i18n() {\n return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};\n }\n },\n methods: {\n /**\n * 推荐产品\n */\n onRecommendHandler: function onRecommendHandler(val) {\n if (val == 1) {\n this.$router.push({\n path: \"/product\"\n });\n }\n\n if (val == 2) {\n this.$router.push({\n path: \"/custom/service?q=m6\"\n });\n }\n\n if (val == 3) {\n this.$router.push({\n path: \"/custom/product\"\n });\n }\n },\n\n /**\n * 推荐产品\n */\n onMoreNewsHandler: function onMoreNewsHandler() {\n this.$router.push({\n path: \"/news/list\"\n });\n },\n\n /**\n * 去新闻详情页面\n * 需要带id\n */\n toNewsDetail: function toNewsDetail() {\n this.$router.push({\n path: '/news/detail'\n });\n },\n toProfile: function toProfile() {\n this.$router.push({\n path: '/profile'\n });\n },\n initData: function initData() {}\n },\n mounted: function mounted() {},\n created: function created() {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPyEuL3NyYy9wYWdlcy9pbmRleC9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXguanM/NDRlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBpIGZyb20gJ0AvYXBpL2FwaSdcbmltcG9ydCB7XG5cdGh0dHBHZXQsXG5cdGh0dHBQb3N0XG59IGZyb20gJ0AvYXBpL2ZldGNoLWFwaS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuXHRkYXRhKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6ICd2YWx1ZScsXG5cdFx0XHRzd2lwZXJPcHRpb246IHtcblx0XHRcdFx0bmF2aWdhdGlvbjoge1xuXHRcdFx0XHRcdG5leHRFbDogJy5zd2lwZXItYnV0dG9uLW5leHQnLFxuXHRcdFx0XHRcdHByZXZFbDogJy5zd2lwZXItYnV0dG9uLXByZXYnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhZ2luYXRpb246IHtcblx0XHRcdFx0XHRlbDogJy5zd2lwZXItcGFnaW5hdGlvbicsXG5cdFx0XHRcdFx0Ly8gcmVuZGVyQnVsbGV0KGluZGV4LCBjbGFzc05hbWUpIHtcblx0XHRcdFx0XHQvLyBcdHJldHVybiBgPHNwYW4gY2xhc3M9XCIke2NsYXNzTmFtZX0gc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWN1c3RvbVwiPiR7aW5kZXggKyAxfTwvc3Bhbj5gXG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhdXRvcGxheToge1xuXHRcdFx0XHRcdGRlbGF5OiA1MDAwLFxuXHRcdFx0XHRcdHN0b3BPbkxhc3RTbGlkZTogZmFsc2UsXG5cdFx0XHRcdFx0ZGlzYWJsZU9uSW50ZXJhY3Rpb246IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNwZWVkOiAxMDAwLFxuXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRjb21wb25lbnRzOiB7fSxcblx0Y29tcHV0ZWQ6IHtcblx0XHRsb2NhbGUoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kaTE4bi5sb2NhbGUgfHwgJ3RjJztcblx0XHR9LFxuXHRcdGkxOG4oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy4kaTE4bi5tZXNzYWdlcyAmJiB0aGlzLiRpMThuLmxvY2FsZSA/IHRoaXMuJGkxOG4ubWVzc2FnZXNbdGhpcy4kaTE4bi5sb2NhbGVdIDoge307XG5cdFx0fVxuXHR9LFxuXHRtZXRob2RzOiB7XG5cdFx0LyoqXG5cdFx0ICog5o6o6I2Q5Lqn5ZOBXG5cdFx0ICovXG5cdFx0b25SZWNvbW1lbmRIYW5kbGVyKHZhbCkge1xuXHRcdFx0aWYgKHZhbCA9PSAxKSB7XG5cdFx0XHRcdHRoaXMuJHJvdXRlci5wdXNoKHtcblx0XHRcdFx0XHRwYXRoOiBcIi9wcm9kdWN0XCJcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdGlmICh2YWwgPT0gMikge1xuXHRcdFx0XHR0aGlzLiRyb3V0ZXIucHVzaCh7XG5cdFx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNlwiXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsID09IDMpIHtcblx0XHRcdFx0dGhpcy4kcm91dGVyLnB1c2goe1xuXHRcdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9wcm9kdWN0XCJcblx0XHRcdFx0fSlcblx0XHRcdH1cblxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiDmjqjojZDkuqflk4Fcblx0XHQgKi9cblx0XHRvbk1vcmVOZXdzSGFuZGxlcigpIHtcblx0XHRcdHRoaXMuJHJvdXRlci5wdXNoKHtcblx0XHRcdFx0cGF0aDogXCIvbmV3cy9saXN0XCJcblx0XHRcdH0pXG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIOWOu+aWsOmXu+ivpuaDhemhtemdolxuXHRcdCAqIOmcgOimgeW4pmlkXG5cdFx0ICovXG5cdFx0dG9OZXdzRGV0YWlsKCkge1xuXHRcdFx0dGhpcy4kcm91dGVyLnB1c2goe1xuXHRcdFx0XHRwYXRoOiAnL25ld3MvZGV0YWlsJ1xuXHRcdFx0fSlcblx0XHR9LFxuXHRcdHRvUHJvZmlsZSgpe1xuXHRcdFx0dGhpcy4kcm91dGVyLnB1c2goe1xuXHRcdFx0XHRwYXRoOiAnL3Byb2ZpbGUnXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0aW5pdERhdGEoKSB7fVxuXHR9LFxuXHRtb3VudGVkKCkge30sXG5cdGNyZWF0ZWQoKSB7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUxBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBaEJBO0FBRkE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQTlDQTtBQWdEQTtBQUNBO0FBbkZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/pages/index/index.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=template&id=7ba5bd90&":
/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=template&id=7ba5bd90& ***!
\***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { attrs: { id: \"app\" } },\n [\n _c(\"v-header\"),\n _c(\n \"main\",\n { ref: \"container\", staticClass: \"main-container\" },\n [_c(\"router-view\")],\n 1\n ),\n _c(\"v-footer\")\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9BcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiYTViZDkwJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9BcHAudnVlP2U2ZjciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgYXR0cnM6IHsgaWQ6IFwiYXBwXCIgfSB9LFxuICAgIFtcbiAgICAgIF9jKFwidi1oZWFkZXJcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJtYWluXCIsXG4gICAgICAgIHsgcmVmOiBcImNvbnRhaW5lclwiLCBzdGF0aWNDbGFzczogXCJtYWluLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFtfYyhcInJvdXRlci12aWV3XCIpXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF9jKFwidi1mb290ZXJcIilcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=template&id=7ba5bd90&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&":
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& ***!
\*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\n \"div\",\n {\n staticClass: \"drop-list\",\n on: {\n mouseover: function($event) {\n return _vm.onOverHandler($event)\n },\n mouseout: function($event) {\n return _vm.onOutHandler($event)\n }\n }\n },\n [\n _vm.type == \"login\"\n ? [\n _c(\"div\", { staticClass: \"user\" }, [\n _c(\"img\", {\n staticClass: \"icon-img\",\n attrs: { src: __webpack_require__(/*! @/assets/images/home/icon-user.png */ \"./src/assets/images/home/icon-user.png\") }\n }),\n _c(\"span\", [_vm._v(_vm._s(_vm.dataObj.name))])\n ])\n ]\n : [\n _c(\n \"span\",\n {\n on: {\n click: function($event) {\n return _vm.onNavHandler()\n }\n }\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\" +\n _vm._s(\n _vm.type == \"lang\" ? _vm.sTitle : _vm.dataObj.name\n ) +\n \"\\n\\t\\t\\t\"\n )\n ]\n )\n ],\n _c(\"div\", { staticClass: \"list\" }, [\n _c(\"div\", { staticClass: \"space\" }),\n _c(\n \"ul\",\n { directives: [{ name: \"dpl\", rawName: \"v-dpl\" }], ref: \"ul\" },\n _vm._l(_vm.dataList, function(item, index) {\n return _c(\n \"li\",\n {\n key: index,\n on: {\n mousedown: function($event) {\n return _vm.onClickHandler($event, index)\n }\n }\n },\n [_vm._v(_vm._s(item[_vm.labelProperty]))]\n )\n }),\n 0\n )\n ])\n ],\n 2\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNiNGYzNWFmJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlPzc0ODMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJkcm9wLWxpc3RcIixcbiAgICAgICAgb246IHtcbiAgICAgICAgICBtb3VzZW92ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5vbk92ZXJIYW5kbGVyKCRldmVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vdXNlb3V0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0ub25PdXRIYW5kbGVyKCRldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF92bS50eXBlID09IFwibG9naW5cIlxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInVzZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiaWNvbi1pbWdcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogcmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9ob21lL2ljb24tdXNlci5wbmdcIikgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uZGF0YU9iai5uYW1lKSldKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbk5hdkhhbmRsZXIoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuXFx0XFx0XFx0XFx0XCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS50eXBlID09IFwibGFuZ1wiID8gX3ZtLnNUaXRsZSA6IF92bS5kYXRhT2JqLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcblxcdFxcdFxcdFwiXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImxpc3RcIiB9LCBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzcGFjZVwiIH0pLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBkaXJlY3RpdmVzOiBbeyBuYW1lOiBcImRwbFwiLCByYXdOYW1lOiBcInYtZHBsXCIgfV0sIHJlZjogXCJ1bFwiIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLmRhdGFMaXN0LCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25DbGlja0hhbmRsZXIoJGV2ZW50LCBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbVtfdm0ubGFiZWxQcm9wZXJ0eV0pKV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgXSxcbiAgICAgIDJcbiAgICApXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true& ***!
\*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"footer\", { staticClass: \"v-footer \" }, [\n _c(\"div\", { staticClass: \"content footer-containter \" }, [\n _c(\"div\", { staticClass: \"cont\" }, [\n _vm._m(0),\n _c(\"div\", { staticClass: \"line\" }),\n _c(\"div\", { staticClass: \"info\" }, [\n _c(\"div\", { staticClass: \"hotline\" }, [\n _c(\"div\", { staticClass: \"contact\" }, [\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.hkPhone\")))\n ]),\n _c(\"div\", { staticClass: \"phone\" }, [_vm._v(\"(852)2983 8866\")])\n ]),\n _c(\"div\", { staticClass: \"contact\" }, [\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.cnPhone\")))\n ]),\n _c(\"div\", { staticClass: \"phone\" }, [_vm._v(\"(86)40078 95511\")])\n ])\n ]),\n _c(\"div\", { staticClass: \"nav\" }, [\n _c(\"div\", { staticClass: \"nav-v\" }, [\n _c(\n \"div\",\n {\n staticClass: \"n-item\",\n on: {\n click: function($event) {\n return _vm.toPage(\"profile\")\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"footer.aboutUs\")))]\n ),\n _c(\n \"div\",\n {\n staticClass: \"n-item\",\n on: {\n click: function($event) {\n return _vm.toPage(\"profile\")\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"footer.companyIntroduction\")))]\n ),\n _c(\n \"div\",\n {\n staticClass: \"n-item\",\n on: {\n click: function($event) {\n return _vm.toPage(\"newsList\")\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"footer.news\")))]\n ),\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.joinUs\")))\n ])\n ]),\n _c(\"div\", { staticClass: \"nav-v\" }, [\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.helpCenter\")))\n ]),\n _c(\n \"div\",\n {\n staticClass: \"n-item\",\n on: {\n click: function($event) {\n return _vm.toPage(\"privacy\")\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"footer.privacy\")))]\n ),\n _c(\n \"div\",\n {\n staticClass: \"n-item\",\n on: {\n click: function($event) {\n return _vm.toPage(\"terms\")\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"footer.terms\")))]\n ),\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.map\")))\n ])\n ]),\n _c(\"div\", { staticClass: \"nav-v\" }, [\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.contactUs\")))\n ]),\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.contactInformation\")))\n ]),\n _c(\"div\", { staticClass: \"n-item\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.service\")))\n ])\n ])\n ]),\n _c(\"div\", { staticClass: \"public\" }, [\n _c(\"div\", { staticClass: \"tit\" }, [\n _vm._v(_vm._s(_vm.$t(\"footer.qrcode\")))\n ]),\n _c(\"img\", {\n staticClass: \"qrcode\",\n attrs: {\n src: __webpack_require__(/*! @/assets/images/home/qrcode-focus.png */ \"./src/assets/images/home/qrcode-focus.png\"),\n alt: \"\"\n }\n })\n ])\n ]),\n _c(\"div\", { staticClass: \"line\" }),\n _c(\"div\", { staticClass: \"copyright\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\\t\" + _vm._s(_vm.$t(\"footer.copyright\")) + \"\\n\\t\\t\\t\\t\"\n ),\n _c(\"br\"),\n _vm._v(\n \"Copyright © PING AN INSURANCE (GROUP) COMPANY OF CHINA ,LTD. All Rights Reserved\\n\\t\\t\\t\"\n )\n ])\n ])\n ])\n ])\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"logo-wrap\" }, [\n _c(\"img\", {\n staticClass: \"logo-img\",\n attrs: {\n src: __webpack_require__(/*! @/assets/images/home/footer-logo.png */ \"./src/assets/images/home/footer-logo.png\"),\n alt: \"中国平安人寿保险\"\n }\n })\n ])\n }\n]\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjY3OGZjMjImc2NvcGVkPXRydWUmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZT85MzMzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJmb290ZXJcIiwgeyBzdGF0aWNDbGFzczogXCJ2LWZvb3RlciBcIiB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250ZW50IGZvb3Rlci1jb250YWludGVyIFwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udFwiIH0sIFtcbiAgICAgICAgX3ZtLl9tKDApLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImxpbmVcIiB9KSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpbmZvXCIgfSwgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaG90bGluZVwiIH0sIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGFjdFwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuaGtQaG9uZVwiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBob25lXCIgfSwgW192bS5fdihcIig4NTIpMjk4MyA4ODY2XCIpXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250YWN0XCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImZvb3Rlci5jblBob25lXCIpKSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicGhvbmVcIiB9LCBbX3ZtLl92KFwiKDg2KTQwMDc4IDk1NTExXCIpXSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuYXZcIiB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi12XCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwicHJvZmlsZVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuYWJvdXRVc1wiKSkpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwicHJvZmlsZVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuY29tcGFueUludHJvZHVjdGlvblwiKSkpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwibmV3c0xpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLm5ld3NcIikpKV1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuam9pblVzXCIpKSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtdlwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuaGVscENlbnRlclwiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwicHJpdmFjeVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIucHJpdmFjeVwiKSkpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9QYWdlKFwidGVybXNcIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLnRlcm1zXCIpKSldXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibi1pdGVtXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLm1hcFwiKSkpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2LXZcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibi1pdGVtXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLmNvbnRhY3RVc1wiKSkpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm4taXRlbVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImZvb3Rlci5jb250YWN0SW5mb3JtYXRpb25cIikpKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmb290ZXIuc2VydmljZVwiKSkpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHVibGljXCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0aXRcIiB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLnFyY29kZVwiKSkpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicXJjb2RlXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2hvbWUvcXJjb2RlLWZvY3VzLnBuZ1wiKSxcbiAgICAgICAgICAgICAgICBhbHQ6IFwiXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICBdKSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJsaW5lXCIgfSksXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29weXJpZ2h0XCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgIFwiXFxuXFx0XFx0XFx0XFx0XCIgKyBfdm0uX3MoX3ZtLiR0KFwiZm9vdGVyLmNvcHlyaWdodFwiKSkgKyBcIlxcblxcdFxcdFxcdFxcdFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcImJyXCIpLFxuICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgIFwiQ29weXJpZ2h0IMKpIFBJTkcgQU4gSU5TVVJBTkNFIChHUk9VUCkgQ09NUEFOWSBPRiBDSElOQSDvvIxMVEQuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcXG5cXHRcXHRcXHRcIlxuICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibG9nby13cmFwXCIgfSwgW1xuICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJsb2dvLWltZ1wiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHNyYzogcmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9ob21lL2Zvb3Rlci1sb2dvLnBuZ1wiKSxcbiAgICAgICAgICBhbHQ6IFwi5Lit5Zu95bmz5a6J5Lq65a+/5L+d6ZmpXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdKVxuICB9XG5dXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true& ***!
\*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"header\", { staticClass: \"v-header\" }, [\n _c(\"div\", { staticClass: \"header-container\" }, [\n _c(\"img\", {\n staticClass: \"logo-img\",\n attrs: {\n src: __webpack_require__(/*! @/assets/images/home/header-logo.png */ \"./src/assets/images/home/header-logo.png\"),\n alt: \"中国平安人寿保险\"\n },\n on: { click: _vm.toIndex }\n }),\n _c(\"div\", { staticClass: \"main-nav\" }, [\n _c(\"div\", { staticClass: \"nav-list\" }, [\n _c(\n \"div\",\n { staticClass: \"main-nav-list\" },\n _vm._l(_vm.navList, function(item) {\n return _c(\"v-dropdown\", {\n key: item.id,\n attrs: { \"data-obj\": item, \"data-list\": item.list }\n })\n }),\n 1\n ),\n _c(\"div\", { staticClass: \"nav-item search\" }),\n _c(\"div\", { staticClass: \"nav-item submit\" }),\n _c(\n \"div\",\n { staticClass: \"nav-item auth\" },\n [\n _c(\"v-dropdown\", {\n staticClass: \"lang\",\n attrs: {\n type: \"login\",\n \"data-obj\": _vm.loginData,\n \"data-list\": _vm.loginData.list\n }\n }),\n _c(\"v-dropdown\", {\n staticClass: \"lang\",\n attrs: {\n type: \"lang\",\n \"data-obj\": _vm.langData,\n \"data-list\": _vm.langData.list\n }\n })\n ],\n 1\n )\n ])\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmZiYThkYWYmc2NvcGVkPXRydWUmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLnZ1ZT8wZDUzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJoZWFkZXJcIiwgeyBzdGF0aWNDbGFzczogXCJ2LWhlYWRlclwiIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImhlYWRlci1jb250YWluZXJcIiB9LCBbXG4gICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImxvZ28taW1nXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2hvbWUvaGVhZGVyLWxvZ28ucG5nXCIpLFxuICAgICAgICAgIGFsdDogXCLkuK3lm73lubPlronkurrlr7/kv53pmalcIlxuICAgICAgICB9LFxuICAgICAgICBvbjogeyBjbGljazogX3ZtLnRvSW5kZXggfVxuICAgICAgfSksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm1haW4tbmF2XCIgfSwgW1xuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1saXN0XCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibWFpbi1uYXYtbGlzdFwiIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLm5hdkxpc3QsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFwidi1kcm9wZG93blwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwiZGF0YS1vYmpcIjogaXRlbSwgXCJkYXRhLWxpc3RcIjogaXRlbS5saXN0IH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtaXRlbSBzZWFyY2hcIiB9KSxcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1pdGVtIHN1Ym1pdFwiIH0pLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibmF2LWl0ZW0gYXV0aFwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwidi1kcm9wZG93blwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibGFuZ1wiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImxvZ2luXCIsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtb2JqXCI6IF92bS5sb2dpbkRhdGEsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtbGlzdFwiOiBfdm0ubG9naW5EYXRhLmxpc3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfYyhcInYtZHJvcGRvd25cIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImxhbmdcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJsYW5nXCIsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtb2JqXCI6IF92bS5sYW5nRGF0YSxcbiAgICAgICAgICAgICAgICAgIFwiZGF0YS1saXN0XCI6IF92bS5sYW5nRGF0YS5saXN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&":
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"4cf02314-vue-loader-template"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true& ***!
\*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", [\n _c(\"div\", { staticClass: \"content\" }, [\n _c(\"div\", { staticClass: \"banner-contaner\" }, [\n _c(\n \"div\",\n { staticClass: \"banner\" },\n [\n _c(\n \"swiper\",\n { attrs: { options: _vm.swiperOption } },\n [\n _c(\"swiper-slide\", [\n _c(\"img\", {\n staticClass: \"banner-img\",\n attrs: { src: __webpack_require__(/*! @/assets/images/index/banner.png */ \"./src/assets/images/index/banner.png\") }\n })\n ]),\n _c(\"swiper-slide\", [\n _c(\"img\", {\n staticClass: \"banner-img\",\n attrs: { src: __webpack_require__(/*! @/assets/images/index/banner.png */ \"./src/assets/images/index/banner.png\") }\n })\n ]),\n _c(\"div\", {\n staticClass: \"swiper-button-prev\",\n attrs: { slot: \"button-prev\" },\n slot: \"button-prev\"\n }),\n _c(\"div\", {\n staticClass: \"swiper-button-next\",\n attrs: { slot: \"button-next\" },\n slot: \"button-next\"\n }),\n _c(\"div\", {\n staticClass: \"swiper-pagination\",\n attrs: { slot: \"pagination\" },\n slot: \"pagination\"\n })\n ],\n 1\n )\n ],\n 1\n )\n ]),\n _c(\"div\", { staticClass: \"box recommend\" }, [\n _c(\"div\", { staticClass: \"recommend-item\" }, [\n _c(\n \"div\",\n {\n staticClass: \"btn pointer\",\n on: {\n click: function($event) {\n return _vm.onRecommendHandler(1)\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"index.recommend.item1.btn\")))]\n ),\n _c(\"div\", { staticClass: \"tt t1\" }, [\n _vm._v(_vm._s(_vm.$t(\"index.recommend.item1.t1\")))\n ]),\n _c(\"img\", {\n attrs: { src: __webpack_require__(/*! @/assets/images/index/recommend-1.png */ \"./src/assets/images/index/recommend-1.png\") }\n })\n ]),\n _c(\"div\", { staticClass: \"recommend-item\" }, [\n _c(\n \"div\",\n {\n staticClass: \"btn pointer\",\n on: {\n click: function($event) {\n return _vm.onRecommendHandler(2)\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"index.recommend.item2.btn\")))]\n ),\n _c(\"div\", { staticClass: \"tt t1\" }, [\n _vm._v(_vm._s(_vm.$t(\"index.recommend.item2.t1\")))\n ]),\n _c(\"img\", {\n attrs: { src: __webpack_require__(/*! @/assets/images/index/recommend-2.png */ \"./src/assets/images/index/recommend-2.png\") }\n })\n ]),\n _c(\"div\", { staticClass: \"recommend-item\" }, [\n _c(\n \"div\",\n {\n staticClass: \"btn pointer\",\n on: {\n click: function($event) {\n return _vm.onRecommendHandler(3)\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"index.recommend.item3.btn\")))]\n ),\n _c(\"div\", { staticClass: \"tt t2\" }, [\n _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t1\")))\n ]),\n _c(\"div\", { staticClass: \"tt t1\" }, [\n _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t2\")) + \"\\n\\t\\t\\t\\t\\t\"),\n _c(\"span\", { staticClass: \"cOrange\" }, [\n _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t3\")))\n ]),\n _vm._v(_vm._s(_vm.$t(\"index.recommend.item3.t4\")))\n ]),\n _c(\"img\", {\n attrs: { src: __webpack_require__(/*! @/assets/images/index/recommend-3.png */ \"./src/assets/images/index/recommend-3.png\") }\n })\n ])\n ]),\n _c(\"div\", { staticClass: \"box more\" }, [\n _c(\"div\", { staticClass: \"cont\" }, [\n _c(\"div\", {\n staticClass: \"btn pointer\",\n on: {\n click: function($event) {\n return _vm.toProfile()\n }\n }\n }),\n _c(\"img\", {\n attrs: {\n src: __webpack_require__(\"./src/assets/images/index sync recursive ^\\\\.\\\\/more\\\\-1\\\\-.*\\\\.png$\")(\"./more-1-\" +\n _vm.locale +\n \".png\")\n }\n })\n ])\n ]),\n _c(\"div\", { staticClass: \"box news\" }, [\n _c(\"div\", { staticClass: \"linear\" }),\n _c(\"div\", { staticClass: \"tit\" }, [\n _vm._v(_vm._s(_vm.$t(\"index.news\")))\n ]),\n _c(\"div\", { staticClass: \"under-line\" }),\n _c(\n \"div\",\n { staticClass: \"news-wrap\" },\n [\n _vm.locale == \"zh\"\n ? [\n _c(\n \"div\",\n {\n staticClass: \"more pointer\",\n on: { click: _vm.onMoreNewsHandler }\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\\t\\t\" +\n _vm._s(_vm.$t(\"index.newMore\")) +\n \" >\\n\\t\\t\\t\\t\\t\"\n )\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"平安人寿2019年2季度保险消费报告出炉!\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"公益献礼华诞年,创新开拓扶贫路\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"平安920要放大招啦!内含超强攻略!\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"突发!平安人寿迅速应对广东阳江大巴交通事故\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"伴成长、助扶贫,平安人寿客服节给家庭“AI”的力量\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n )\n ]\n : [\n _c(\n \"div\",\n {\n staticClass: \"more pointer\",\n on: { click: _vm.onMoreNewsHandler }\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\\t\\t\" +\n _vm._s(_vm.$t(\"index.newMore\")) +\n \" >\\n\\t\\t\\t\\t\\t\"\n )\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"平安人壽2019年2季度保險消費報告出爐!\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"公益獻禮華誕年,創新開拓扶貧路\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"平安920要放大招啦!內含超強攻略!\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"突發!平安人壽迅速應對廣東陽江大巴交通事故\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"news-item\",\n on: {\n click: function($event) {\n return _vm.toNewsDetail()\n }\n }\n },\n [\n _c(\"div\", { staticClass: \"news-item-tit\" }, [\n _vm._v(\"伴成長、助扶貧,平安人壽客服節給家庭“AI”的力量\")\n ]),\n _c(\"div\", { staticClass: \"news-item-date\" }, [\n _vm._v(\"2019-09-27\")\n ])\n ]\n )\n ]\n ],\n 2\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/e1wiY2FjaGVEaXJlY3RvcnlcIjpcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclwiLFwiY2FjaGVJZGVudGlmaWVyXCI6XCI0Y2YwMjMxNC12dWUtbG9hZGVyLXRlbXBsYXRlXCJ9IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPyEuL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPyEuL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWJhZGM4MDEmc2NvcGVkPXRydWUmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3BhZ2VzL2luZGV4L2luZGV4LnZ1ZT9jN2RlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY29udGVudFwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiYmFubmVyLWNvbnRhbmVyXCIgfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiYmFubmVyXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJzd2lwZXJcIixcbiAgICAgICAgICAgICAgeyBhdHRyczogeyBvcHRpb25zOiBfdm0uc3dpcGVyT3B0aW9uIH0gfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3dpcGVyLXNsaWRlXCIsIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFubmVyLWltZ1wiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvaW5kZXgvYmFubmVyLnBuZ1wiKSB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF9jKFwic3dpcGVyLXNsaWRlXCIsIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYmFubmVyLWltZ1wiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvaW5kZXgvYmFubmVyLnBuZ1wiKSB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN3aXBlci1idXR0b24tcHJldlwiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2xvdDogXCJidXR0b24tcHJldlwiIH0sXG4gICAgICAgICAgICAgICAgICBzbG90OiBcImJ1dHRvbi1wcmV2XCJcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzd2lwZXItYnV0dG9uLW5leHRcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNsb3Q6IFwiYnV0dG9uLW5leHRcIiB9LFxuICAgICAgICAgICAgICAgICAgc2xvdDogXCJidXR0b24tbmV4dFwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3dpcGVyLXBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNsb3Q6IFwicGFnaW5hdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgICBzbG90OiBcInBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImJveCByZWNvbW1lbmRcIiB9LCBbXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicmVjb21tZW5kLWl0ZW1cIiB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gcG9pbnRlclwiLFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25SZWNvbW1lbmRIYW5kbGVyKDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLiR0KFwiaW5kZXgucmVjb21tZW5kLml0ZW0xLmJ0blwiKSkpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0dCB0MVwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiaW5kZXgucmVjb21tZW5kLml0ZW0xLnQxXCIpKSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBzcmM6IHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvaW5kZXgvcmVjb21tZW5kLTEucG5nXCIpIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdKSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyZWNvbW1lbmQtaXRlbVwiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBwb2ludGVyXCIsXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vblJlY29tbWVuZEhhbmRsZXIoMilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5yZWNvbW1lbmQuaXRlbTIuYnRuXCIpKSldXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInR0IHQxXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5yZWNvbW1lbmQuaXRlbTIudDFcIikpKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogcmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMi5wbmdcIikgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJlY29tbWVuZC1pdGVtXCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIHBvaW50ZXJcIixcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uUmVjb21tZW5kSGFuZGxlcigzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS4kdChcImluZGV4LnJlY29tbWVuZC5pdGVtMy5idG5cIikpKV1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidHQgdDJcIiB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImluZGV4LnJlY29tbWVuZC5pdGVtMy50MVwiKSkpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0dCB0MVwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLiR0KFwiaW5kZXgucmVjb21tZW5kLml0ZW0zLnQyXCIpKSArIFwiXFxuXFx0XFx0XFx0XFx0XFx0XCIpLFxuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY09yYW5nZVwiIH0sIFtcbiAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5yZWNvbW1lbmQuaXRlbTMudDNcIikpKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS4kdChcImluZGV4LnJlY29tbWVuZC5pdGVtMy50NFwiKSkpXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2luZGV4L3JlY29tbWVuZC0zLnBuZ1wiKSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJib3ggbW9yZVwiIH0sIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb250XCIgfSwgW1xuICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBwb2ludGVyXCIsXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS50b1Byb2ZpbGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgc3JjOiByZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2luZGV4L21vcmUtMS1cIiArXG4gICAgICAgICAgICAgICAgX3ZtLmxvY2FsZSArXG4gICAgICAgICAgICAgICAgXCIucG5nXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJib3ggbmV3c1wiIH0sIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJsaW5lYXJcIiB9KSxcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJ0aXRcIiB9LCBbXG4gICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJpbmRleC5uZXdzXCIpKSlcbiAgICAgICAgXSksXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidW5kZXItbGluZVwiIH0pLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibmV3cy13cmFwXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0ubG9jYWxlID09IFwiemhcIlxuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibW9yZSBwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbk1vcmVOZXdzSGFuZGxlciB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS4kdChcImluZGV4Lm5ld01vcmVcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgPlxcblxcdFxcdFxcdFxcdFxcdFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5bmz5a6J5Lq65a+/MjAxOeW5tDLlraPluqbkv53pmanmtojotLnmiqXlkYrlh7rngonvvIFcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLlhaznm4rnjK7npLzljY7or57lubTvvIzliJvmlrDlvIDmi5PmibbotKvot69cIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLlubPlrok5MjDopoHmlL7lpKfmi5vllabvvIHlhoXlkKvotoXlvLrmlLvnlaXvvIFcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLnqoHlj5HvvIHlubPlronkurrlr7/ov4XpgJ/lupTlr7nlub/kuJzpmLPmsZ/lpKflt7TkuqTpgJrkuovmlYVcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9OZXdzRGV0YWlsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS10aXRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLkvLTmiJDplb/jgIHliqnmibbotKvvvIzlubPlronkurrlr7/lrqLmnI3oioLnu5nlrrbluq3igJxBSeKAneeahOWKm+mHj1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibmV3cy1pdGVtLWRhdGVcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIyMDE5LTA5LTI3XCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm1vcmUgcG9pbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ub25Nb3JlTmV3c0hhbmRsZXIgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uJHQoXCJpbmRleC5uZXdNb3JlXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiID5cXG5cXHRcXHRcXHRcXHRcXHRcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibmV3cy1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS50b05ld3NEZXRhaWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibmV3cy1pdGVtLXRpdFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIuW5s+WuieS6uuWjvTIwMTnlubQy5a2j5bqm5L+d6Zqq5raI6LK75aCx5ZGK5Ye654iQ77yBXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5YWs55uK542756au6I+v6KqV5bm077yM5Ym15paw6ZaL5ouT5om26LKn6LevXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5bmz5a6JOTIw6KaB5pS+5aSn5oub5ZWm77yB5YWn5ZCr6LaF5by35pS755Wl77yBXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi56qB55m877yB5bmz5a6J5Lq65aO96L+F6YCf5oeJ5bCN5buj5p2x6Zm95rGf5aSn5be05Lqk6YCa5LqL5pWFXCIpXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tZGF0ZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIjIwMTktMDktMjdcIilcbiAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnRvTmV3c0RldGFpbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJuZXdzLWl0ZW0tdGl0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwi5Ly05oiQ6ZW344CB5Yqp5om26LKn77yM5bmz5a6J5Lq65aO95a6i5pyN56+A57Wm5a625bqt4oCcQUnigJ3nmoTlipvph49cIilcbiAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5ld3MtaXRlbS1kYXRlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiMjAxOS0wOS0yN1wiKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzPzg0NTEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js":
/*!*****************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcz9hYjE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js":
/*!*******************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar at = __webpack_require__(/*! ./_string-at */ \"./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js\")(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/ZmYwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/NWUwMSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcz84Y2FjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js":
/*!*************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/MWY5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_classof.js":
/*!******************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_classof.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzPzAyZjIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_cof.js":
/*!**************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_cof.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY29mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2NvZi5qcz82MDc3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_core.js":
/*!***************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_core.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var core = module.exports = { version: '2.6.10' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY29yZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzP2RhMjciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMCcgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_core.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js":
/*!**************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcz9lMzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js":
/*!**************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fY3R4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2N0eC5qcz9lODVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_defined.js":
/*!******************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_defined.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzPzMwMzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/ZjlhNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar document = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzPzY2MTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js":
/*!************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzP2Q5M2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_export.js":
/*!*****************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_export.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcz8yNDk4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_export.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_fails.js":
/*!****************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_fails.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/MGNjMSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n__webpack_require__(/*! ./es6.regexp.exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\");\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\");\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzPzZhZjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_flags.js":
/*!****************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_flags.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/ZTdhMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_flags.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js":
/*!*****************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar call = __webpack_require__(/*! ./_iter-call */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js\");\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js\");\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcz8yMmFlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js":
/*!*****************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__(/*! ./_shared */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\")('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcz82ZmUwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_global.js":
/*!*****************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_global.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcz8zZjhiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_global.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_has.js":
/*!**************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_has.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faGFzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2hhcy5qcz81NDlkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_has.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_hide.js":
/*!***************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_hide.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faGlkZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzP2I4ZWEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_html.js":
/*!***************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_html.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var document = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faHRtbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19odG1sLmpzPzE3Y2IiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_html.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js":
/*!*************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/MjVhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js":
/*!******************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar setPrototypeOf = __webpack_require__(/*! ./_set-proto */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js\").set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzPzFlMDEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js":
/*!*****************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcz8yZjFlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js":
/*!******************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzPzk5NTIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js":
/*!************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzPzY3YzEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_is-array-iter.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcz9kYTBiIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\");\nvar MATCH = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcz81ZjljIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcz9kZDgwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-call.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js\");\nvar descriptor = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\")(IteratorPrototype, __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/YzI2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/_core-js@2.6.10@core-js/modules/_library.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar $iterCreate = __webpack_require__(/*! ./_iter-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-create.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/NGFlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/YjMwOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcz9jOGU5Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcz9lM2IzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge307XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_library.js":
/*!******************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_library.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzPzZjYzIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_library.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar macrotask = __webpack_require__(/*! ./_task */ \"./node_modules/_core-js@2.6.10@core-js/modules/_task.js\").set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\")(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcz85NDk3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js":
/*!*********************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzPzIxY2IiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js":
/*!************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzPzg3YzUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js":
/*!************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(/*! ./_dom-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\")('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(/*! ./_html */ \"./node_modules/_core-js@2.6.10@core-js/modules/_html.js\").appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzPzY1YzMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-create.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcz9kM2Q4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzPzhkNjkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-dps.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ie8-dom-define.js\");\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/ZTQ5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js\");\nvar hiddenKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\").concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/Y2IyZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/OWQ2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzP2QxNWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-gpo.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js":
/*!*******************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"./node_modules/_core-js@2.6.10@core-js/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/N2FmZSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/N2Q1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzP2M4NjQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-pie.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\");\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzPzg4NjgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js":
/*!*******************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gops.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar Reflect = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/ZjM2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_perform.js":
/*!******************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_perform.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzP2Q4YmQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_perform.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js":
/*!**************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js\");\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcz9hMDdjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js":
/*!************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzPzA2MTQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_property-desc.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js":
/*!***********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcz9hMTdjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js":
/*!*******************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar SRC = __webpack_require__(/*! ./_uid */ \"./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\")('src');\nvar $toString = __webpack_require__(/*! ./_function-to-string */ \"./node_modules/_core-js@2.6.10@core-js/modules/_function-to-string.js\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\").inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/YTZkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js":
/*!*******************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\");\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/MjEzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar regexpFlags = __webpack_require__(/*! ./_flags */ \"./node_modules/_core-js@2.6.10@core-js/modules/_flags.js\");\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/MTMzYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\")(Function.call, __webpack_require__(/*! ./_object-gopd */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js\").f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3NldC1wcm90by5qcz9hZTZlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_set-proto.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js":
/*!**********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/ZTQ2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js":
/*!****************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var def = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\").f;\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/_core-js@2.6.10@core-js/modules/_has.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/M2Q4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\");\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzPzk5NDciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_shared-key.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_shared.js":
/*!*****************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_shared.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(/*! ./_library */ \"./node_modules/_core-js@2.6.10@core-js/modules/_library.js\") ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcz9mMzQxIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js":
/*!******************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js ***!
\******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzPzk1ZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcz8xZWIwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_string-at.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_task.js":
/*!***************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_task.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar invoke = __webpack_require__(/*! ./_invoke */ \"./node_modules/_core-js@2.6.10@core-js/modules/_invoke.js\");\nvar html = __webpack_require__(/*! ./_html */ \"./node_modules/_core-js@2.6.10@core-js/modules/_html.js\");\nvar cel = __webpack_require__(/*! ./_dom-create */ \"./node_modules/_core-js@2.6.10@core-js/modules/_dom-create.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(/*! ./_cof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_cof.js\")(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdGFzay5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL190YXNrLmpzPzJkYmMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_task.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js":
/*!****************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/YzNhOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-absolute-index.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzP2E2YWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iobject.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzPzYxMTciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcz84OTQxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js":
/*!********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/_core-js@2.6.10@core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcz9hOWNmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js":
/*!***********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcz8yYWIxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_to-primitive.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_uid.js":
/*!**************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_uid.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdWlkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3VpZC5qcz80ZDJjIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL191c2VyLWFnZW50LmpzPzFjZDciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/_wks.js":
/*!**************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/_wks.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/_core-js@2.6.10@core-js/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/_core-js@2.6.10@core-js/modules/_uid.js\");\nvar Symbol = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9fd2tzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvX3drcy5qcz8xMjc3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js":
/*!**********************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js ***!
\**********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var classof = __webpack_require__(/*! ./_classof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('iterator');\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nmodule.exports = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\").getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/NWZmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/core.get-iterator-method.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js":
/*!****************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/_core-js@2.6.10@core-js/modules/_add-to-unscopables.js\");\nvar step = __webpack_require__(/*! ./_iter-step */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-step.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(/*! ./_iter-define */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-define.js\")(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/OTZkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js":
/*!***************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\").f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzPzdjZmQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js":
/*!***************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(/*! ./_object-assign */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-assign.js\") });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzP2U3ODMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js":
/*!*************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-sap.js\")('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/ZWQ4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js":
/*!*********************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/_core-js@2.6.10@core-js/modules/_library.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/_core-js@2.6.10@core-js/modules/_ctx.js\");\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/_core-js@2.6.10@core-js/modules/_classof.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/_core-js@2.6.10@core-js/modules/_a-function.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-instance.js\");\nvar forOf = __webpack_require__(/*! ./_for-of */ \"./node_modules/_core-js@2.6.10@core-js/modules/_for-of.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\");\nvar task = __webpack_require__(/*! ./_task */ \"./node_modules/_core-js@2.6.10@core-js/modules/_task.js\").set;\nvar microtask = __webpack_require__(/*! ./_microtask */ \"./node_modules/_core-js@2.6.10@core-js/modules/_microtask.js\")();\nvar newPromiseCapabilityModule = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/_core-js@2.6.10@core-js/modules/_new-promise-capability.js\");\nvar perform = __webpack_require__(/*! ./_perform */ \"./node_modules/_core-js@2.6.10@core-js/modules/_perform.js\");\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"./node_modules/_core-js@2.6.10@core-js/modules/_user-agent.js\");\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js\");\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine-all.js\")($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-to-string-tag.js\")($Promise, PROMISE);\n__webpack_require__(/*! ./_set-species */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js\")(PROMISE);\nWrapper = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\")[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(/*! ./_iter-detect */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iter-detect.js\")(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY29yZS1qc0AyLjYuMTBAY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzP2E2MGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js":
/*!********************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js ***!
\********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar inheritIfRequired = __webpack_require__(/*! ./_inherit-if-required */ \"./node_modules/_core-js@2.6.10@core-js/modules/_inherit-if-required.js\");\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-dp.js\").f;\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopn.js\").f;\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js\");\nvar $flags = __webpack_require__(/*! ./_flags */ \"./node_modules/_core-js@2.6.10@core-js/modules/_flags.js\");\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(/*! ./_descriptors */ \"./node_modules/_core-js@2.6.10@core-js/modules/_descriptors.js\") && (!CORRECT_NEW || __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\")(function () {\n re2[__webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\")('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\")(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(/*! ./_set-species */ \"./node_modules/_core-js@2.6.10@core-js/modules/_set-species.js\")('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcz9kNDc5Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js":
/*!*************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js ***!
\*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\");\n__webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\")({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjNmMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.exec.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js":
/*!**************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\");\n\n// @@match logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\")('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcz9lYmVjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js":
/*!****************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js ***!
\****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-integer.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\");\nvar regExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\");\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YzA0MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js":
/*!**************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"./node_modules/_core-js@2.6.10@core-js/modules/_is-regexp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/_core-js@2.6.10@core-js/modules/_an-object.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\");\nvar advanceStringIndex = __webpack_require__(/*! ./_advance-string-index */ \"./node_modules/_core-js@2.6.10@core-js/modules/_advance-string-index.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-length.js\");\nvar callRegExpExec = __webpack_require__(/*! ./_regexp-exec-abstract */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec-abstract.js\");\nvar regexpExec = __webpack_require__(/*! ./_regexp-exec */ \"./node_modules/_core-js@2.6.10@core-js/modules/_regexp-exec.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fails.js\");\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(/*! ./_fix-re-wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_fix-re-wks.js\")('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcz9lNmQxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js ***!
\*************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar ownKeys = __webpack_require__(/*! ./_own-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_own-keys.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/_core-js@2.6.10@core-js/modules/_to-iobject.js\");\nvar gOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-gopd.js\");\nvar createProperty = __webpack_require__(/*! ./_create-property */ \"./node_modules/_core-js@2.6.10@core-js/modules/_create-property.js\");\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/ZWZjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es7.object.get-own-property-descriptors.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js":
/*!*****************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js ***!
\*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/_core-js@2.6.10@core-js/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/_core-js@2.6.10@core-js/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/_species-constructor.js\");\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"./node_modules/_core-js@2.6.10@core-js/modules/_promise-resolve.js\");\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcz84YjFmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js\n");
/***/ }),
/***/ "./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js":
/*!**************************************************************************!*\
!*** ./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var $iterators = __webpack_require__(/*! ./es6.array.iterator */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/_object-keys.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/_core-js@2.6.10@core-js/modules/_redefine.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/_core-js@2.6.10@core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/_core-js@2.6.10@core-js/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/_core-js@2.6.10@core-js/modules/_iterators.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/_core-js@2.6.10@core-js/modules/_wks.js\");\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2NvcmUtanNAMi42LjEwQGNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19jb3JlLWpzQDIuNi4xMEBjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcz80NjM0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css":
/*!*******************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css ***!
\*******************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("exports = module.exports = __webpack_require__(/*! ../../../_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"/**\\n * Swiper 4.5.1\\n * Most modern mobile touch slider and framework with hardware accelerated transitions\\n * http://www.idangero.us/swiper/\\n *\\n * Copyright 2014-2019 Vladimir Kharlampidi\\n *\\n * Released under the MIT License\\n *\\n * Released on: September 13, 2019\\n */\\n.swiper-container {\\n margin-left: auto;\\n margin-right: auto;\\n position: relative;\\n overflow: hidden;\\n list-style: none;\\n padding: 0;\\n /* Fix of Webkit flickering */\\n z-index: 1;\\n}\\n.swiper-container-no-flexbox .swiper-slide {\\n float: left;\\n}\\n.swiper-container-vertical > .swiper-wrapper {\\n -webkit-box-orient: vertical;\\n -webkit-box-direction: normal;\\n -webkit-flex-direction: column;\\n -ms-flex-direction: column;\\n flex-direction: column;\\n}\\n.swiper-wrapper {\\n position: relative;\\n width: 100%;\\n height: 100%;\\n z-index: 1;\\n display: -webkit-box;\\n display: -webkit-flex;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-transition-property: -webkit-transform;\\n transition-property: -webkit-transform;\\n -o-transition-property: transform;\\n transition-property: transform;\\n transition-property: transform, -webkit-transform;\\n -webkit-box-sizing: content-box;\\n box-sizing: content-box;\\n}\\n.swiper-container-android .swiper-slide,\\n.swiper-wrapper {\\n -webkit-transform: translate3d(0px, 0, 0);\\n transform: translate3d(0px, 0, 0);\\n}\\n.swiper-container-multirow > .swiper-wrapper {\\n -webkit-flex-wrap: wrap;\\n -ms-flex-wrap: wrap;\\n flex-wrap: wrap;\\n}\\n.swiper-container-free-mode > .swiper-wrapper {\\n -webkit-transition-timing-function: ease-out;\\n -o-transition-timing-function: ease-out;\\n transition-timing-function: ease-out;\\n margin: 0 auto;\\n}\\n.swiper-slide {\\n -webkit-flex-shrink: 0;\\n -ms-flex-negative: 0;\\n flex-shrink: 0;\\n width: 100%;\\n height: 100%;\\n position: relative;\\n -webkit-transition-property: -webkit-transform;\\n transition-property: -webkit-transform;\\n -o-transition-property: transform;\\n transition-property: transform;\\n transition-property: transform, -webkit-transform;\\n}\\n.swiper-slide-invisible-blank {\\n visibility: hidden;\\n}\\n/* Auto Height */\\n.swiper-container-autoheight,\\n.swiper-container-autoheight .swiper-slide {\\n height: auto;\\n}\\n.swiper-container-autoheight .swiper-wrapper {\\n -webkit-box-align: start;\\n -webkit-align-items: flex-start;\\n -ms-flex-align: start;\\n align-items: flex-start;\\n -webkit-transition-property: height, -webkit-transform;\\n transition-property: height, -webkit-transform;\\n -o-transition-property: transform, height;\\n transition-property: transform, height;\\n transition-property: transform, height, -webkit-transform;\\n}\\n/* 3D Effects */\\n.swiper-container-3d {\\n -webkit-perspective: 1200px;\\n perspective: 1200px;\\n}\\n.swiper-container-3d .swiper-wrapper,\\n.swiper-container-3d .swiper-slide,\\n.swiper-container-3d .swiper-slide-shadow-left,\\n.swiper-container-3d .swiper-slide-shadow-right,\\n.swiper-container-3d .swiper-slide-shadow-top,\\n.swiper-container-3d .swiper-slide-shadow-bottom,\\n.swiper-container-3d .swiper-cube-shadow {\\n -webkit-transform-style: preserve-3d;\\n transform-style: preserve-3d;\\n}\\n.swiper-container-3d .swiper-slide-shadow-left,\\n.swiper-container-3d .swiper-slide-shadow-right,\\n.swiper-container-3d .swiper-slide-shadow-top,\\n.swiper-container-3d .swiper-slide-shadow-bottom {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 100%;\\n height: 100%;\\n pointer-events: none;\\n z-index: 10;\\n}\\n.swiper-container-3d .swiper-slide-shadow-left {\\n background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-right {\\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-top {\\n background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-bottom {\\n background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\\n background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n/* IE10 Windows Phone 8 Fixes */\\n.swiper-container-wp8-horizontal,\\n.swiper-container-wp8-horizontal > .swiper-wrapper {\\n -ms-touch-action: pan-y;\\n touch-action: pan-y;\\n}\\n.swiper-container-wp8-vertical,\\n.swiper-container-wp8-vertical > .swiper-wrapper {\\n -ms-touch-action: pan-x;\\n touch-action: pan-x;\\n}\\n.swiper-button-prev,\\n.swiper-button-next {\\n position: absolute;\\n top: 50%;\\n width: 27px;\\n height: 44px;\\n margin-top: -22px;\\n z-index: 10;\\n cursor: pointer;\\n background-size: 27px 44px;\\n background-position: center;\\n background-repeat: no-repeat;\\n}\\n.swiper-button-prev.swiper-button-disabled,\\n.swiper-button-next.swiper-button-disabled {\\n opacity: 0.35;\\n cursor: auto;\\n pointer-events: none;\\n}\\n.swiper-button-prev,\\n.swiper-container-rtl .swiper-button-next {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\\\");\\n left: 10px;\\n right: auto;\\n}\\n.swiper-button-next,\\n.swiper-container-rtl .swiper-button-prev {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\\\");\\n right: 10px;\\n left: auto;\\n}\\n.swiper-button-prev.swiper-button-white,\\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-next.swiper-button-white,\\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-prev.swiper-button-black,\\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-next.swiper-button-black,\\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\\\");\\n}\\n.swiper-button-lock {\\n display: none;\\n}\\n.swiper-pagination {\\n position: absolute;\\n text-align: center;\\n -webkit-transition: 300ms opacity;\\n -o-transition: 300ms opacity;\\n transition: 300ms opacity;\\n -webkit-transform: translate3d(0, 0, 0);\\n transform: translate3d(0, 0, 0);\\n z-index: 10;\\n}\\n.swiper-pagination.swiper-pagination-hidden {\\n opacity: 0;\\n}\\n/* Common Styles */\\n.swiper-pagination-fraction,\\n.swiper-pagination-custom,\\n.swiper-container-horizontal > .swiper-pagination-bullets {\\n bottom: 10px;\\n left: 0;\\n width: 100%;\\n}\\n/* Bullets */\\n.swiper-pagination-bullets-dynamic {\\n overflow: hidden;\\n font-size: 0;\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n -webkit-transform: scale(0.33);\\n -ms-transform: scale(0.33);\\n transform: scale(0.33);\\n position: relative;\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\\n -webkit-transform: scale(1);\\n -ms-transform: scale(1);\\n transform: scale(1);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\\n -webkit-transform: scale(1);\\n -ms-transform: scale(1);\\n transform: scale(1);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\\n -webkit-transform: scale(0.66);\\n -ms-transform: scale(0.66);\\n transform: scale(0.66);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\\n -webkit-transform: scale(0.33);\\n -ms-transform: scale(0.33);\\n transform: scale(0.33);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\\n -webkit-transform: scale(0.66);\\n -ms-transform: scale(0.66);\\n transform: scale(0.66);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\\n -webkit-transform: scale(0.33);\\n -ms-transform: scale(0.33);\\n transform: scale(0.33);\\n}\\n.swiper-pagination-bullet {\\n width: 8px;\\n height: 8px;\\n display: inline-block;\\n border-radius: 100%;\\n background: #000;\\n opacity: 0.2;\\n}\\nbutton.swiper-pagination-bullet {\\n border: none;\\n margin: 0;\\n padding: 0;\\n -webkit-box-shadow: none;\\n box-shadow: none;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.swiper-pagination-clickable .swiper-pagination-bullet {\\n cursor: pointer;\\n}\\n.swiper-pagination-bullet-active {\\n opacity: 1;\\n background: #007aff;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets {\\n right: 10px;\\n top: 50%;\\n -webkit-transform: translate3d(0px, -50%, 0);\\n transform: translate3d(0px, -50%, 0);\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {\\n margin: 6px 0;\\n display: block;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\\n top: 50%;\\n -webkit-transform: translateY(-50%);\\n -ms-transform: translateY(-50%);\\n transform: translateY(-50%);\\n width: 8px;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n display: inline-block;\\n -webkit-transition: 200ms top, 200ms -webkit-transform;\\n transition: 200ms top, 200ms -webkit-transform;\\n -o-transition: 200ms transform, 200ms top;\\n transition: 200ms transform, 200ms top;\\n transition: 200ms transform, 200ms top, 200ms -webkit-transform;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {\\n margin: 0 4px;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\\n left: 50%;\\n -webkit-transform: translateX(-50%);\\n -ms-transform: translateX(-50%);\\n transform: translateX(-50%);\\n white-space: nowrap;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n -webkit-transition: 200ms left, 200ms -webkit-transform;\\n transition: 200ms left, 200ms -webkit-transform;\\n -o-transition: 200ms transform, 200ms left;\\n transition: 200ms transform, 200ms left;\\n transition: 200ms transform, 200ms left, 200ms -webkit-transform;\\n}\\n.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n -webkit-transition: 200ms right, 200ms -webkit-transform;\\n transition: 200ms right, 200ms -webkit-transform;\\n -o-transition: 200ms transform, 200ms right;\\n transition: 200ms transform, 200ms right;\\n transition: 200ms transform, 200ms right, 200ms -webkit-transform;\\n}\\n/* Progress */\\n.swiper-pagination-progressbar {\\n background: rgba(0, 0, 0, 0.25);\\n position: absolute;\\n}\\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\\n background: #007aff;\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 100%;\\n height: 100%;\\n -webkit-transform: scale(0);\\n -ms-transform: scale(0);\\n transform: scale(0);\\n -webkit-transform-origin: left top;\\n -ms-transform-origin: left top;\\n transform-origin: left top;\\n}\\n.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\\n -webkit-transform-origin: right top;\\n -ms-transform-origin: right top;\\n transform-origin: right top;\\n}\\n.swiper-container-horizontal > .swiper-pagination-progressbar,\\n.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\\n width: 100%;\\n height: 4px;\\n left: 0;\\n top: 0;\\n}\\n.swiper-container-vertical > .swiper-pagination-progressbar,\\n.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\\n width: 4px;\\n height: 100%;\\n left: 0;\\n top: 0;\\n}\\n.swiper-pagination-white .swiper-pagination-bullet-active {\\n background: #ffffff;\\n}\\n.swiper-pagination-progressbar.swiper-pagination-white {\\n background: rgba(255, 255, 255, 0.25);\\n}\\n.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill {\\n background: #ffffff;\\n}\\n.swiper-pagination-black .swiper-pagination-bullet-active {\\n background: #000000;\\n}\\n.swiper-pagination-progressbar.swiper-pagination-black {\\n background: rgba(0, 0, 0, 0.25);\\n}\\n.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill {\\n background: #000000;\\n}\\n.swiper-pagination-lock {\\n display: none;\\n}\\n/* Scrollbar */\\n.swiper-scrollbar {\\n border-radius: 10px;\\n position: relative;\\n -ms-touch-action: none;\\n background: rgba(0, 0, 0, 0.1);\\n}\\n.swiper-container-horizontal > .swiper-scrollbar {\\n position: absolute;\\n left: 1%;\\n bottom: 3px;\\n z-index: 50;\\n height: 5px;\\n width: 98%;\\n}\\n.swiper-container-vertical > .swiper-scrollbar {\\n position: absolute;\\n right: 3px;\\n top: 1%;\\n z-index: 50;\\n width: 5px;\\n height: 98%;\\n}\\n.swiper-scrollbar-drag {\\n height: 100%;\\n width: 100%;\\n position: relative;\\n background: rgba(0, 0, 0, 0.5);\\n border-radius: 10px;\\n left: 0;\\n top: 0;\\n}\\n.swiper-scrollbar-cursor-drag {\\n cursor: move;\\n}\\n.swiper-scrollbar-lock {\\n display: none;\\n}\\n.swiper-zoom-container {\\n width: 100%;\\n height: 100%;\\n display: -webkit-box;\\n display: -webkit-flex;\\n display: -ms-flexbox;\\n display: flex;\\n -webkit-box-pack: center;\\n -webkit-justify-content: center;\\n -ms-flex-pack: center;\\n justify-content: center;\\n -webkit-box-align: center;\\n -webkit-align-items: center;\\n -ms-flex-align: center;\\n align-items: center;\\n text-align: center;\\n}\\n.swiper-zoom-container > img,\\n.swiper-zoom-container > svg,\\n.swiper-zoom-container > canvas {\\n max-width: 100%;\\n max-height: 100%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.swiper-slide-zoomed {\\n cursor: move;\\n}\\n/* Preloader */\\n.swiper-lazy-preloader {\\n width: 42px;\\n height: 42px;\\n position: absolute;\\n left: 50%;\\n top: 50%;\\n margin-left: -21px;\\n margin-top: -21px;\\n z-index: 10;\\n -webkit-transform-origin: 50%;\\n -ms-transform-origin: 50%;\\n transform-origin: 50%;\\n -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\\n animation: swiper-preloader-spin 1s steps(12, end) infinite;\\n}\\n.swiper-lazy-preloader:after {\\n display: block;\\n content: '';\\n width: 100%;\\n height: 100%;\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\\\");\\n background-position: 50%;\\n background-size: 100%;\\n background-repeat: no-repeat;\\n}\\n.swiper-lazy-preloader-white:after {\\n background-image: url(\\\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\\\");\\n}\\n@-webkit-keyframes swiper-preloader-spin {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n@keyframes swiper-preloader-spin {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n/* a11y */\\n.swiper-container .swiper-notification {\\n position: absolute;\\n left: 0;\\n top: 0;\\n pointer-events: none;\\n opacity: 0;\\n z-index: -1000;\\n}\\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\\n -webkit-transition-timing-function: ease-out;\\n -o-transition-timing-function: ease-out;\\n transition-timing-function: ease-out;\\n}\\n.swiper-container-fade .swiper-slide {\\n pointer-events: none;\\n -webkit-transition-property: opacity;\\n -o-transition-property: opacity;\\n transition-property: opacity;\\n}\\n.swiper-container-fade .swiper-slide .swiper-slide {\\n pointer-events: none;\\n}\\n.swiper-container-fade .swiper-slide-active,\\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\\n pointer-events: auto;\\n}\\n.swiper-container-cube {\\n overflow: visible;\\n}\\n.swiper-container-cube .swiper-slide {\\n pointer-events: none;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n z-index: 1;\\n visibility: hidden;\\n -webkit-transform-origin: 0 0;\\n -ms-transform-origin: 0 0;\\n transform-origin: 0 0;\\n width: 100%;\\n height: 100%;\\n}\\n.swiper-container-cube .swiper-slide .swiper-slide {\\n pointer-events: none;\\n}\\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\\n -webkit-transform-origin: 100% 0;\\n -ms-transform-origin: 100% 0;\\n transform-origin: 100% 0;\\n}\\n.swiper-container-cube .swiper-slide-active,\\n.swiper-container-cube .swiper-slide-active .swiper-slide-active {\\n pointer-events: auto;\\n}\\n.swiper-container-cube .swiper-slide-active,\\n.swiper-container-cube .swiper-slide-next,\\n.swiper-container-cube .swiper-slide-prev,\\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\\n pointer-events: auto;\\n visibility: visible;\\n}\\n.swiper-container-cube .swiper-slide-shadow-top,\\n.swiper-container-cube .swiper-slide-shadow-bottom,\\n.swiper-container-cube .swiper-slide-shadow-left,\\n.swiper-container-cube .swiper-slide-shadow-right {\\n z-index: 0;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n}\\n.swiper-container-cube .swiper-cube-shadow {\\n position: absolute;\\n left: 0;\\n bottom: 0px;\\n width: 100%;\\n height: 100%;\\n background: #000;\\n opacity: 0.6;\\n -webkit-filter: blur(50px);\\n filter: blur(50px);\\n z-index: 0;\\n}\\n.swiper-container-flip {\\n overflow: visible;\\n}\\n.swiper-container-flip .swiper-slide {\\n pointer-events: none;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n z-index: 1;\\n}\\n.swiper-container-flip .swiper-slide .swiper-slide {\\n pointer-events: none;\\n}\\n.swiper-container-flip .swiper-slide-active,\\n.swiper-container-flip .swiper-slide-active .swiper-slide-active {\\n pointer-events: auto;\\n}\\n.swiper-container-flip .swiper-slide-shadow-top,\\n.swiper-container-flip .swiper-slide-shadow-bottom,\\n.swiper-container-flip .swiper-slide-shadow-left,\\n.swiper-container-flip .swiper-slide-shadow-right {\\n z-index: 0;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n}\\n.swiper-container-coverflow .swiper-wrapper {\\n /* Windows 8 IE 10 fix */\\n -ms-perspective: 1200px;\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9jc3Mvc3dpcGVyLmNzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fc3dpcGVyQDQuNS4xQHN3aXBlci9kaXN0L2Nzcy9zd2lwZXIuY3NzPzQ3ZTciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qKlxcbiAqIFN3aXBlciA0LjUuMVxcbiAqIE1vc3QgbW9kZXJuIG1vYmlsZSB0b3VjaCBzbGlkZXIgYW5kIGZyYW1ld29yayB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25zXFxuICogaHR0cDovL3d3dy5pZGFuZ2Vyby51cy9zd2lwZXIvXFxuICpcXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE5IFZsYWRpbWlyIEtoYXJsYW1waWRpXFxuICpcXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcXG4gKlxcbiAqIFJlbGVhc2VkIG9uOiBTZXB0ZW1iZXIgMTMsIDIwMTlcXG4gKi9cXG4uc3dpcGVyLWNvbnRhaW5lciB7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbiAgcGFkZGluZzogMDtcXG4gIC8qIEZpeCBvZiBXZWJraXQgZmxpY2tlcmluZyAqL1xcbiAgei1pbmRleDogMTtcXG59XFxuLnN3aXBlci1jb250YWluZXItbm8tZmxleGJveCAuc3dpcGVyLXNsaWRlIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItd3JhcHBlciB7XFxuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XFxuICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbi5zd2lwZXItd3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHotaW5kZXg6IDE7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIC1vLXRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgLXdlYmtpdC10cmFuc2Zvcm07XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWFuZHJvaWQgLnN3aXBlci1zbGlkZSxcXG4uc3dpcGVyLXdyYXBwZXIge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMCwgMCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMCwgMCk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLW11bHRpcm93ID4gLnN3aXBlci13cmFwcGVyIHtcXG4gIC13ZWJraXQtZmxleC13cmFwOiB3cmFwO1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG59XFxuLnN3aXBlci1jb250YWluZXItZnJlZS1tb2RlID4gLnN3aXBlci13cmFwcGVyIHtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xcbiAgLW8tdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcbi5zd2lwZXItc2xpZGUge1xcbiAgLXdlYmtpdC1mbGV4LXNocmluazogMDtcXG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIC1vLXRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgLXdlYmtpdC10cmFuc2Zvcm07XFxufVxcbi5zd2lwZXItc2xpZGUtaW52aXNpYmxlLWJsYW5rIHtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLyogQXV0byBIZWlnaHQgKi9cXG4uc3dpcGVyLWNvbnRhaW5lci1hdXRvaGVpZ2h0LFxcbi5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQgLnN3aXBlci1zbGlkZSB7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQgLnN3aXBlci13cmFwcGVyIHtcXG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IGhlaWdodCwgLXdlYmtpdC10cmFuc2Zvcm07XFxuICAtby10cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIGhlaWdodDtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgaGVpZ2h0O1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBoZWlnaHQsIC13ZWJraXQtdHJhbnNmb3JtO1xcbn1cXG4vKiAzRCBFZmZlY3RzICovXFxuLnN3aXBlci1jb250YWluZXItM2Qge1xcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogMTIwMHB4O1xcbiAgcGVyc3BlY3RpdmU6IDEyMDBweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci13cmFwcGVyLFxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLFxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItY3ViZS1zaGFkb3cge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xcbiAgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgei1pbmRleDogMTA7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIHJpZ2h0IHRvcCwgbGVmdCB0b3AsIGZyb20ocmdiYSgwLCAwLCAwLCAwLjUpKSwgdG8ocmdiYSgwLCAwLCAwLCAwKSkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmlnaHQsIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQocmlnaHQsIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCByaWdodCB0b3AsIGZyb20ocmdiYSgwLCAwLCAwLCAwLjUpKSwgdG8ocmdiYSgwLCAwLCAwLCAwKSkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3Age1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShyZ2JhKDAsIDAsIDAsIDAuNSkpLCB0byhyZ2JhKDAsIDAsIDAsIDApKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChib3R0b20sIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoYm90dG9tLCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG59XFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiYSgwLCAwLCAwLCAwLjUpKSwgdG8ocmdiYSgwLCAwLCAwLCAwKSkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxufVxcbi8qIElFMTAgV2luZG93cyBQaG9uZSA4IEZpeGVzICovXFxuLnN3aXBlci1jb250YWluZXItd3A4LWhvcml6b250YWwsXFxuLnN3aXBlci1jb250YWluZXItd3A4LWhvcml6b250YWwgPiAuc3dpcGVyLXdyYXBwZXIge1xcbiAgLW1zLXRvdWNoLWFjdGlvbjogcGFuLXk7XFxuICB0b3VjaC1hY3Rpb246IHBhbi15O1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci13cDgtdmVydGljYWwsXFxuLnN3aXBlci1jb250YWluZXItd3A4LXZlcnRpY2FsID4gLnN3aXBlci13cmFwcGVyIHtcXG4gIC1tcy10b3VjaC1hY3Rpb246IHBhbi14O1xcbiAgdG91Y2gtYWN0aW9uOiBwYW4teDtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldixcXG4uc3dpcGVyLWJ1dHRvbi1uZXh0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgd2lkdGg6IDI3cHg7XFxuICBoZWlnaHQ6IDQ0cHg7XFxuICBtYXJnaW4tdG9wOiAtMjJweDtcXG4gIHotaW5kZXg6IDEwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1zaXplOiAyN3B4IDQ0cHg7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1wcmV2LnN3aXBlci1idXR0b24tZGlzYWJsZWQsXFxuLnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLWRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuMzU7XFxuICBjdXJzb3I6IGF1dG87XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldixcXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tbmV4dCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHhtbG5zJTNEJ2h0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyclMjB2aWV3Qm94JTNEJzAlMjAwJTIwMjclMjA0NCclM0UlM0NwYXRoJTIwZCUzRCdNMCUyQzIyTDIyJTJDMGwyLjElMkMyLjFMNC4yJTJDMjJsMTkuOSUyQzE5LjlMMjIlMkM0NEwwJTJDMjJMMCUyQzIyTDAlMkMyMnonJTIwZmlsbCUzRCclMjMwMDdhZmYnJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBsZWZ0OiAxMHB4O1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5zd2lwZXItYnV0dG9uLW5leHQsXFxuLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLXByZXYge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmclMjB4bWxucyUzRCdodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmcnJTIwdmlld0JveCUzRCcwJTIwMCUyMDI3JTIwNDQnJTNFJTNDcGF0aCUyMGQlM0QnTTI3JTJDMjJMMjclMkMyMkw1JTJDNDRsLTIuMS0yLjFMMjIuOCUyQzIyTDIuOSUyQzIuMUw1JTJDMEwyNyUyQzIyTDI3JTJDMjJ6JyUyMGZpbGwlM0QnJTIzMDA3YWZmJyUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgcmlnaHQ6IDEwcHg7XFxuICBsZWZ0OiBhdXRvO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1wcmV2LnN3aXBlci1idXR0b24td2hpdGUsXFxuLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLW5leHQuc3dpcGVyLWJ1dHRvbi13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHhtbG5zJTNEJ2h0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyclMjB2aWV3Qm94JTNEJzAlMjAwJTIwMjclMjA0NCclM0UlM0NwYXRoJTIwZCUzRCdNMCUyQzIyTDIyJTJDMGwyLjElMkMyLjFMNC4yJTJDMjJsMTkuOSUyQzE5LjlMMjIlMkM0NEwwJTJDMjJMMCUyQzIyTDAlMkMyMnonJTIwZmlsbCUzRCclMjNmZmZmZmYnJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxufVxcbi5zd2lwZXItYnV0dG9uLW5leHQuc3dpcGVyLWJ1dHRvbi13aGl0ZSxcXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tcHJldi5zd2lwZXItYnV0dG9uLXdoaXRlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnJTIweG1sbnMlM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJyUyMHZpZXdCb3glM0QnMCUyMDAlMjAyNyUyMDQ0JyUzRSUzQ3BhdGglMjBkJTNEJ00yNyUyQzIyTDI3JTJDMjJMNSUyQzQ0bC0yLjEtMi4xTDIyLjglMkMyMkwyLjklMkMyLjFMNSUyQzBMMjclMkMyMkwyNyUyQzIyeiclMjBmaWxsJTNEJyUyM2ZmZmZmZiclMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldi5zd2lwZXItYnV0dG9uLWJsYWNrLFxcbi5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLWJ1dHRvbi1uZXh0LnN3aXBlci1idXR0b24tYmxhY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmclMjB4bWxucyUzRCdodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmcnJTIwdmlld0JveCUzRCcwJTIwMCUyMDI3JTIwNDQnJTNFJTNDcGF0aCUyMGQlM0QnTTAlMkMyMkwyMiUyQzBsMi4xJTJDMi4xTDQuMiUyQzIybDE5LjklMkMxOS45TDIyJTJDNDRMMCUyQzIyTDAlMkMyMkwwJTJDMjJ6JyUyMGZpbGwlM0QnJTIzMDAwMDAwJyUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1uZXh0LnN3aXBlci1idXR0b24tYmxhY2ssXFxuLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi1ibGFjayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHhtbG5zJTNEJ2h0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyclMjB2aWV3Qm94JTNEJzAlMjAwJTIwMjclMjA0NCclM0UlM0NwYXRoJTIwZCUzRCdNMjclMkMyMkwyNyUyQzIyTDUlMkM0NGwtMi4xLTIuMUwyMi44JTJDMjJMMi45JTJDMi4xTDUlMkMwTDI3JTJDMjJMMjclMkMyMnonJTIwZmlsbCUzRCclMjMwMDAwMDAnJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxufVxcbi5zd2lwZXItYnV0dG9uLWxvY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogMzAwbXMgb3BhY2l0eTtcXG4gIC1vLXRyYW5zaXRpb246IDMwMG1zIG9wYWNpdHk7XFxuICB0cmFuc2l0aW9uOiAzMDBtcyBvcGFjaXR5O1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gIHotaW5kZXg6IDEwO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24uc3dpcGVyLXBhZ2luYXRpb24taGlkZGVuIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi8qIENvbW1vbiBTdHlsZXMgKi9cXG4uc3dpcGVyLXBhZ2luYXRpb24tZnJhY3Rpb24sXFxuLnN3aXBlci1wYWdpbmF0aW9uLWN1c3RvbSxcXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMge1xcbiAgYm90dG9tOiAxMHB4O1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4vKiBCdWxsZXRzICovXFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZm9udC1zaXplOiAwO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1tYWluIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1wcmV2IHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjY2KTtcXG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKDAuNjYpO1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjY2KTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1wcmV2LXByZXYge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW5leHQge1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNjYpO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMC42Nik7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNjYpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW5leHQtbmV4dCB7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxuICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgwLjMzKTtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgd2lkdGg6IDhweDtcXG4gIGhlaWdodDogOHB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICMwMDA7XFxuICBvcGFjaXR5OiAwLjI7XFxufVxcbmJ1dHRvbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tY2xpY2thYmxlIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZDogIzAwN2FmZjtcXG59XFxuLnN3aXBlci1jb250YWluZXItdmVydGljYWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cyB7XFxuICByaWdodDogMTBweDtcXG4gIHRvcDogNTAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgLTUwJSwgMCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgLTUwJSwgMCk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICBtYXJnaW46IDZweCAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIHtcXG4gIHRvcDogNTAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgd2lkdGg6IDhweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItdmVydGljYWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IDIwMG1zIHRvcCwgMjAwbXMgLXdlYmtpdC10cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uOiAyMDBtcyB0b3AsIDIwMG1zIC13ZWJraXQtdHJhbnNmb3JtO1xcbiAgLW8tdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyB0b3A7XFxuICB0cmFuc2l0aW9uOiAyMDBtcyB0cmFuc2Zvcm0sIDIwMG1zIHRvcDtcXG4gIHRyYW5zaXRpb246IDIwMG1zIHRyYW5zZm9ybSwgMjAwbXMgdG9wLCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgbWFyZ2luOiAwIDRweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyB7XFxuICBsZWZ0OiA1MCU7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAyMDBtcyBsZWZ0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb246IDIwMG1zIGxlZnQsIDIwMG1zIC13ZWJraXQtdHJhbnNmb3JtO1xcbiAgLW8tdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyBsZWZ0O1xcbiAgdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyBsZWZ0O1xcbiAgdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyBsZWZ0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbC5zd2lwZXItY29udGFpbmVyLXJ0bCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICAtd2Via2l0LXRyYW5zaXRpb246IDIwMG1zIHJpZ2h0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIHRyYW5zaXRpb246IDIwMG1zIHJpZ2h0LCAyMDBtcyAtd2Via2l0LXRyYW5zZm9ybTtcXG4gIC1vLXRyYW5zaXRpb246IDIwMG1zIHRyYW5zZm9ybSwgMjAwbXMgcmlnaHQ7XFxuICB0cmFuc2l0aW9uOiAyMDBtcyB0cmFuc2Zvcm0sIDIwMG1zIHJpZ2h0O1xcbiAgdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyByaWdodCwgMjAwbXMgLXdlYmtpdC10cmFuc2Zvcm07XFxufVxcbi8qIFByb2dyZXNzICovXFxuLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhciAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA3YWZmO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMCk7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDtcXG4gIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyIC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1maWxsIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhcixcXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogNHB4O1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG59XFxuLnN3aXBlci1jb250YWluZXItdmVydGljYWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIsXFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZSB7XFxuICB3aWR0aDogNHB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLXdoaXRlIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIuc3dpcGVyLXBhZ2luYXRpb24td2hpdGUgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGwge1xcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJsYWNrIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMwMDAwMDA7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi1ibGFjayB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIuc3dpcGVyLXBhZ2luYXRpb24tYmxhY2sgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGwge1xcbiAgYmFja2dyb3VuZDogIzAwMDAwMDtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWxvY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLyogU2Nyb2xsYmFyICovXFxuLnN3aXBlci1zY3JvbGxiYXIge1xcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwgPiAuc3dpcGVyLXNjcm9sbGJhciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAxJTtcXG4gIGJvdHRvbTogM3B4O1xcbiAgei1pbmRleDogNTA7XFxuICBoZWlnaHQ6IDVweDtcXG4gIHdpZHRoOiA5OCU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1zY3JvbGxiYXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDNweDtcXG4gIHRvcDogMSU7XFxuICB6LWluZGV4OiA1MDtcXG4gIHdpZHRoOiA1cHg7XFxuICBoZWlnaHQ6IDk4JTtcXG59XFxuLnN3aXBlci1zY3JvbGxiYXItZHJhZyB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbn1cXG4uc3dpcGVyLXNjcm9sbGJhci1jdXJzb3ItZHJhZyB7XFxuICBjdXJzb3I6IG1vdmU7XFxufVxcbi5zd2lwZXItc2Nyb2xsYmFyLWxvY2sge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnN3aXBlci16b29tLWNvbnRhaW5lciB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uc3dpcGVyLXpvb20tY29udGFpbmVyID4gaW1nLFxcbi5zd2lwZXItem9vbS1jb250YWluZXIgPiBzdmcsXFxuLnN3aXBlci16b29tLWNvbnRhaW5lciA+IGNhbnZhcyB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgLW8tb2JqZWN0LWZpdDogY29udGFpbjtcXG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XFxufVxcbi5zd2lwZXItc2xpZGUtem9vbWVkIHtcXG4gIGN1cnNvcjogbW92ZTtcXG59XFxuLyogUHJlbG9hZGVyICovXFxuLnN3aXBlci1sYXp5LXByZWxvYWRlciB7XFxuICB3aWR0aDogNDJweDtcXG4gIGhlaWdodDogNDJweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRvcDogNTAlO1xcbiAgbWFyZ2luLWxlZnQ6IC0yMXB4O1xcbiAgbWFyZ2luLXRvcDogLTIxcHg7XFxuICB6LWluZGV4OiAxMDtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDUwJTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJTtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiBzd2lwZXItcHJlbG9hZGVyLXNwaW4gMXMgc3RlcHMoMTIsIGVuZCkgaW5maW5pdGU7XFxuICBhbmltYXRpb246IHN3aXBlci1wcmVsb2FkZXItc3BpbiAxcyBzdGVwcygxMiwgZW5kKSBpbmZpbml0ZTtcXG59XFxuLnN3aXBlci1sYXp5LXByZWxvYWRlcjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHZpZXdCb3glM0QnMCUyMDAlMjAxMjAlMjAxMjAnJTIweG1sbnMlM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJyUyMHhtbG5zJTNBeGxpbmslM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmsnJTNFJTNDZGVmcyUzRSUzQ2xpbmUlMjBpZCUzRCdsJyUyMHgxJTNEJzYwJyUyMHgyJTNEJzYwJyUyMHkxJTNEJzcnJTIweTIlM0QnMjcnJTIwc3Ryb2tlJTNEJyUyMzZjNmM2YyclMjBzdHJva2Utd2lkdGglM0QnMTEnJTIwc3Ryb2tlLWxpbmVjYXAlM0Qncm91bmQnJTJGJTNFJTNDJTJGZGVmcyUzRSUzQ2clM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMjcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSg2MCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoOTAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDEyMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMTUwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMzcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgxODAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy40NiclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDIxMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjU2JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMjQwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuNjYnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgyNzAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy43NSclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjg1JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMzMwJTIwNjAlMkM2MCknJTJGJTNFJTNDJTJGZyUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlO1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG59XFxuLnN3aXBlci1sYXp5LXByZWxvYWRlci13aGl0ZTphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHZpZXdCb3glM0QnMCUyMDAlMjAxMjAlMjAxMjAnJTIweG1sbnMlM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJyUyMHhtbG5zJTNBeGxpbmslM0QnaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmsnJTNFJTNDZGVmcyUzRSUzQ2xpbmUlMjBpZCUzRCdsJyUyMHgxJTNEJzYwJyUyMHgyJTNEJzYwJyUyMHkxJTNEJzcnJTIweTIlM0QnMjcnJTIwc3Ryb2tlJTNEJyUyM2ZmZiclMjBzdHJva2Utd2lkdGglM0QnMTEnJTIwc3Ryb2tlLWxpbmVjYXAlM0Qncm91bmQnJTJGJTNFJTNDJTJGZGVmcyUzRSUzQ2clM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMjcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSg2MCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoOTAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy4yNyclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDEyMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjI3JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMTUwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuMzcnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgxODAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy40NiclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDIxMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjU2JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMjQwJTIwNjAlMkM2MCknJTJGJTNFJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJyUyM2wnJTIwb3BhY2l0eSUzRCcuNjYnJTIwdHJhbnNmb3JtJTNEJ3JvdGF0ZSgyNzAlMjA2MCUyQzYwKSclMkYlM0UlM0N1c2UlMjB4bGluayUzQWhyZWYlM0QnJTIzbCclMjBvcGFjaXR5JTNEJy43NSclMjB0cmFuc2Zvcm0lM0Qncm90YXRlKDMwMCUyMDYwJTJDNjApJyUyRiUzRSUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCclMjNsJyUyMG9wYWNpdHklM0QnLjg1JyUyMHRyYW5zZm9ybSUzRCdyb3RhdGUoMzMwJTIwNjAlMkM2MCknJTJGJTNFJTNDJTJGZyUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbn1cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc3dpcGVyLXByZWxvYWRlci1zcGluIHtcXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgc3dpcGVyLXByZWxvYWRlci1zcGluIHtcXG4gIDEwMCUge1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbi8qIGExMXkgKi9cXG4uc3dpcGVyLWNvbnRhaW5lciAuc3dpcGVyLW5vdGlmaWNhdGlvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBvcGFjaXR5OiAwO1xcbiAgei1pbmRleDogLTEwMDA7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUuc3dpcGVyLWNvbnRhaW5lci1mcmVlLW1vZGUgLnN3aXBlci1zbGlkZSB7XFxuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG4gIC1vLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmFkZSAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBvcGFjaXR5O1xcbiAgLW8tdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGUtYWN0aXZlLFxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmUge1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgei1pbmRleDogMTtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnN3aXBlci1jb250YWluZXItY3ViZS5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLXNsaWRlIHtcXG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwO1xcbiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMDtcXG59XFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLWFjdGl2ZSxcXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlIC5zd2lwZXItc2xpZGUtYWN0aXZlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlLFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0LFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1wcmV2LFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1uZXh0ICsgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogYXV0bztcXG4gIHZpc2liaWxpdHk6IHZpc2libGU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCxcXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0IHtcXG4gIHotaW5kZXg6IDA7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLWN1YmUtc2hhZG93IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIC13ZWJraXQtZmlsdGVyOiBibHVyKDUwcHgpO1xcbiAgZmlsdGVyOiBibHVyKDUwcHgpO1xcbiAgei1pbmRleDogMDtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCB7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICB6LWluZGV4OiAxO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLWFjdGl2ZSxcXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtYWN0aXZlIC5zd2lwZXItc2xpZGUtYWN0aXZlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCxcXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSxcXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsXFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCB7XFxuICB6LWluZGV4OiAwO1xcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWNvdmVyZmxvdyAuc3dpcGVyLXdyYXBwZXIge1xcbiAgLyogV2luZG93cyA4IElFIDEwIGZpeCAqL1xcbiAgLW1zLXBlcnNwZWN0aXZlOiAxMjAwcHg7XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&":
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=style&index=0&lang=scss& ***!
\**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("exports = module.exports = __webpack_require__(/*! ../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n/**\\n * ------------------------------------------------------------------\\n * 支持文件\\n * 需要引用的地方均需要加上这个支持文件\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass Minxins\\n *\\n * 参考收集:\\n * https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass 变量\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n.bis {\\n background-repeat: no-repeat;\\n background-size: 100% 100%;\\n}\\n.fl {\\n display: flex;\\n}\\n.fj {\\n display: flex;\\n justify-content: space-between;\\n}\\n.fla {\\n display: flex;\\n align-items: center;\\n}\\n.fcc {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.bb {\\n box-sizing: border-box;\\n}\\n.fullp {\\n width: 100%;\\n height: 100%;\\n}\\n.pointer {\\n cursor: pointer;\\n}\\n.text-l {\\n text-align: left;\\n}\\n.text-r {\\n text-align: right;\\n}\\n.text-c {\\n text-align: center;\\n}\\n.bc {\\n text-align: center;\\n}\\n.flex1 {\\n flex: 1;\\n}\\n\\n/* 图片字体 */\\n@font-face {\\n font-family: 'iconfont';\\n src: url(\\\"data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAASEAAsAAAAACSAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDSAqFGIQnATYCJAMYCw4ABCAFhG0HVBvZBxGVnNvIfhzYDV+BAe9wtJiGONTGYuHBZ/Oh77Q3OxupItOeFFTcQjpRXwK+AIbn08ne766XppsiwRKPksQTj7AO4xAOv3fOAdsJc0KNZO3Io89Lf8K9BkY+ce+4df4Dms+yXMacNNbEAOOAAtrbF1mBxAlqy/Dq8uqwrgMBiPGAD4g6dbgGQhSseQRAKstK8iFMmFAVBMHSdsFWFpkNHhYzhbkEYJb3efIGQUQIDCaFtXQ0l1KEhOfKV+G019Ary7GgbzgHAGEXUIAPABZIZ6GrGTSI+oBia7/A4gVAioWBeq58vvHlkJeNr8INBhIyy0dwwV8esJg4MBAgfGCVlKUNj/HguZIawGrqjZgLPHg5xACK1Y2YCwy8Cpdclo4/YIMIcBLANZh9YGkIPHta2NorTKxUSlUNV7Koz2zswo0mRfNNRs9fbFq8YJr5uEXLWo7cEd+6pbl9W3v3rj4g7tzRpU+7HauR0YbmJ2+dalLELZy6ude0uGh+75Zp5iXFCxZMW2Q+0IQOKsa7SMJIKH18h3y9hWY+mN4tEtW0bYT2memWpk1db7L81tQ7dgs3isUbt1rrl0kU0yy1Sza7ZCw0m4lCIzFMF2ww15+Qp1u43sRk/hJT7YJN5uaLluolPZSTvq1m4vmbgR7veM116OjBGp2K21oMbkRGnvqglnCLVharuAM6gl+toTNYPZs5doyZDXyHbx/RSvZMt6tNtx7RlzkWlcysWQySV2I+Pio008Np8mQvL/j0CEVLLIItloiEIPIFnCBDN7ZpC6n3i/erE0uXICT/t+269rVrjx4de+wrwynfjo1BaN/tXQmzJ3wIF9krghUHqN1eFB4fMvuCROrnvVwdkUeWLff2k70IiO8fs2yOabXpHHdlvX+A5rmK6dx4piXlbHunib+iNeVM+UnXFvWZjR2uleVF/jsbK12wo8OWDpY+TRH0jP8syLs0WIlOAIDhFHOP+gIA1TF3kCOBOcbaj9FjgYCJ97CEFvwt35GfKZ2Yq4j5JiGUsAC+Juu7saSZavDK1Wgs/jeaagB/Q0WUsuYutTOdIKDlmTLhATa03MskN0+G0t1vcjyETCMMArY4CLmQiuaDSSIETSgem7dBu0/G6o2REgGeJiAQSrvAkDsKSukyiaU9Bo+Zd+BTZgwxXdZHSrjFro4ZoqKlgj+VSe4UsdaVX3iDfgeR41KP8UIuNkCBfgHpxBUd8hArGj760FgVcZkjpaLbEAJTbWYHWTeltfaNvz9X9KJNIcfBSrIMhApapMAfKSOxjnJ6V6vM+29AewuEXNFR432BrLCDk0B+AhqQrqquUceljG7woR00qhQ7i5OxiKRiBwSIMlJbPMkBqdoo7RDuNfyZblxT1WZ6TbzLfbBZ53QYQglLeIRPBBB9hPTHH9oLMhQ5r5ipDFwwMRwxRezrfzAAAA==\\\") format(\\\"woff2\\\");\\n}\\n.iconfont {\\n font-family: 'iconfont' !important;\\n font-size: 16px;\\n font-style: normal;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.iconrefresh:before {\\n content: '\\\\E874';\\n}\\n.iconempty:before {\\n content: '\\\\E6A6';\\n}\\n.iconclose:before {\\n content: '\\\\E849';\\n}\\nhtml {\\n font-family: \\\"Microsoft YaHei\\\", \\\"Arial\\\";\\n font-size: 12px;\\n word-spacing: 1px;\\n word-break: break-word;\\n text-rendering: optimizeLegibility;\\n color: #333;\\n background-color: #ffffff;\\n box-sizing: border-box;\\n}\\nhtml,\\nbody {\\n -webkit-text-size-adjust: none;\\n}\\nbody,\\ndiv {\\n border: 0;\\n margin: 0;\\n padding: 0;\\n}\\n*,\\n*:before,\\n*:after {\\n box-sizing: border-box;\\n margin: 0;\\n}\\nbody,\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6,\\nhr,\\np,\\nblockquote,\\ndl,\\ndt,\\ndd,\\nul,\\nol,\\nli,\\npre,\\nform,\\nfieldset,\\nlegend,\\nbutton,\\ninput,\\ntextarea,\\nth,\\ntd,\\niframe {\\n margin: 0;\\n padding: 0;\\n}\\nimg,\\narticle,\\naside,\\ndetails,\\nfigcaption,\\nfigure,\\nfooter,\\nheader,\\nmenu,\\nnav,\\nsection,\\nsummary,\\ntime,\\nmark,\\naudio,\\nvideo {\\n display: block;\\n margin: 0;\\n padding: 0;\\n}\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n font-size: 100%;\\n}\\nfieldset,\\nimg {\\n border: 0;\\n}\\naddress,\\ncaption,\\ncite,\\ndfn,\\nem,\\nth,\\nvar,\\ni,\\nem {\\n font-style: normal;\\n font-weight: normal;\\n}\\nol,\\nul {\\n list-style: none;\\n}\\na {\\n text-decoration: none;\\n color: inherit;\\n}\\na:hover {\\n text-decoration: none;\\n}\\na,\\nlabel,\\nbutton,\\ninput,\\nselect {\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\ninput,\\nselect,\\nbutton {\\n vertical-align: baseline;\\n border-radius: 0;\\n background-color: transparent;\\n}\\nselect {\\n outline: none;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n}\\nselect::-ms-expand {\\n display: none;\\n}\\ninput {\\n background: none;\\n outline: none;\\n border: none;\\n}\\nbutton::-moz-focus-inner,\\ninput,\\ninput[type=\\\"reset\\\"]::-moz-focus-inner,\\ninput[type=\\\"button\\\"]::-moz-focus-inner,\\ninput[type=\\\"submit\\\"]::-moz-focus-inner,\\ninput[type=\\\"file\\\"] > input[type=\\\"button\\\"]::-moz-focus-inner {\\n border: none;\\n}\\ninput[type=\\\"checkbox\\\"],\\ninput[type=\\\"radio\\\"] {\\n vertical-align: middle;\\n}\\ninput[type=\\\"number\\\"]::-webkit-outer-spin-button,\\ninput[type=\\\"number\\\"]::-webkit-inner-spin-button {\\n -webkit-appearance: none !important;\\n -moz-appearance: none !important;\\n margin: 0;\\n}\\ninput:-webkit-autofill {\\n -webkit-box-shadow: 0 0 0 1000px white inset;\\n}\\ninput[type=\\\"search\\\"],\\ninput[type=\\\"tel\\\"],\\ninput[type=\\\"text\\\"],\\ninput {\\n -webkit-appearance: none;\\n /*去除系统默认的样式*/\\n -webkit-box-sizing: content-box;\\n font-size: 100%;\\n box-sizing: border-box;\\n}\\ninput::-webkit-search-decoration,\\ninput::-webkit-search-cancel-button {\\n display: none;\\n}\\n::-webkit-input-placeholder {\\n /* WebKit, Blink, Edge */\\n color: #bfbfbf;\\n opacity: 1;\\n}\\n:-moz-placeholder {\\n /* Mozilla Firefox 4 to 18 */\\n color: #bfbfbf;\\n opacity: 1;\\n}\\n::-moz-placeholder {\\n /* Mozilla Firefox 19+ */\\n color: #bfbfbf;\\n opacity: 1;\\n}\\n:-ms-input-placeholder {\\n /* Internet Explorer 10-11 */\\n color: #bfbfbf;\\n opacity: 1;\\n}\\nselect,\\ninput,\\noption {\\n color: #333333;\\n}\\ntextarea {\\n outline: none;\\n border-radius: 0;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n overflow: auto;\\n resize: none;\\n color: #333333;\\n}\\n.cOrange {\\n color: #f05a23;\\n}\\n.cGreen {\\n color: #006441;\\n}\\n.cGray {\\n color: #bfbfbf;\\n}\\n.cDark {\\n color: #dcdcdc;\\n}\\n#app {\\n border: 0;\\n margin: 0;\\n padding: 0;\\n}\\n.main-container {\\n position: relative;\\n margin: 0 auto;\\n width: 100%;\\n}\\n.main-container::after {\\n display: table;\\n content: \\\"\\\";\\n clear: both;\\n}\\n.content {\\n max-width: 1024px;\\n width: 100%;\\n margin: 0 auto;\\n}\\n.box-w {\\n max-width: 950px;\\n width: 100%;\\n margin: 0 auto;\\n}\\n.box {\\n max-width: 950px;\\n width: 100%;\\n margin: 0 auto;\\n}\\n.focus {\\n border: 1px solid #f05a23;\\n}\\n.app__width {\\n width: 750px;\\n}\\n.app__width {\\n width: 750px;\\n}\\n.app__inner {\\n margin: 20px;\\n}\\n.app__title {\\n font-size: 32px;\\n line-height: 36px;\\n font-weight: bold;\\n padding-bottom: 10px;\\n margin-bottom: 20px;\\n border-bottom: 0.5px solid #eeeeee;\\n}\\n.app__desc {\\n font-size: 24px;\\n line-height: 26px;\\n margin-bottom: 20px;\\n color: #475669;\\n}\\n.app__bgc {\\n position: fixed;\\n background-color: #ffffff;\\n width: 100%;\\n height: 100%;\\n}\\n.app__bg {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n}\\n.app__top-shadow {\\n position: fixed;\\n width: 750px;\\n height: 1px;\\n box-shadow: 0px 4px 0.9px 0.1px rgba(6, 0, 1, 0.07);\\n background-color: #ffffff;\\n}\\n.app__content {\\n position: relative;\\n}\\n.swiper-pagination-bullet {\\n width: 1rem !important;\\n height: 1rem !important;\\n}\\n.swiper-pagination-bullet-active {\\n background: #f05a23 !important;\\n}\\n.ipt:focus {\\n border-color: #f05a23 !important;\\n}\\n.ipt.err {\\n border-color: #f05a23 !important;\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT9iZjcwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiQGNoYXJzZXQgXFxcIlVURi04XFxcIjtcXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiDmlK/mjIHmlofku7ZcXG4gKiDpnIDopoHlvJXnlKjnmoTlnLDmlrnlnYfpnIDopoHliqDkuIrov5nkuKrmlK/mjIHmlofku7ZcXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyBNaW54aW5zXFxuICpcXG4gKiDlj4LogIPmlLbpm4bvvJpcXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAtc2Fzcy90cmVlL21hc3Rlci9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGluc1xcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyDlj5jph49cXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLmJpcyB7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XFxufVxcbi5mbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZmoge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLmZsYSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLmZjYyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uYmIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZ1bGxwIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucG9pbnRlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi50ZXh0LWwge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnRleHQtciB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnRleHQtYyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5iYyB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGV4MSB7XFxuICBmbGV4OiAxO1xcbn1cXG5cXG4vKiDlm77niYflrZfkvZMgKi9cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnO1xcbiAgc3JjOiB1cmwoXFxcImRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFBU0VBQXNBQUFBQUNTQUFBQVEzQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIRUlHVmdDRFNBcUZHSVFuQVRZQ0pBTVlDdzRBQkNBRmhHMEhWQnZaQnhHVm5OdklmaHpZRFYrQkFlOXd0SmlHT05UR1l1SEJaL09oNzdRM094dXBJdE9lRkZUY1FqcFJYd0srQUlibjA4bmU3NjZYcHBzaXdSS1Brc1FUajdBTzR4QU92M2ZPQWRzSmMwS05aTzNJbzg5TGY4SzlCa1krY2UrNGRmNERtcyt5WE1hY05OYkVBT09BQXRyYkYxbUJ4QWxxeS9EcTh1cXdyZ01CaVBHQUQ0ZzZkYmdHUWhTc2VRUkFLc3RLOGlGTW1GQVZCTUhTZHNGV0Zwa05IaFl6aGJrRVlKYjNlZklHUVVRSURDYUZ0WFEwbDFLRWhPZktWK0cwMTlBcnk3R2diemdIQUdFWFVJQVBBQlpJWjZHckdUU0krb0JpYTcvQTRnVkFpb1dCZXE1OHZ2SGxrSmVOcjhJTkJoSXl5MGR3d1Y4ZXNKZzRNQkFnZkdDVmxLVU5qL0hndVpJYXdHcnFqWmdMUEhnNXhBQ0sxWTJZQ3d5OENwZGNsbzQvWUlNSWNCTEFOWmg5WUdrSVBIdGEyTm9yVEt4VVNsVU5WN0tvejJ6c3dvMG1SZk5OUnM5ZmJGcThZSnI1dUVYTFdvN2NFZCs2cGJsOVczdjNyajRnN3R6UnBVKzdIYXVSMFlibUoyK2RhbExFTFp5NnVkZTB1R2grNzVacDVpWEZDeFpNVzJRKzBJUU9Lc2E3U01KSUtIMThoM3k5aFdZK21ONHRFdFcwYllUMm1lbVdwazFkYjdMODF0UTdkZ3MzaXNVYnQxcnJsMGtVMHl5MVN6YTdaQ3cwbTRsQ0l6Rk1GMnd3MTUrUXAxdTQzc1JrL2hKVDdZSk41dWFMbHVvbFBaU1R2cTFtNHZtYmdSN3ZlTTExNk9qQkdwMksyMW9NYmtSR252cWdsbkNMVmhhcnVBTTZnbCt0b1ROWVBaczVkb3laRFh5SGJ4L1JTdlpNdDZ0TnR4N1JsemtXbGN5c1dReVNWMkkrUGlvMDA4TnA4bVF2TC9qMENFVkxMSUl0bG9pRUlQSUZuQ0JETjdacEM2bjNpL2VyRTB1WElDVC90KzI2OXJWcmp4NGRlK3dyd3luZmpvMUJhTi90WFFtekozd0lGOWtyZ2hVSHFOMWVGQjRmTXZ1Q1JPcm52Vndka1VlV0xmZjJrNzBJaU84ZnMyeU9hYlhwSEhkbHZYK0E1cm1LNmR4NHBpWGxiSHVuaWIraU5lVk0rVW5YRnZXWmpSMnVsZVZGL2pzYksxMndvOE9XRHBZK1RSSDBqUDhzeUxzMFdJbE9BSURoRkhPUCtnSUExVEYza0NPQk9jYmFqOUZqZ1lDSjk3Q0VGdnd0MzVHZktaMllxNGo1SmlHVXNBQytKdXU3c2FTWmF2REsxV2dzL2plYWFnQi9RMFdVc3VZdXRUT2RJS0RsbVRMaEFUYTAzTXNrTjArRzB0MXZjanlFVENNTUFyWTRDTG1RaXVhRFNTSUVUU2dlbTdkQnUwL0c2bzJSRWdHZUppQVFTcnZBa0RzS1N1a3lpYVU5Qm8rWmQrQlRaZ3d4WGRaSFNyakZybzRab3FLbGdqK1ZTZTRVc2RhVlgzaURmZ2VSNDFLUDhVSXVOa0NCZmdIcHhCVWQ4aEFyR2o3NjBGZ1ZjWmtqcGFMYkVBSlRiV1lIV1RlbHRmYU52ejlYOUtKTkljZkJTcklNaEFwYXBNQWZLU094am5KNlY2dk0rMjlBZXd1RVhORlI0MzJCckxDRGswQitBaHFRcnFxdVVjZWxqRzd3b1IwMHFoUTdpNU94aUtSaUJ3U0lNbEpiUE1rQnFkb283UkR1TmZ5WmJseFQxV1o2VGJ6TGZiQlo1M1FZUWdsTGVJUlBCQkI5aFBUSEg5b0xNaFE1cjVpcERGd3dNUnd4UmV6cmZ6QUFBQT09XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO1xcbn1cXG4uaWNvbmZvbnQge1xcbiAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG59XFxuLmljb25yZWZyZXNoOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NzQnO1xcbn1cXG4uaWNvbmVtcHR5OmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU2QTYnO1xcbn1cXG4uaWNvbmNsb3NlOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NDknO1xcbn1cXG5odG1sIHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiTWljcm9zb2Z0IFlhSGVpXFxcIiwgXFxcIkFyaWFsXFxcIjtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIHdvcmQtc3BhY2luZzogMXB4O1xcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcXG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XFxuICBjb2xvcjogIzMzMztcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5odG1sLFxcbmJvZHkge1xcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBub25lO1xcbn1cXG5ib2R5LFxcbmRpdiB7XFxuICBib3JkZXI6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4qLFxcbio6YmVmb3JlLFxcbio6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG1hcmdpbjogMDtcXG59XFxuYm9keSxcXG5oMSxcXG5oMixcXG5oMyxcXG5oNCxcXG5oNSxcXG5oNixcXG5ocixcXG5wLFxcbmJsb2NrcXVvdGUsXFxuZGwsXFxuZHQsXFxuZGQsXFxudWwsXFxub2wsXFxubGksXFxucHJlLFxcbmZvcm0sXFxuZmllbGRzZXQsXFxubGVnZW5kLFxcbmJ1dHRvbixcXG5pbnB1dCxcXG50ZXh0YXJlYSxcXG50aCxcXG50ZCxcXG5pZnJhbWUge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuaW1nLFxcbmFydGljbGUsXFxuYXNpZGUsXFxuZGV0YWlscyxcXG5maWdjYXB0aW9uLFxcbmZpZ3VyZSxcXG5mb290ZXIsXFxuaGVhZGVyLFxcbm1lbnUsXFxubmF2LFxcbnNlY3Rpb24sXFxuc3VtbWFyeSxcXG50aW1lLFxcbm1hcmssXFxuYXVkaW8sXFxudmlkZW8ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5oMSxcXG5oMixcXG5oMyxcXG5oNCxcXG5oNSxcXG5oNiB7XFxuICBmb250LXNpemU6IDEwMCU7XFxufVxcbmZpZWxkc2V0LFxcbmltZyB7XFxuICBib3JkZXI6IDA7XFxufVxcbmFkZHJlc3MsXFxuY2FwdGlvbixcXG5jaXRlLFxcbmRmbixcXG5lbSxcXG50aCxcXG52YXIsXFxuaSxcXG5lbSB7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG5vbCxcXG51bCB7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5hIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbn1cXG5hOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5hLFxcbmxhYmVsLFxcbmJ1dHRvbixcXG5pbnB1dCxcXG5zZWxlY3Qge1xcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xcbn1cXG5pbnB1dCxcXG5zZWxlY3QsXFxuYnV0dG9uIHtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuc2VsZWN0IHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbnNlbGVjdDo6LW1zLWV4cGFuZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5pbnB1dCB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxcbmlucHV0LFxcbmlucHV0W3R5cGU9XFxcInJlc2V0XFxcIl06Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXRbdHlwZT1cXFwiYnV0dG9uXFxcIl06Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXRbdHlwZT1cXFwic3VibWl0XFxcIl06Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXRbdHlwZT1cXFwiZmlsZVxcXCJdID4gaW5wdXRbdHlwZT1cXFwiYnV0dG9uXFxcIl06Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5pbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdLFxcbmlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0ge1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuaW5wdXRbdHlwZT1cXFwibnVtYmVyXFxcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuaW5wdXRbdHlwZT1cXFwibnVtYmVyXFxcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lICFpbXBvcnRhbnQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IG5vbmUgIWltcG9ydGFudDtcXG4gIG1hcmdpbjogMDtcXG59XFxuaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAwIDEwMDBweCB3aGl0ZSBpbnNldDtcXG59XFxuaW5wdXRbdHlwZT1cXFwic2VhcmNoXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwidGVsXFxcIl0sXFxuaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLFxcbmlucHV0IHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC8q5Y676Zmk57O757uf6buY6K6k55qE5qC35byPKi9cXG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5pbnB1dDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixcXG5pbnB1dDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogV2ViS2l0LCBCbGluaywgRWRnZSAqL1xcbiAgY29sb3I6ICNiZmJmYmY7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG46LW1vei1wbGFjZWhvbGRlciB7XFxuICAvKiBNb3ppbGxhIEZpcmVmb3ggNCB0byAxOCAqL1xcbiAgY29sb3I6ICNiZmJmYmY7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG46Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogTW96aWxsYSBGaXJlZm94IDE5KyAqL1xcbiAgY29sb3I6ICNiZmJmYmY7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG46LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIC8qIEludGVybmV0IEV4cGxvcmVyIDEwLTExICovXFxuICBjb2xvcjogI2JmYmZiZjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbnNlbGVjdCxcXG5pbnB1dCxcXG5vcHRpb24ge1xcbiAgY29sb3I6ICMzMzMzMzM7XFxufVxcbnRleHRhcmVhIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICByZXNpemU6IG5vbmU7XFxuICBjb2xvcjogIzMzMzMzMztcXG59XFxuLmNPcmFuZ2Uge1xcbiAgY29sb3I6ICNmMDVhMjM7XFxufVxcbi5jR3JlZW4ge1xcbiAgY29sb3I6ICMwMDY0NDE7XFxufVxcbi5jR3JheSB7XFxuICBjb2xvcjogI2JmYmZiZjtcXG59XFxuLmNEYXJrIHtcXG4gIGNvbG9yOiAjZGNkY2RjO1xcbn1cXG4jYXBwIHtcXG4gIGJvcmRlcjogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi5tYWluLWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG4ubWFpbi1jb250YWluZXI6OmFmdGVyIHtcXG4gICAgZGlzcGxheTogdGFibGU7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICBjbGVhcjogYm90aDtcXG59XFxuLmNvbnRlbnQge1xcbiAgbWF4LXdpZHRoOiAxMDI0cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG4uYm94LXcge1xcbiAgbWF4LXdpZHRoOiA5NTBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcbi5ib3gge1xcbiAgbWF4LXdpZHRoOiA5NTBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxufVxcbi5mb2N1cyB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZjA1YTIzO1xcbn1cXG4uYXBwX193aWR0aCB7XFxuICB3aWR0aDogNzUwcHg7XFxufVxcbi5hcHBfX3dpZHRoIHtcXG4gIHdpZHRoOiA3NTBweDtcXG59XFxuLmFwcF9faW5uZXIge1xcbiAgbWFyZ2luOiAyMHB4O1xcbn1cXG4uYXBwX190aXRsZSB7XFxuICBmb250LXNpemU6IDMycHg7XFxuICBsaW5lLWhlaWdodDogMzZweDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XFxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xcbiAgYm9yZGVyLWJvdHRvbTogMC41cHggc29saWQgI2VlZWVlZTtcXG59XFxuLmFwcF9fZGVzYyB7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICBsaW5lLWhlaWdodDogMjZweDtcXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XFxuICBjb2xvcjogIzQ3NTY2OTtcXG59XFxuLmFwcF9fYmdjIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLmFwcF9fYmcge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5hcHBfX3RvcC1zaGFkb3cge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgd2lkdGg6IDc1MHB4O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBib3gtc2hhZG93OiAwcHggNHB4IDAuOXB4IDAuMXB4IHJnYmEoNiwgMCwgMSwgMC4wNyk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xcbn1cXG4uYXBwX19jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICB3aWR0aDogMXJlbSAhaW1wb3J0YW50O1xcbiAgaGVpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICNmMDVhMjMgIWltcG9ydGFudDtcXG59XFxuLmlwdDpmb2N1cyB7XFxuICBib3JkZXItY29sb3I6ICNmMDVhMjMgIWltcG9ydGFudDtcXG59XFxuLmlwdC5lcnIge1xcbiAgYm9yZGVyLWNvbG9yOiAjZjA1YTIzICFpbXBvcnRhbnQ7XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&":
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& ***!
\********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("exports = module.exports = __webpack_require__(/*! ../../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n/**\\n * ------------------------------------------------------------------\\n * 支持文件\\n * 需要引用的地方均需要加上这个支持文件\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass Minxins\\n *\\n * 参考收集:\\n * https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass 变量\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n.bis[data-v-3b4f35af] {\\n background-repeat: no-repeat;\\n background-size: 100% 100%;\\n}\\n.fl[data-v-3b4f35af] {\\n display: flex;\\n}\\n.fj[data-v-3b4f35af] {\\n display: flex;\\n justify-content: space-between;\\n}\\n.fla[data-v-3b4f35af] {\\n display: flex;\\n align-items: center;\\n}\\n.fcc[data-v-3b4f35af] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.bb[data-v-3b4f35af] {\\n box-sizing: border-box;\\n}\\n.fullp[data-v-3b4f35af] {\\n width: 100%;\\n height: 100%;\\n}\\n.pointer[data-v-3b4f35af] {\\n cursor: pointer;\\n}\\n.text-l[data-v-3b4f35af] {\\n text-align: left;\\n}\\n.text-r[data-v-3b4f35af] {\\n text-align: right;\\n}\\n.text-c[data-v-3b4f35af] {\\n text-align: center;\\n}\\n.bc[data-v-3b4f35af] {\\n text-align: center;\\n}\\n.flex1[data-v-3b4f35af] {\\n flex: 1;\\n}\\n\\n/* 图片字体 */\\n@font-face {\\n font-family: 'iconfont';\\n src: url(\\\"data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAASEAAsAAAAACSAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDSAqFGIQnATYCJAMYCw4ABCAFhG0HVBvZBxGVnNvIfhzYDV+BAe9wtJiGONTGYuHBZ/Oh77Q3OxupItOeFFTcQjpRXwK+AIbn08ne766XppsiwRKPksQTj7AO4xAOv3fOAdsJc0KNZO3Io89Lf8K9BkY+ce+4df4Dms+yXMacNNbEAOOAAtrbF1mBxAlqy/Dq8uqwrgMBiPGAD4g6dbgGQhSseQRAKstK8iFMmFAVBMHSdsFWFpkNHhYzhbkEYJb3efIGQUQIDCaFtXQ0l1KEhOfKV+G019Ary7GgbzgHAGEXUIAPABZIZ6GrGTSI+oBia7/A4gVAioWBeq58vvHlkJeNr8INBhIyy0dwwV8esJg4MBAgfGCVlKUNj/HguZIawGrqjZgLPHg5xACK1Y2YCwy8Cpdclo4/YIMIcBLANZh9YGkIPHta2NorTKxUSlUNV7Koz2zswo0mRfNNRs9fbFq8YJr5uEXLWo7cEd+6pbl9W3v3rj4g7tzRpU+7HauR0YbmJ2+dalLELZy6ude0uGh+75Zp5iXFCxZMW2Q+0IQOKsa7SMJIKH18h3y9hWY+mN4tEtW0bYT2memWpk1db7L81tQ7dgs3isUbt1rrl0kU0yy1Sza7ZCw0m4lCIzFMF2ww15+Qp1u43sRk/hJT7YJN5uaLluolPZSTvq1m4vmbgR7veM116OjBGp2K21oMbkRGnvqglnCLVharuAM6gl+toTNYPZs5doyZDXyHbx/RSvZMt6tNtx7RlzkWlcysWQySV2I+Pio008Np8mQvL/j0CEVLLIItloiEIPIFnCBDN7ZpC6n3i/erE0uXICT/t+269rVrjx4de+wrwynfjo1BaN/tXQmzJ3wIF9krghUHqN1eFB4fMvuCROrnvVwdkUeWLff2k70IiO8fs2yOabXpHHdlvX+A5rmK6dx4piXlbHunib+iNeVM+UnXFvWZjR2uleVF/jsbK12wo8OWDpY+TRH0jP8syLs0WIlOAIDhFHOP+gIA1TF3kCOBOcbaj9FjgYCJ97CEFvwt35GfKZ2Yq4j5JiGUsAC+Juu7saSZavDK1Wgs/jeaagB/Q0WUsuYutTOdIKDlmTLhATa03MskN0+G0t1vcjyETCMMArY4CLmQiuaDSSIETSgem7dBu0/G6o2REgGeJiAQSrvAkDsKSukyiaU9Bo+Zd+BTZgwxXdZHSrjFro4ZoqKlgj+VSe4UsdaVX3iDfgeR41KP8UIuNkCBfgHpxBUd8hArGj760FgVcZkjpaLbEAJTbWYHWTeltfaNvz9X9KJNIcfBSrIMhApapMAfKSOxjnJ6V6vM+29AewuEXNFR432BrLCDk0B+AhqQrqquUceljG7woR00qhQ7i5OxiKRiBwSIMlJbPMkBqdoo7RDuNfyZblxT1WZ6TbzLfbBZ53QYQglLeIRPBBB9hPTHH9oLMhQ5r5ipDFwwMRwxRezrfzAAAA==\\\") format(\\\"woff2\\\");\\n}\\n.iconfont[data-v-3b4f35af] {\\n font-family: 'iconfont' !important;\\n font-size: 16px;\\n font-style: normal;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.iconrefresh[data-v-3b4f35af]:before {\\n content: '\\\\E874';\\n}\\n.iconempty[data-v-3b4f35af]:before {\\n content: '\\\\E6A6';\\n}\\n.iconclose[data-v-3b4f35af]:before {\\n content: '\\\\E849';\\n}\\n.drop-list[data-v-3b4f35af] {\\n display: inline-block;\\n min-width: 6.25rem;\\n position: relative;\\n margin: 0 1rem;\\n}\\n.drop-list .list[data-v-3b4f35af] {\\n position: absolute;\\n width: 100%;\\n}\\n.drop-list .list .space[data-v-3b4f35af] {\\n height: 1.5rem;\\n}\\n.drop-list span[data-v-3b4f35af] {\\n display: block;\\n text-align: center;\\n}\\n.drop-list ul[data-v-3b4f35af] {\\n display: none;\\n overflow: hidden;\\n box-shadow: 0 0 1.5rem 0 rgba(255, 87, 0, 0.15);\\n border-radius: .5rem;\\n}\\n.drop-list ul li[data-v-3b4f35af] {\\n border-bottom: solid 1px #f1f1f1;\\n background: #ffffff;\\n text-align: center;\\n padding: 1.5rem 0;\\n}\\n.drop-list ul li[data-v-3b4f35af]:last-child {\\n border-bottom: none;\\n}\\n.drop-list ul li[data-v-3b4f35af]:hover {\\n color: #ec6429;\\n}\\n.user[data-v-3b4f35af] {\\n width: 7.333333rem;\\n height: 2.25rem;\\n background-color: #f05a23;\\n border-radius: 1.333333rem;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: #ffffff;\\n}\\n.user span[data-v-3b4f35af] {\\n max-width: 4.25rem;\\n /* 51/12 */\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n.user .icon-img[data-v-3b4f35af] {\\n margin: 0 .5rem;\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT83NGE4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikoZmFsc2UpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiQGNoYXJzZXQgXFxcIlVURi04XFxcIjtcXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiDmlK/mjIHmlofku7ZcXG4gKiDpnIDopoHlvJXnlKjnmoTlnLDmlrnlnYfpnIDopoHliqDkuIrov5nkuKrmlK/mjIHmlofku7ZcXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyBNaW54aW5zXFxuICpcXG4gKiDlj4LogIPmlLbpm4bvvJpcXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAtc2Fzcy90cmVlL21hc3Rlci9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGluc1xcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLyoqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICogU2FzcyDlj5jph49cXG4gKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqXFxuICovXFxuLmJpc1tkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTtcXG59XFxuLmZsW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZqW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuLmZsYVtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uZmNjW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLmJiW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZ1bGxwW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5wb2ludGVyW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udGV4dC1sW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnRleHQtcltkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG4udGV4dC1jW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uYmNbZGF0YS12LTNiNGYzNWFmXSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGV4MVtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGZsZXg6IDE7XFxufVxcblxcbi8qIOWbvueJh+Wtl+S9kyAqL1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdpY29uZm9udCc7XFxuICBzcmM6IHVybChcXFwiZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUFTRUFBc0FBQUFBQ1NBQUFBUTNBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhFSUdWZ0NEU0FxRkdJUW5BVFlDSkFNWUN3NEFCQ0FGaEcwSFZCdlpCeEdWbk52SWZoellEVitCQWU5d3RKaUdPTlRHWXVIQlovT2g3N1EzT3h1cEl0T2VGRlRjUWpwUlh3SytBSWJuMDhuZTc2NlhwcHNpd1JLUGtzUVRqN0FPNHhBT3YzZk9BZHNKYzBLTlpPM0lvODlMZjhLOUJrWStjZSs0ZGY0RG1zK3lYTWFjTk5iRUFPT0FBdHJiRjFtQnhBbHF5L0RxOHVxd3JnTUJpUEdBRDRnNmRiZ0dRaFNzZVFSQUtzdEs4aUZNbUZBVkJNSFNkc0ZXRnBrTkhoWXpoYmtFWUpiM2VmSUdRVVFJRENhRnRYUTBsMUtFaE9mS1YrRzAxOUFyeTdHZ2J6Z0hBR0VYVUlBUEFCWklaNkdyR1RTSStvQmlhNy9BNGdWQWlvV0JlcTU4dnZIbGtKZU5yOElOQmhJeXkwZHd3Vjhlc0pnNE1CQWdmR0NWbEtVTmovSGd1Wklhd0dycWpaZ0xQSGc1eEFDSzFZMllDd3k4Q3BkY2xvNC9ZSU1JY0JMQU5aaDlZR2tJUEh0YTJOb3JUS3hVU2xVTlY3S296Mnpzd28wbVJmTk5SczlmYkZxOFlKcjV1RVhMV283Y0VkKzZwYmw5VzN2M3JqNGc3dHpScFUrN0hhdVIwWWJtSjIrZGFsTEVMWnk2dWRlMHVHaCs3NVpwNWlYRkN4Wk1XMlErMElRT0tzYTdTTUpJS0gxOGgzeTloV1krbU40dEV0VzBiWVQybWVtV3BrMWRiN0w4MXRRN2RnczNpc1VidDFycmwwa1UweXkxU3phN1pDdzBtNGxDSXpGTUYyd3cxNStRcDF1NDNzUmsvaEpUN1lKTjV1YUxsdW9sUFpTVHZxMW00dm1iZ1I3dmVNMTE2T2pCR3AySzIxb01ia1JHbnZxZ2xuQ0xWaGFydUFNNmdsK3RvVE5ZUFpzNWRveVpEWHlIYngvUlN2Wk10NnROdHg3Umx6a1dsY3lzV1F5U1YySStQaW8wMDhOcDhtUXZML2owQ0VWTExJSXRsb2lFSVBJRm5DQkRON1pwQzZuM2kvZXJFMHVYSUNUL3QrMjY5clZyang0ZGUrd3J3eW5mam8xQmFOL3RYUW16SjN3SUY5a3JnaFVIcU4xZUZCNGZNdnVDUk9ybnZWd2RrVWVXTGZmMms3MElpTzhmczJ5T2FiWHBISGRsdlgrQTVybUs2ZHg0cGlYbGJIdW5pYitpTmVWTStVblhGdldaalIydWxlVkYvanNiSzEyd284T1dEcFkrVFJIMGpQOHN5THMwV0lsT0FJRGhGSE9QK2dJQTFURjNrQ09CT2NiYWo5RmpnWUNKOTdDRUZ2d3QzNUdmS1oyWXE0ajVKaUdVc0FDK0p1dTdzYVNaYXZESzFXZ3MvamVhYWdCL1EwV1VzdVl1dFRPZElLRGxtVExoQVRhMDNNc2tOMCtHMHQxdmNqeUVUQ01NQXJZNENMbVFpdWFEU1NJRVRTZ2VtN2RCdTAvRzZvMlJFZ0dlSmlBUVNydkFrRHNLU3VreWlhVTlCbytaZCtCVFpnd3hYZFpIU3JqRnJvNFpvcUtsZ2orVlNlNFVzZGFWWDNpRGZnZVI0MUtQOFVJdU5rQ0JmZ0hweEJVZDhoQXJHajc2MEZnVmNaa2pwYUxiRUFKVGJXWUhXVGVsdGZhTnZ6OVg5S0pOSWNmQlNySU1oQXBhcE1BZktTT3hqbko2VjZ2TSsyOUFld3VFWE5GUjQzMkJyTENEazBCK0FocVFycXF1VWNlbGpHN3dvUjAwcWhRN2k1T3hpS1JpQndTSU1sSmJQTWtCcWRvbzdSRHVOZnlaYmx4VDFXWjZUYnpMZmJCWjUzUVlRZ2xMZUlSUEJCQjloUFRISDlvTE1oUTVyNWlwREZ3d01Sd3hSZXpyZnpBQUFBPT1cXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7XFxufVxcbi5pY29uZm9udFtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnICFpbXBvcnRhbnQ7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxufVxcbi5pY29ucmVmcmVzaFtkYXRhLXYtM2I0ZjM1YWZdOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NzQnO1xcbn1cXG4uaWNvbmVtcHR5W2RhdGEtdi0zYjRmMzVhZl06YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdcXFxcRTZBNic7XFxufVxcbi5pY29uY2xvc2VbZGF0YS12LTNiNGYzNWFmXTpiZWZvcmUge1xcbiAgY29udGVudDogJ1xcXFxFODQ5JztcXG59XFxuLmRyb3AtbGlzdFtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1pbi13aWR0aDogNi4yNXJlbTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIG1hcmdpbjogMCAxcmVtO1xcbn1cXG4uZHJvcC1saXN0IC5saXN0W2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAxMDAlO1xcbn1cXG4uZHJvcC1saXN0IC5saXN0IC5zcGFjZVtkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gICAgICBoZWlnaHQ6IDEuNXJlbTtcXG59XFxuLmRyb3AtbGlzdCBzcGFuW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uZHJvcC1saXN0IHVsW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBib3gtc2hhZG93OiAwIDAgMS41cmVtIDAgcmdiYSgyNTUsIDg3LCAwLCAwLjE1KTtcXG4gICAgYm9yZGVyLXJhZGl1czogLjVyZW07XFxufVxcbi5kcm9wLWxpc3QgdWwgbGlbZGF0YS12LTNiNGYzNWFmXSB7XFxuICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNmMWYxZjE7XFxuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgcGFkZGluZzogMS41cmVtIDA7XFxufVxcbi5kcm9wLWxpc3QgdWwgbGlbZGF0YS12LTNiNGYzNWFmXTpsYXN0LWNoaWxkIHtcXG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG4uZHJvcC1saXN0IHVsIGxpW2RhdGEtdi0zYjRmMzVhZl06aG92ZXIge1xcbiAgICAgIGNvbG9yOiAjZWM2NDI5O1xcbn1cXG4udXNlcltkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gIHdpZHRoOiA3LjMzMzMzM3JlbTtcXG4gIGhlaWdodDogMi4yNXJlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMDVhMjM7XFxuICBib3JkZXItcmFkaXVzOiAxLjMzMzMzM3JlbTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBjb2xvcjogI2ZmZmZmZjtcXG59XFxuLnVzZXIgc3BhbltkYXRhLXYtM2I0ZjM1YWZdIHtcXG4gICAgbWF4LXdpZHRoOiA0LjI1cmVtO1xcbiAgICAvKiA1MS8xMiAqL1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuLnVzZXIgLmljb24taW1nW2RhdGEtdi0zYjRmMzVhZl0ge1xcbiAgICBtYXJnaW46IDAgLjVyZW07XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("exports = module.exports = __webpack_require__(/*! ../../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \".bis[data-v-f678fc22] {\\n background-repeat: no-repeat;\\n background-size: 100% 100%;\\n}\\n.fl[data-v-f678fc22] {\\n display: flex;\\n}\\n.fj[data-v-f678fc22] {\\n display: flex;\\n justify-content: space-between;\\n}\\n.fla[data-v-f678fc22] {\\n display: flex;\\n align-items: center;\\n}\\n.fcc[data-v-f678fc22] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.bb[data-v-f678fc22] {\\n box-sizing: border-box;\\n}\\n.fullp[data-v-f678fc22] {\\n width: 100%;\\n height: 100%;\\n}\\n.pointer[data-v-f678fc22] {\\n cursor: pointer;\\n}\\n.text-l[data-v-f678fc22] {\\n text-align: left;\\n}\\n.text-r[data-v-f678fc22] {\\n text-align: right;\\n}\\n.text-c[data-v-f678fc22] {\\n text-align: center;\\n}\\n.bc[data-v-f678fc22] {\\n text-align: center;\\n}\\n.flex1[data-v-f678fc22] {\\n flex: 1;\\n}\\n.v-footer[data-v-f678fc22] {\\n font-family: MicrosoftYaHei;\\n color: #ffffff;\\n background-color: #2e2b2a;\\n}\\n.v-footer .footer-containter[data-v-f678fc22] {\\n margin: 0 auto;\\n}\\n.v-footer .footer-containter .cont[data-v-f678fc22] {\\n margin-left: 3.166667rem;\\n}\\n.v-footer .footer-containter .cont .logo-wrap[data-v-f678fc22] {\\n padding: 1.75rem 0;\\n}\\n.v-footer .footer-containter .cont .logo-wrap .logo-img[data-v-f678fc22] {\\n cursor: pointer;\\n}\\n.v-footer .footer-containter .cont .line[data-v-f678fc22] {\\n width: 100%;\\n height: 1px;\\n opacity: 0.2;\\n background-color: #ffffff;\\n}\\n.v-footer .footer-containter .cont .info[data-v-f678fc22] {\\n padding: 1.25rem 0 1.5rem;\\n display: flex;\\n}\\n.v-footer .footer-containter .cont .info .hotline[data-v-f678fc22] {\\n min-width: 280px;\\n}\\n.v-footer .footer-containter .cont .info .hotline .contact .n-item[data-v-f678fc22] {\\n margin-bottom: 0.6rem;\\n}\\n.v-footer .footer-containter .cont .info .hotline .contact .phone[data-v-f678fc22] {\\n color: #ea5a26;\\n font-size: 1.666667rem;\\n font-weight: bold;\\n}\\n.v-footer .footer-containter .cont .info .hotline .contact[data-v-f678fc22]:first-child {\\n margin-bottom: 2rem;\\n}\\n.v-footer .footer-containter .cont .info .nav[data-v-f678fc22] {\\n flex: 1;\\n display: flex;\\n}\\n.v-footer .footer-containter .cont .info .nav .n-item[data-v-f678fc22] {\\n cursor: pointer;\\n min-width: 14rem;\\n}\\n.v-footer .footer-containter .cont .info .public[data-v-f678fc22] {\\n width: 6.25rem;\\n text-align: center;\\n margin-right: 3rem;\\n}\\n.v-footer .footer-containter .cont .info .public .qrcode[data-v-f678fc22] {\\n margin-top: .75rem;\\n}\\n.v-footer .footer-containter .cont .info .n-item[data-v-f678fc22] {\\n margin-bottom: 1.416667rem;\\n color: rgba(179, 177, 168, 0.5);\\n}\\n.v-footer .footer-containter .cont .info .n-item[data-v-f678fc22]:first-child {\\n color: #ffffff;\\n margin-bottom: 2rem;\\n}\\n.v-footer .footer-containter .cont .info .n-item[data-v-f678fc22]:last-child {\\n margin-bottom: 0;\\n}\\n.v-footer .footer-containter .cont .copyright[data-v-f678fc22] {\\n color: rgba(179, 177, 168, 0.5);\\n padding: 1.5rem 0;\\n line-height: 1.58;\\n}\\n@media (max-width: 950px) {\\n.v-footer .footer-containter .cont .info[data-v-f678fc22] {\\n display: block;\\n}\\n.v-footer .footer-containter .cont .info .nav[data-v-f678fc22] {\\n margin-top: 2rem;\\n display: flex;\\n}\\n.v-footer .footer-containter .cont .info .nav .nav-v[data-v-f678fc22] {\\n width: 100%;\\n}\\n.v-footer .footer-containter .cont .info .nav .n-item[data-v-f678fc22] {\\n min-width: 0;\\n}\\n.v-footer .footer-containter .cont .info .focus[data-v-f678fc22] {\\n margin-top: 2rem;\\n text-align: left;\\n}\\n.v-footer .footer-containter .cont .copyright[data-v-f678fc22] {\\n box-sizing: border-box;\\n padding-right: 2rem;\\n}\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/NzhjZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5iaXNbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XFxufVxcbi5mbFtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcbi5maltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcbi5mbGFbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuLmZjY1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5iYltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi5mdWxscFtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucG9pbnRlcltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnRleHQtbFtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcbi50ZXh0LXJbZGF0YS12LWY2NzhmYzIyXSB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnRleHQtY1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmJjW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uZmxleDFbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBmbGV4OiAxO1xcbn1cXG4udi1mb290ZXJbZGF0YS12LWY2NzhmYzIyXSB7XFxuICBmb250LWZhbWlseTogTWljcm9zb2Z0WWFIZWk7XFxuICBjb2xvcjogI2ZmZmZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyZTJiMmE7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXJbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgIG1hcmdpbjogMCBhdXRvO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250W2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgIG1hcmdpbi1sZWZ0OiAzLjE2NjY2N3JlbTtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAubG9nby13cmFwW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgICAgcGFkZGluZzogMS43NXJlbSAwO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5sb2dvLXdyYXAgLmxvZ28taW1nW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmxpbmVbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICB3aWR0aDogMTAwJTtcXG4gICAgICAgIGhlaWdodDogMXB4O1xcbiAgICAgICAgb3BhY2l0eTogMC4yO1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mb1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgIHBhZGRpbmc6IDEuMjVyZW0gMCAxLjVyZW07XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgICAgICBtaW4td2lkdGg6IDI4MHB4O1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lIC5jb250YWN0IC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC42cmVtO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lIC5jb250YWN0IC5waG9uZVtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgICBjb2xvcjogI2VhNWEyNjtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEuNjY2NjY3cmVtO1xcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5ob3RsaW5lIC5jb250YWN0W2RhdGEtdi1mNjc4ZmMyMl06Zmlyc3QtY2hpbGQge1xcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDJyZW07XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm5hdltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgZmxleDogMTtcXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mbyAubmF2IC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTRyZW07XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLnB1YmxpY1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgd2lkdGg6IDYuMjVyZW07XFxuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcmVtO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5wdWJsaWMgLnFyY29kZVtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAuNzVyZW07XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm4taXRlbVtkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMS40MTY2NjdyZW07XFxuICAgICAgICAgIGNvbG9yOiByZ2JhKDE3OSwgMTc3LCAxNjgsIDAuNSk7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm4taXRlbVtkYXRhLXYtZjY3OGZjMjJdOmZpcnN0LWNoaWxkIHtcXG4gICAgICAgICAgICBjb2xvcjogI2ZmZmZmZjtcXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAycmVtO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5pbmZvIC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXTpsYXN0LWNoaWxkIHtcXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4udi1mb290ZXIgLmZvb3Rlci1jb250YWludGVyIC5jb250IC5jb3B5cmlnaHRbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICBjb2xvcjogcmdiYSgxNzksIDE3NywgMTY4LCAwLjUpO1xcbiAgICAgICAgcGFkZGluZzogMS41cmVtIDA7XFxuICAgICAgICBsaW5lLWhlaWdodDogMS41ODtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDk1MHB4KSB7XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mb1tkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm5hdltkYXRhLXYtZjY3OGZjMjJdIHtcXG4gICAgICBtYXJnaW4tdG9wOiAycmVtO1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLm5hdiAubmF2LXZbZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICB3aWR0aDogMTAwJTtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuaW5mbyAubmF2IC5uLWl0ZW1bZGF0YS12LWY2NzhmYzIyXSB7XFxuICAgICAgICBtaW4td2lkdGg6IDA7XFxufVxcbi52LWZvb3RlciAuZm9vdGVyLWNvbnRhaW50ZXIgLmNvbnQgLmluZm8gLmZvY3VzW2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICAgIG1hcmdpbi10b3A6IDJyZW07XFxuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnYtZm9vdGVyIC5mb290ZXItY29udGFpbnRlciAuY29udCAuY29weXJpZ2h0W2RhdGEtdi1mNjc4ZmMyMl0ge1xcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xcbn1cXG59XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("exports = module.exports = __webpack_require__(/*! ../../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \".v-header[data-v-6fba8daf] {\\n height: 5.833333rem;\\n background-color: #fff;\\n color: #4c4948;\\n position: relative;\\n z-index: 11;\\n}\\n.v-header .header-container[data-v-6fba8daf] {\\n max-width: 950px;\\n height: 100%;\\n margin: auto;\\n display: flex;\\n align-items: center;\\n position: relative;\\n}\\n.v-header .main-nav[data-v-6fba8daf] {\\n height: 100%;\\n flex: 1 0 auto;\\n}\\n.v-header .logo-img[data-v-6fba8daf] {\\n margin-right: 2rem;\\n cursor: pointer;\\n}\\n.v-header .nav-list[data-v-6fba8daf] {\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n position: relative;\\n}\\n.v-header .nav-item[data-v-6fba8daf] {\\n display: flex;\\n align-items: center;\\n height: 100%;\\n margin: 0;\\n font-size: 1rem;\\n -ms-flex-pack: center;\\n justify-content: center;\\n position: relative;\\n cursor: pointer;\\n}\\n.v-header .main-nav-list[data-v-6fba8daf] {\\n display: flex;\\n cursor: pointer;\\n}\\n.v-header .nav-item.link-item[data-v-6fba8daf] {\\n padding: 0 50px;\\n height: 5rem;\\n}\\n.v-header .nav-item.search[data-v-6fba8daf] {\\n flex: 1 1 auto;\\n}\\n.v-header .nav-item.auth[data-v-6fba8daf] {\\n color: #ffffff;\\n}\\n.v-header .nav-item.auth .user[data-v-6fba8daf] {\\n width: 7.333333rem;\\n height: 2.25rem;\\n background-color: #f05a23;\\n border-radius: 1.333333rem;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.v-header .nav-item.auth .user .icon-img[data-v-6fba8daf] {\\n margin: 0 .5rem;\\n}\\n.v-header .nav-item.auth .lang[data-v-6fba8daf] {\\n color: #f05a23;\\n}\\n@media (max-width: 950px) {\\n.v-header .header-container[data-v-6fba8daf] {\\n width: 96%;\\n}\\n}\\n@media (max-width: 800px) {\\n.v-header .main-nav-list[data-v-6fba8daf] {\\n display: none;\\n}\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/MDZjOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi52LWhlYWRlcltkYXRhLXYtNmZiYThkYWZdIHtcXG4gIGhlaWdodDogNS44MzMzMzNyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgY29sb3I6ICM0YzQ5NDg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxMTtcXG59XFxuLnYtaGVhZGVyIC5oZWFkZXItY29udGFpbmVyW2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICBtYXgtd2lkdGg6IDk1MHB4O1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIG1hcmdpbjogYXV0bztcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4udi1oZWFkZXIgLm1haW4tbmF2W2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIGZsZXg6IDEgMCBhdXRvO1xcbn1cXG4udi1oZWFkZXIgLmxvZ28taW1nW2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDJyZW07XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnYtaGVhZGVyIC5uYXYtbGlzdFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi52LWhlYWRlciAubmF2LWl0ZW1bZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4udi1oZWFkZXIgLm1haW4tbmF2LWxpc3RbZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnYtaGVhZGVyIC5uYXYtaXRlbS5saW5rLWl0ZW1bZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgIHBhZGRpbmc6IDAgNTBweDtcXG4gICAgaGVpZ2h0OiA1cmVtO1xcbn1cXG4udi1oZWFkZXIgLm5hdi1pdGVtLnNlYXJjaFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgZmxleDogMSAxIGF1dG87XFxufVxcbi52LWhlYWRlciAubmF2LWl0ZW0uYXV0aFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgY29sb3I6ICNmZmZmZmY7XFxufVxcbi52LWhlYWRlciAubmF2LWl0ZW0uYXV0aCAudXNlcltkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgICB3aWR0aDogNy4zMzMzMzNyZW07XFxuICAgICAgaGVpZ2h0OiAyLjI1cmVtO1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMDVhMjM7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMS4zMzMzMzNyZW07XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4udi1oZWFkZXIgLm5hdi1pdGVtLmF1dGggLnVzZXIgLmljb24taW1nW2RhdGEtdi02ZmJhOGRhZl0ge1xcbiAgICAgICAgbWFyZ2luOiAwIC41cmVtO1xcbn1cXG4udi1oZWFkZXIgLm5hdi1pdGVtLmF1dGggLmxhbmdbZGF0YS12LTZmYmE4ZGFmXSB7XFxuICAgICAgY29sb3I6ICNmMDVhMjM7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA5NTBweCkge1xcbi52LWhlYWRlciAuaGVhZGVyLWNvbnRhaW5lcltkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgd2lkdGg6IDk2JTtcXG59XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA4MDBweCkge1xcbi52LWhlYWRlciAubWFpbi1uYXYtbGlzdFtkYXRhLXYtNmZiYThkYWZdIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var escape = __webpack_require__(/*! ../../../node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js\");\nexports = module.exports = __webpack_require__(/*! ../../../node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js */ \"./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";\\n/**\\n * ------------------------------------------------------------------\\n * 支持文件\\n * 需要引用的地方均需要加上这个支持文件\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass Minxins\\n *\\n * 参考收集:\\n * https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins\\n * ------------------------------------------------------------------\\n *\\n */\\n/**\\n * ------------------------------------------------------------------\\n * Sass 变量\\n *\\n * ------------------------------------------------------------------\\n *\\n */\\n.bis[data-v-1badc801] {\\n background-repeat: no-repeat;\\n background-size: 100% 100%;\\n}\\n.fl[data-v-1badc801] {\\n display: flex;\\n}\\n.fj[data-v-1badc801] {\\n display: flex;\\n justify-content: space-between;\\n}\\n.fla[data-v-1badc801] {\\n display: flex;\\n align-items: center;\\n}\\n.fcc[data-v-1badc801] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.bb[data-v-1badc801] {\\n box-sizing: border-box;\\n}\\n.fullp[data-v-1badc801] {\\n width: 100%;\\n height: 100%;\\n}\\n.pointer[data-v-1badc801] {\\n cursor: pointer;\\n}\\n.text-l[data-v-1badc801] {\\n text-align: left;\\n}\\n.text-r[data-v-1badc801] {\\n text-align: right;\\n}\\n.text-c[data-v-1badc801] {\\n text-align: center;\\n}\\n.bc[data-v-1badc801] {\\n text-align: center;\\n}\\n.flex1[data-v-1badc801] {\\n flex: 1;\\n}\\n\\n/* 图片字体 */\\n@font-face {\\n font-family: 'iconfont';\\n src: url(\\\"data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAASEAAsAAAAACSAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDSAqFGIQnATYCJAMYCw4ABCAFhG0HVBvZBxGVnNvIfhzYDV+BAe9wtJiGONTGYuHBZ/Oh77Q3OxupItOeFFTcQjpRXwK+AIbn08ne766XppsiwRKPksQTj7AO4xAOv3fOAdsJc0KNZO3Io89Lf8K9BkY+ce+4df4Dms+yXMacNNbEAOOAAtrbF1mBxAlqy/Dq8uqwrgMBiPGAD4g6dbgGQhSseQRAKstK8iFMmFAVBMHSdsFWFpkNHhYzhbkEYJb3efIGQUQIDCaFtXQ0l1KEhOfKV+G019Ary7GgbzgHAGEXUIAPABZIZ6GrGTSI+oBia7/A4gVAioWBeq58vvHlkJeNr8INBhIyy0dwwV8esJg4MBAgfGCVlKUNj/HguZIawGrqjZgLPHg5xACK1Y2YCwy8Cpdclo4/YIMIcBLANZh9YGkIPHta2NorTKxUSlUNV7Koz2zswo0mRfNNRs9fbFq8YJr5uEXLWo7cEd+6pbl9W3v3rj4g7tzRpU+7HauR0YbmJ2+dalLELZy6ude0uGh+75Zp5iXFCxZMW2Q+0IQOKsa7SMJIKH18h3y9hWY+mN4tEtW0bYT2memWpk1db7L81tQ7dgs3isUbt1rrl0kU0yy1Sza7ZCw0m4lCIzFMF2ww15+Qp1u43sRk/hJT7YJN5uaLluolPZSTvq1m4vmbgR7veM116OjBGp2K21oMbkRGnvqglnCLVharuAM6gl+toTNYPZs5doyZDXyHbx/RSvZMt6tNtx7RlzkWlcysWQySV2I+Pio008Np8mQvL/j0CEVLLIItloiEIPIFnCBDN7ZpC6n3i/erE0uXICT/t+269rVrjx4de+wrwynfjo1BaN/tXQmzJ3wIF9krghUHqN1eFB4fMvuCROrnvVwdkUeWLff2k70IiO8fs2yOabXpHHdlvX+A5rmK6dx4piXlbHunib+iNeVM+UnXFvWZjR2uleVF/jsbK12wo8OWDpY+TRH0jP8syLs0WIlOAIDhFHOP+gIA1TF3kCOBOcbaj9FjgYCJ97CEFvwt35GfKZ2Yq4j5JiGUsAC+Juu7saSZavDK1Wgs/jeaagB/Q0WUsuYutTOdIKDlmTLhATa03MskN0+G0t1vcjyETCMMArY4CLmQiuaDSSIETSgem7dBu0/G6o2REgGeJiAQSrvAkDsKSukyiaU9Bo+Zd+BTZgwxXdZHSrjFro4ZoqKlgj+VSe4UsdaVX3iDfgeR41KP8UIuNkCBfgHpxBUd8hArGj760FgVcZkjpaLbEAJTbWYHWTeltfaNvz9X9KJNIcfBSrIMhApapMAfKSOxjnJ6V6vM+29AewuEXNFR432BrLCDk0B+AhqQrqquUceljG7woR00qhQ7i5OxiKRiBwSIMlJbPMkBqdoo7RDuNfyZblxT1WZ6TbzLfbBZ53QYQglLeIRPBBB9hPTHH9oLMhQ5r5ipDFwwMRwxRezrfzAAAA==\\\") format(\\\"woff2\\\");\\n}\\n.iconfont[data-v-1badc801] {\\n font-family: 'iconfont' !important;\\n font-size: 16px;\\n font-style: normal;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.iconrefresh[data-v-1badc801]:before {\\n content: '\\\\E874';\\n}\\n.iconempty[data-v-1badc801]:before {\\n content: '\\\\E6A6';\\n}\\n.iconclose[data-v-1badc801]:before {\\n content: '\\\\E849';\\n}\\n.content[data-v-1badc801] {\\n padding-bottom: 2.25rem;\\n}\\n.top-space[data-v-1badc801] {\\n height: 2.25rem;\\n}\\n.box[data-v-1badc801] {\\n position: relative;\\n}\\n.banner-contaner[data-v-1badc801] {\\n position: relative;\\n width: 100%;\\n overflow: hidden;\\n height: 250px;\\n}\\n.banner[data-v-1badc801] {\\n position: absolute;\\n left: 50%;\\n top: 0;\\n width: 1024px;\\n margin-left: -512px;\\n height: 100%;\\n overflow: hidden;\\n}\\n.banner-img[data-v-1badc801] {\\n width: 100%;\\n height: 100%;\\n}\\n.recommend[data-v-1badc801] {\\n display: flex;\\n text-align: center;\\n justify-content: space-between;\\n max-width: 79.166667rem;\\n}\\n.recommend-item[data-v-1badc801] {\\n margin-top: 2.25rem;\\n position: relative;\\n width: 25.833333rem;\\n border-radius: .75rem;\\n box-shadow: 0 0 1.5rem 0 rgba(255, 87, 0, 0.15);\\n background-color: #fbfbfb;\\n padding: 0 5px;\\n}\\n.recommend-item .btn[data-v-1badc801] {\\n position: absolute;\\n left: 0;\\n right: 0;\\n bottom: 3rem;\\n margin: 0 auto;\\n width: 13.5rem;\\n height: 4rem;\\n line-height: 4rem;\\n font-size: 16px;\\n border-radius: 4rem;\\n text-align: center;\\n color: #ffffff;\\n background-color: #f05a23;\\n box-shadow: 0px 10px 13px 0 rgba(236, 100, 41, 0.2);\\n background-blend-mode: soft-light;\\n background-image: linear-gradient(to bottom, #f05f28, #f05021);\\n}\\n.recommend-item .tt[data-v-1badc801] {\\n position: absolute;\\n width: 100%;\\n color: #4c4948;\\n}\\n.recommend-item .t1[data-v-1badc801] {\\n bottom: 9.3rem;\\n}\\n.recommend-item .t2[data-v-1badc801] {\\n bottom: 11.42rem;\\n}\\n.recommend-item[data-v-1badc801]:first-child {\\n padding-left: 0;\\n}\\n.recommend-item[data-v-1badc801]:last-child {\\n padding-right: 0;\\n}\\n.more[data-v-1badc801] {\\n margin: 3.5rem auto 0;\\n position: relative;\\n}\\n.more .btn[data-v-1badc801] {\\n position: absolute;\\n width: 26%;\\n height: 8%;\\n top: 83%;\\n left: 69%;\\n z-index: 1;\\n}\\n.more .cont[data-v-1badc801] {\\n position: relative;\\n margin-left: 6.583333rem;\\n width: 85%;\\n}\\n.more .cont img[data-v-1badc801] {\\n width: 100%;\\n}\\n.news[data-v-1badc801] {\\n margin: 4.25rem auto 0;\\n}\\n.news .linear[data-v-1badc801] {\\n width: 100%;\\n height: 2.04rem;\\n background-image: url(\" + escape(__webpack_require__(/*! @/assets/images/index/linear.png */ \"./src/assets/images/index/linear.png\")) + \");\\n}\\n.news .tit[data-v-1badc801] {\\n text-align: center;\\n color: #f05a23;\\n font-size: 18px;\\n font-weight: bold;\\n letter-spacing: 1.8px;\\n}\\n.news .under-line[data-v-1badc801] {\\n margin: .75rem auto 0;\\n width: 4rem;\\n height: .25rem;\\n background-color: #275d40;\\n}\\n.news .news-wrap[data-v-1badc801] {\\n margin: 3.2rem auto 0;\\n max-width: 100rem;\\n}\\n.news .news-wrap .more[data-v-1badc801] {\\n width: 85%;\\n text-align: right;\\n margin-bottom: .5rem;\\n}\\n.news .news-wrap .news-item[data-v-1badc801] {\\n width: 85%;\\n margin: auto;\\n height: 4.25rem;\\n color: #4c4948;\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n border-top: solid 1px #dcdddd;\\n cursor: pointer;\\n}\\n.news .news-wrap .news-item[data-v-1badc801]:last-child {\\n border-bottom: solid 1px #dcdddd;\\n}\\n.swiper-button-prev[data-v-1badc801] {\\n background-image: url(\" + escape(__webpack_require__(/*! @/assets/images/common/button-prev.png */ \"./src/assets/images/common/button-prev.png\")) + \");\\n}\\n.swiper-button-next[data-v-1badc801] {\\n background-image: url(\" + escape(__webpack_require__(/*! @/assets/images/common/button-next.png */ \"./src/assets/images/common/button-next.png\")) + \");\\n}\\n@media (max-width: 950px) {\\n.box[data-v-1badc801] {\\n width: 96%;\\n}\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/MDQ1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZXNjYXBlID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2xpYi91cmwvZXNjYXBlLmpzXCIpO1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJAY2hhcnNldCBcXFwiVVRGLThcXFwiO1xcbi8qKlxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAqIOaUr+aMgeaWh+S7tlxcbiAqIOmcgOimgeW8leeUqOeahOWcsOaWueWdh+mcgOimgeWKoOS4iui/meS4quaUr+aMgeaWh+S7tlxcbiAqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICpcXG4gKi9cXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiBTYXNzIE1pbnhpbnNcXG4gKlxcbiAqIOWPguiAg+aUtumbhu+8mlxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC1zYXNzL3RyZWUvbWFzdGVyL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICpcXG4gKi9cXG4vKipcXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gKiBTYXNzIOWPmOmHj1xcbiAqXFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICpcXG4gKi9cXG4uYmlzW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlO1xcbn1cXG4uZmxbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG4uZmpbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uZmxhW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcbi5mY2NbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uYmJbZGF0YS12LTFiYWRjODAxXSB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG4uZnVsbHBbZGF0YS12LTFiYWRjODAxXSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnBvaW50ZXJbZGF0YS12LTFiYWRjODAxXSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi50ZXh0LWxbZGF0YS12LTFiYWRjODAxXSB7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4udGV4dC1yW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi50ZXh0LWNbZGF0YS12LTFiYWRjODAxXSB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5iY1tkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLmZsZXgxW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgZmxleDogMTtcXG59XFxuXFxuLyog5Zu+54mH5a2X5L2TICovXFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogJ2ljb25mb250JztcXG4gIHNyYzogdXJsKFxcXCJkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBQVNFQUFzQUFBQUFDU0FBQUFRM0FBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEVJR1ZnQ0RTQXFGR0lRbkFUWUNKQU1ZQ3c0QUJDQUZoRzBIVkJ2WkJ4R1ZuTnZJZmh6WURWK0JBZTl3dEppR09OVEdZdUhCWi9PaDc3UTNPeHVwSXRPZUZGVGNRanBSWHdLK0FJYm4wOG5lNzY2WHBwc2l3UktQa3NRVGo3QU80eEFPdjNmT0Fkc0pjMEtOWk8zSW84OUxmOEs5QmtZK2NlKzRkZjREbXMreVhNYWNOTmJFQU9PQUF0cmJGMW1CeEFscXkvRHE4dXF3cmdNQmlQR0FENGc2ZGJnR1FoU3NlUVJBS3N0SzhpRk1tRkFWQk1IU2RzRldGcGtOSGhZemhia0VZSmIzZWZJR1FVUUlEQ2FGdFhRMGwxS0VoT2ZLVitHMDE5QXJ5N0dnYnpnSEFHRVhVSUFQQUJaSVo2R3JHVFNJK29CaWE3L0E0Z1ZBaW9XQmVxNTh2dkhsa0plTnI4SU5CaEl5eTBkd3dWOGVzSmc0TUJBZ2ZHQ1ZsS1VOai9IZ3VaSWF3R3JxalpnTFBIZzV4QUNLMVkyWUN3eThDcGRjbG80L1lJTUljQkxBTlpoOVlHa0lQSHRhMk5vclRLeFVTbFVOVjdLb3oyenN3bzBtUmZOTlJzOWZiRnE4WUpyNXVFWExXbzdjRWQrNnBibDlXM3Yzcmo0Zzd0elJwVSs3SGF1UjBZYm1KMitkYWxMRUxaeTZ1ZGUwdUdoKzc1WnA1aVhGQ3haTVcyUSswSVFPS3NhN1NNSklLSDE4aDN5OWhXWSttTjR0RXRXMGJZVDJtZW1XcGsxZGI3TDgxdFE3ZGdzM2lzVWJ0MXJybDBrVTB5eTFTemE3WkN3MG00bENJekZNRjJ3dzE1K1FwMXU0M3NSay9oSlQ3WUpONXVhTGx1b2xQWlNUdnExbTR2bWJnUjd2ZU0xMTZPakJHcDJLMjFvTWJrUkdudnFnbG5DTFZoYXJ1QU02Z2wrdG9UTllQWnM1ZG95WkRYeUhieC9SU3ZaTXQ2dE50eDdSbHprV2xjeXNXUXlTVjJJK1BpbzAwOE5wOG1RdkwvajBDRVZMTElJdGxvaUVJUElGbkNCRE43WnBDNm4zaS9lckUwdVhJQ1QvdCsyNjlyVnJqeDRkZSt3cnd5bmZqbzFCYU4vdFhRbXpKM3dJRjlrcmdoVUhxTjFlRkI0Zk12dUNST3JudlZ3ZGtVZVdMZmYyazcwSWlPOGZzMnlPYWJYcEhIZGx2WCtBNXJtSzZkeDRwaVhsYkh1bmliK2lOZVZNK1VuWEZ2V1pqUjJ1bGVWRi9qc2JLMTJ3bzhPV0RwWStUUkgwalA4c3lMczBXSWxPQUlEaEZIT1ArZ0lBMVRGM2tDT0JPY2JhajlGamdZQ0o5N0NFRnZ3dDM1R2ZLWjJZcTRqNUppR1VzQUMrSnV1N3NhU1phdkRLMVdncy9qZWFhZ0IvUTBXVXN1WXV0VE9kSUtEbG1UTGhBVGEwM01za04wK0cwdDF2Y2p5RVRDTU1Bclk0Q0xtUWl1YURTU0lFVFNnZW03ZEJ1MC9HNm8yUkVnR2VKaUFRU3J2QWtEc0tTdWt5aWFVOUJvK1pkK0JUWmd3eFhkWkhTcmpGcm80Wm9xS2xnaitWU2U0VXNkYVZYM2lEZmdlUjQxS1A4VUl1TmtDQmZnSHB4QlVkOGhBckdqNzYwRmdWY1pranBhTGJFQUpUYldZSFdUZWx0ZmFOdno5WDlLSk5JY2ZCU3JJTWhBcGFwTUFmS1NPeGpuSjZWNnZNKzI5QWV3dUVYTkZSNDMyQnJMQ0RrMEIrQWhxUXJxcXVVY2Vsakc3d29SMDBxaFE3aTVPeGlLUmlCd1NJTWxKYlBNa0JxZG9vN1JEdU5meVpibHhUMVdaNlRiekxmYkJaNTNRWVFnbExlSVJQQkJCOWhQVEhIOW9MTWhRNXI1aXBERnd3TVJ3eFJlenJmekFBQUE9PVxcXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKTtcXG59XFxuLmljb25mb250W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgZm9udC1mYW1pbHk6ICdpY29uZm9udCcgIWltcG9ydGFudDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcXG59XFxuLmljb25yZWZyZXNoW2RhdGEtdi0xYmFkYzgwMV06YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICdcXFxcRTg3NCc7XFxufVxcbi5pY29uZW1wdHlbZGF0YS12LTFiYWRjODAxXTpiZWZvcmUge1xcbiAgY29udGVudDogJ1xcXFxFNkE2JztcXG59XFxuLmljb25jbG9zZVtkYXRhLXYtMWJhZGM4MDFdOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXEU4NDknO1xcbn1cXG4uY29udGVudFtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIHBhZGRpbmctYm90dG9tOiAyLjI1cmVtO1xcbn1cXG4udG9wLXNwYWNlW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgaGVpZ2h0OiAyLjI1cmVtO1xcbn1cXG4uYm94W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uYmFubmVyLWNvbnRhbmVyW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgaGVpZ2h0OiAyNTBweDtcXG59XFxuLmJhbm5lcltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRvcDogMDtcXG4gIHdpZHRoOiAxMDI0cHg7XFxuICBtYXJnaW4tbGVmdDogLTUxMnB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmJhbm5lci1pbWdbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5yZWNvbW1lbmRbZGF0YS12LTFiYWRjODAxXSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWF4LXdpZHRoOiA3OS4xNjY2NjdyZW07XFxufVxcbi5yZWNvbW1lbmQtaXRlbVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgbWFyZ2luLXRvcDogMi4yNXJlbTtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB3aWR0aDogMjUuODMzMzMzcmVtO1xcbiAgICBib3JkZXItcmFkaXVzOiAuNzVyZW07XFxuICAgIGJveC1zaGFkb3c6IDAgMCAxLjVyZW0gMCByZ2JhKDI1NSwgODcsIDAsIDAuMTUpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJmYmZiO1xcbiAgICBwYWRkaW5nOiAwIDVweDtcXG59XFxuLnJlY29tbWVuZC1pdGVtIC5idG5bZGF0YS12LTFiYWRjODAxXSB7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIGxlZnQ6IDA7XFxuICAgICAgcmlnaHQ6IDA7XFxuICAgICAgYm90dG9tOiAzcmVtO1xcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xcbiAgICAgIHdpZHRoOiAxMy41cmVtO1xcbiAgICAgIGhlaWdodDogNHJlbTtcXG4gICAgICBsaW5lLWhlaWdodDogNHJlbTtcXG4gICAgICBmb250LXNpemU6IDE2cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNHJlbTtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgY29sb3I6ICNmZmZmZmY7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwNWEyMztcXG4gICAgICBib3gtc2hhZG93OiAwcHggMTBweCAxM3B4IDAgcmdiYSgyMzYsIDEwMCwgNDEsIDAuMik7XFxuICAgICAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzb2Z0LWxpZ2h0O1xcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmMDVmMjgsICNmMDUwMjEpO1xcbn1cXG4ucmVjb21tZW5kLWl0ZW0gLnR0W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgICBjb2xvcjogIzRjNDk0ODtcXG59XFxuLnJlY29tbWVuZC1pdGVtIC50MVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgICBib3R0b206IDkuM3JlbTtcXG59XFxuLnJlY29tbWVuZC1pdGVtIC50MltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgICBib3R0b206IDExLjQycmVtO1xcbn1cXG4ucmVjb21tZW5kLWl0ZW1bZGF0YS12LTFiYWRjODAxXTpmaXJzdC1jaGlsZCB7XFxuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG4ucmVjb21tZW5kLWl0ZW1bZGF0YS12LTFiYWRjODAxXTpsYXN0LWNoaWxkIHtcXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG4ubW9yZVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIG1hcmdpbjogMy41cmVtIGF1dG8gMDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLm1vcmUgLmJ0bltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB3aWR0aDogMjYlO1xcbiAgICBoZWlnaHQ6IDglO1xcbiAgICB0b3A6IDgzJTtcXG4gICAgbGVmdDogNjklO1xcbiAgICB6LWluZGV4OiAxO1xcbn1cXG4ubW9yZSAuY29udFtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBtYXJnaW4tbGVmdDogNi41ODMzMzNyZW07XFxuICAgIHdpZHRoOiA4NSU7XFxufVxcbi5tb3JlIC5jb250IGltZ1tkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgICB3aWR0aDogMTAwJTtcXG59XFxuLm5ld3NbZGF0YS12LTFiYWRjODAxXSB7XFxuICBtYXJnaW46IDQuMjVyZW0gYXV0byAwO1xcbn1cXG4ubmV3cyAubGluZWFyW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAyLjA0cmVtO1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBlc2NhcGUocmVxdWlyZShcIkAvYXNzZXRzL2ltYWdlcy9pbmRleC9saW5lYXIucG5nXCIpKSArIFwiKTtcXG59XFxuLm5ld3MgLnRpdFtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBjb2xvcjogI2YwNWEyMztcXG4gICAgZm9udC1zaXplOiAxOHB4O1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuOHB4O1xcbn1cXG4ubmV3cyAudW5kZXItbGluZVtkYXRhLXYtMWJhZGM4MDFdIHtcXG4gICAgbWFyZ2luOiAuNzVyZW0gYXV0byAwO1xcbiAgICB3aWR0aDogNHJlbTtcXG4gICAgaGVpZ2h0OiAuMjVyZW07XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICMyNzVkNDA7XFxufVxcbi5uZXdzIC5uZXdzLXdyYXBbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgIG1hcmdpbjogMy4ycmVtIGF1dG8gMDtcXG4gICAgbWF4LXdpZHRoOiAxMDByZW07XFxufVxcbi5uZXdzIC5uZXdzLXdyYXAgLm1vcmVbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgICAgd2lkdGg6IDg1JTtcXG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAuNXJlbTtcXG59XFxuLm5ld3MgLm5ld3Mtd3JhcCAubmV3cy1pdGVtW2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgICAgIHdpZHRoOiA4NSU7XFxuICAgICAgbWFyZ2luOiBhdXRvO1xcbiAgICAgIGhlaWdodDogNC4yNXJlbTtcXG4gICAgICBjb2xvcjogIzRjNDk0ODtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCAjZGNkZGRkO1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLm5ld3MgLm5ld3Mtd3JhcCAubmV3cy1pdGVtW2RhdGEtdi0xYmFkYzgwMV06bGFzdC1jaGlsZCB7XFxuICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2RjZGRkZDtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldltkYXRhLXYtMWJhZGM4MDFdIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIGVzY2FwZShyZXF1aXJlKFwiQC9hc3NldHMvaW1hZ2VzL2NvbW1vbi9idXR0b24tcHJldi5wbmdcIikpICsgXCIpO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1uZXh0W2RhdGEtdi0xYmFkYzgwMV0ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgZXNjYXBlKHJlcXVpcmUoXCJAL2Fzc2V0cy9pbWFnZXMvY29tbW9uL2J1dHRvbi1uZXh0LnBuZ1wiKSkgKyBcIik7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA5NTBweCkge1xcbi5ib3hbZGF0YS12LTFiYWRjODAxXSB7XFxuICAgIHdpZHRoOiA5NiU7XFxufVxcbn1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js":
/*!*******************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanM/NjkwZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odXNlU291cmNlTWFwKSB7XG5cdHZhciBsaXN0ID0gW107XG5cblx0Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHR2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKTtcblx0XHRcdGlmKGl0ZW1bMl0pIHtcblx0XHRcdFx0cmV0dXJuIFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgY29udGVudCArIFwifVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fTtcblxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuXHRsaXN0LmkgPSBmdW5jdGlvbihtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XG5cdFx0aWYodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG5cdFx0dmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGlkID0gdGhpc1tpXVswXTtcblx0XHRcdGlmKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIilcblx0XHRcdFx0YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuXHRcdH1cblx0XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVsZXNbaV07XG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXG5cdFx0XHQvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdlaXJkIG1lZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXG5cdFx0XHRpZih0eXBlb2YgaXRlbVswXSAhPT0gXCJudW1iZXJcIiB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuXHRcdFx0XHRpZihtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1lZGlhUXVlcnk7XG5cdFx0XHRcdH0gZWxzZSBpZihtZWRpYVF1ZXJ5KSB7XG5cdFx0XHRcdFx0aXRlbVsyXSA9IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3QucHVzaChpdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBsaXN0O1xufTtcblxuZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApIHtcblx0dmFyIGNvbnRlbnQgPSBpdGVtWzFdIHx8ICcnO1xuXHR2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG5cdGlmICghY3NzTWFwcGluZykge1xuXHRcdHJldHVybiBjb250ZW50O1xuXHR9XG5cblx0aWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuXHRcdHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG5cdFx0XHRyZXR1cm4gJy8qIyBzb3VyY2VVUkw9JyArIGNzc01hcHBpbmcuc291cmNlUm9vdCArIHNvdXJjZSArICcgKi8nXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcblx0fVxuXG5cdHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59XG5cbi8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5cdHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuXHR2YXIgZGF0YSA9ICdzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwnICsgYmFzZTY0O1xuXG5cdHJldHVybiAnLyojICcgKyBkYXRhICsgJyAqLyc7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/lib/css-base.js\n");
/***/ }),
/***/ "./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js":
/*!*********************************************************************!*\
!*** ./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js ***!
\*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = function escape(url) {\n if (typeof url !== 'string') {\n return url\n }\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]/.test(url)) {\n return '\"' + url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n') + '\"'\n }\n\n return url\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9saWIvdXJsL2VzY2FwZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2xpYi91cmwvZXNjYXBlLmpzPzU0NTQiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlc2NhcGUodXJsKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICB9XG4gICAgLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG4gICAgaWYgKC9eWydcIl0uKlsnXCJdJC8udGVzdCh1cmwpKSB7XG4gICAgICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gICAgfVxuICAgIC8vIFNob3VsZCB1cmwgYmUgd3JhcHBlZD9cbiAgICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuICAgIGlmICgvW1wiJygpIFxcdFxcbl0vLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gJ1wiJyArIHVybC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csICdcXFxcbicpICsgJ1wiJ1xuICAgIH1cblxuICAgIHJldHVybiB1cmxcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_css-loader@1.0.1@css-loader/lib/url/escape.js\n");
/***/ }),
/***/ "./node_modules/_deep-equal@1.1.0@deep-equal/index.js":
/*!************************************************************!*\
!*** ./node_modules/_deep-equal@1.1.0@deep-equal/index.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var objectKeys = __webpack_require__(/*! object-keys */ \"./node_modules/_object-keys@1.1.1@object-keys/index.js\");\nvar isArguments = __webpack_require__(/*! is-arguments */ \"./node_modules/_is-arguments@1.0.4@is-arguments/index.js\");\nvar is = __webpack_require__(/*! object-is */ \"./node_modules/_object-is@1.0.1@object-is/index.js\");\nvar isRegex = __webpack_require__(/*! is-regex */ \"./node_modules/_is-regex@1.0.4@is-regex/index.js\");\nvar flags = __webpack_require__(/*! regexp.prototype.flags */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js\");\nvar isDate = __webpack_require__(/*! is-date-object */ \"./node_modules/_is-date-object@1.0.1@is-date-object/index.js\");\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2RlZXAtZXF1YWxAMS4xLjBAZGVlcC1lcXVhbC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fZGVlcC1lcXVhbEAxLjEuMEBkZWVwLWVxdWFsL2luZGV4LmpzPzUxMzEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnaXMtYXJndW1lbnRzJyk7XG52YXIgaXMgPSByZXF1aXJlKCdvYmplY3QtaXMnKTtcbnZhciBpc1JlZ2V4ID0gcmVxdWlyZSgnaXMtcmVnZXgnKTtcbnZhciBmbGFncyA9IHJlcXVpcmUoJ3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3MnKTtcbnZhciBpc0RhdGUgPSByZXF1aXJlKCdpcy1kYXRlLW9iamVjdCcpO1xuXG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBvcHRpb25zKSB7XG4gIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKG9wdHMuc3RyaWN0ID8gaXMoYWN0dWFsLCBleHBlY3RlZCkgOiBhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyA3LjMuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCAodHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9PSAnb2JqZWN0JykpIHtcbiAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBpcyhhY3R1YWwsIGV4cGVjdGVkKSA6IGFjdHVhbCA9PSBleHBlY3RlZDtcbiAgfVxuXG4gIC8qXG4gICAqIDcuNC4gRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAgKiBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgICogd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAgKiAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gICAqIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gICAqIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyKHgpIHtcbiAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgeC5sZW5ndGggIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgeC5jb3B5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4LnNsaWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh4Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIHhbMF0gIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBvcHRzKSB7XG4gIC8qIGVzbGludCBtYXgtc3RhdGVtZW50czogWzIsIDUwXSAqL1xuICB2YXIgaSwga2V5O1xuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIGlmIChpc0FyZ3VtZW50cyhhKSAhPT0gaXNBcmd1bWVudHMoYikpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgdmFyIGFJc1JlZ2V4ID0gaXNSZWdleChhKTtcbiAgdmFyIGJJc1JlZ2V4ID0gaXNSZWdleChiKTtcbiAgaWYgKGFJc1JlZ2V4ICE9PSBiSXNSZWdleCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKGFJc1JlZ2V4IHx8IGJJc1JlZ2V4KSB7XG4gICAgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBmbGFncyhhKSA9PT0gZmxhZ3MoYik7XG4gIH1cblxuICBpZiAoaXNEYXRlKGEpICYmIGlzRGF0ZShiKSkge1xuICAgIHJldHVybiBnZXRUaW1lLmNhbGwoYSkgPT09IGdldFRpbWUuY2FsbChiKTtcbiAgfVxuXG4gIHZhciBhSXNCdWZmZXIgPSBpc0J1ZmZlcihhKTtcbiAgdmFyIGJJc0J1ZmZlciA9IGlzQnVmZmVyKGIpO1xuICBpZiAoYUlzQnVmZmVyICE9PSBiSXNCdWZmZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChhSXNCdWZmZXIgfHwgYklzQnVmZmVyKSB7IC8vICYmIHdvdWxkIHdvcmsgdG9vLCBiZWNhdXNlIGJvdGggYXJlIHRydWUgb3IgYm90aCBmYWxzZSBoZXJlXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgeyByZXR1cm4gZmFsc2U7IH1cblxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSk7XG4gICAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgeyAvLyBoYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgLy8gdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvLyB+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgfVxuICAvLyBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZCB+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG9wdHMpKSB7IHJldHVybiBmYWxzZTsgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcEVxdWFsO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_deep-equal@1.1.0@deep-equal/index.js\n");
/***/ }),
/***/ "./node_modules/_define-properties@1.1.3@define-properties/index.js":
/*!**************************************************************************!*\
!*** ./node_modules/_define-properties@1.1.3@define-properties/index.js ***!
\**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar keys = __webpack_require__(/*! object-keys */ \"./node_modules/_object-keys@1.1.1@object-keys/index.js\");\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2RlZmluZS1wcm9wZXJ0aWVzQDEuMS4zQGRlZmluZS1wcm9wZXJ0aWVzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19kZWZpbmUtcHJvcGVydGllc0AxLjEuM0BkZWZpbmUtcHJvcGVydGllcy9pbmRleC5qcz9jODkyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGhhc1N5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2woJ2ZvbycpID09PSAnc3ltYm9sJztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyIG9yaWdEZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcblx0cmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0ci5jYWxsKGZuKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgb2JqID0ge307XG5cdHRyeSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iaiwgJ3gnLCB7IGVudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogb2JqIH0pO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tcmVzdHJpY3RlZC1zeW50YXhcblx0XHRmb3IgKHZhciBfIGluIG9iaikgeyAvLyBqc2NzOmlnbm9yZSBkaXNhbGxvd1VudXNlZFZhcmlhYmxlc1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gb2JqLnggPT09IG9iajtcblx0fSBjYXRjaCAoZSkgeyAvKiB0aGlzIGlzIElFIDguICovXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBvcmlnRGVmaW5lUHJvcGVydHkgJiYgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCgpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCB2YWx1ZSwgcHJlZGljYXRlKSB7XG5cdGlmIChuYW1lIGluIG9iamVjdCAmJiAoIWlzRnVuY3Rpb24ocHJlZGljYXRlKSB8fCAhcHJlZGljYXRlKCkpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0b3JpZ0RlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9iamVjdFtuYW1lXSA9IHZhbHVlO1xuXHR9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvYmplY3QsIG1hcCkge1xuXHR2YXIgcHJlZGljYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDoge307XG5cdHZhciBwcm9wcyA9IGtleXMobWFwKTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHRwcm9wcyA9IGNvbmNhdC5jYWxsKHByb3BzLCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1hcCkpO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BzW2ldLCBtYXBbcHJvcHNbaV1dLCBwcmVkaWNhdGVzW3Byb3BzW2ldXSk7XG5cdH1cbn07XG5cbmRlZmluZVByb3BlcnRpZXMuc3VwcG9ydHNEZXNjcmlwdG9ycyA9ICEhc3VwcG9ydHNEZXNjcmlwdG9ycztcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0aWVzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_define-properties@1.1.3@define-properties/index.js\n");
/***/ }),
/***/ "./node_modules/_function-bind@1.1.1@function-bind/implementation.js":
/*!***************************************************************************!*\
!*** ./node_modules/_function-bind@1.1.1@function-bind/implementation.js ***!
\***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Z1bmN0aW9uLWJpbmRAMS4xLjFAZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fZnVuY3Rpb24tYmluZEAxLjEuMUBmdW5jdGlvbi1iaW5kL2ltcGxlbWVudGF0aW9uLmpzP2E5NWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmNhbGwodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IE1hdGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3MucHVzaCgnJCcgKyBpKTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgYm91bmRBcmdzLmpvaW4oJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_function-bind@1.1.1@function-bind/implementation.js\n");
/***/ }),
/***/ "./node_modules/_function-bind@1.1.1@function-bind/index.js":
/*!******************************************************************!*\
!*** ./node_modules/_function-bind@1.1.1@function-bind/index.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"./node_modules/_function-bind@1.1.1@function-bind/implementation.js\");\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2Z1bmN0aW9uLWJpbmRAMS4xLjFAZnVuY3Rpb24tYmluZC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fZnVuY3Rpb24tYmluZEAxLjEuMUBmdW5jdGlvbi1iaW5kL2luZGV4LmpzPzNjZWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_function-bind@1.1.1@function-bind/index.js\n");
/***/ }),
/***/ "./node_modules/_has@1.0.3@has/src/index.js":
/*!**************************************************!*\
!*** ./node_modules/_has@1.0.3@has/src/index.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar bind = __webpack_require__(/*! function-bind */ \"./node_modules/_function-bind@1.1.1@function-bind/index.js\");\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2hhc0AxLjAuM0BoYXMvc3JjL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19oYXNAMS4wLjNAaGFzL3NyYy9pbmRleC5qcz9mYjgxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_has@1.0.3@has/src/index.js\n");
/***/ }),
/***/ "./node_modules/_is-arguments@1.0.4@is-arguments/index.js":
/*!****************************************************************!*\
!*** ./node_modules/_is-arguments@1.0.4@is-arguments/index.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar toStr = Object.prototype.toString;\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn toStr.call(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\ttoStr.call(value) !== '[object Array]' &&\n\t\ttoStr.call(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLWFyZ3VtZW50c0AxLjAuNEBpcy1hcmd1bWVudHMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2lzLWFyZ3VtZW50c0AxLjAuNEBpcy1hcmd1bWVudHMvaW5kZXguanM/ZmI0NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNTdGFuZGFyZEFyZ3VtZW50cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdGlmIChoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdG9TdHIuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxudmFyIGlzTGVnYWN5QXJndW1lbnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0aWYgKGlzU3RhbmRhcmRBcmd1bWVudHModmFsdWUpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmXG5cdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHR0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbnZhciBzdXBwb3J0c1N0YW5kYXJkQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIGlzU3RhbmRhcmRBcmd1bWVudHMoYXJndW1lbnRzKTtcbn0oKSk7XG5cbmlzU3RhbmRhcmRBcmd1bWVudHMuaXNMZWdhY3lBcmd1bWVudHMgPSBpc0xlZ2FjeUFyZ3VtZW50czsgLy8gZm9yIHRlc3RzXG5cbm1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNTdGFuZGFyZEFyZ3VtZW50cyA/IGlzU3RhbmRhcmRBcmd1bWVudHMgOiBpc0xlZ2FjeUFyZ3VtZW50cztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_is-arguments@1.0.4@is-arguments/index.js\n");
/***/ }),
/***/ "./node_modules/_is-buffer@2.0.4@is-buffer/index.js":
/*!**********************************************************!*\
!*** ./node_modules/_is-buffer@2.0.4@is-buffer/index.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLWJ1ZmZlckAyLjAuNEBpcy1idWZmZXIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX2lzLWJ1ZmZlckAyLjAuNEBpcy1idWZmZXIvaW5kZXguanM/ZWJlNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXJcbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_is-buffer@2.0.4@is-buffer/index.js\n");
/***/ }),
/***/ "./node_modules/_is-date-object@1.0.1@is-date-object/index.js":
/*!********************************************************************!*\
!*** ./node_modules/_is-date-object@1.0.1@is-date-object/index.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateObject(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) { return false; }\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLWRhdGUtb2JqZWN0QDEuMC4xQGlzLWRhdGUtb2JqZWN0L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19pcy1kYXRlLW9iamVjdEAxLjAuMUBpcy1kYXRlLW9iamVjdC9pbmRleC5qcz9iNTdmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGdldERheSA9IERhdGUucHJvdG90eXBlLmdldERheTtcbnZhciB0cnlEYXRlT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RGF0ZU9iamVjdCh2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGdldERheS5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBkYXRlQ2xhc3MgPSAnW29iamVjdCBEYXRlXSc7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0cmV0dXJuIGhhc1RvU3RyaW5nVGFnID8gdHJ5RGF0ZU9iamVjdCh2YWx1ZSkgOiB0b1N0ci5jYWxsKHZhbHVlKSA9PT0gZGF0ZUNsYXNzO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_is-date-object@1.0.1@is-date-object/index.js\n");
/***/ }),
/***/ "./node_modules/_is-regex@1.0.4@is-regex/index.js":
/*!********************************************************!*\
!*** ./node_modules/_is-regex@1.0.4@is-regex/index.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar has = __webpack_require__(/*! has */ \"./node_modules/_has@1.0.3@has/src/index.js\");\nvar regexExec = RegExp.prototype.exec;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar tryRegexExecCall = function tryRegexExec(value) {\n\ttry {\n\t\tvar lastIndex = value.lastIndex;\n\t\tvalue.lastIndex = 0;\n\n\t\tregexExec.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\tvalue.lastIndex = lastIndex;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar regexClass = '[object RegExp]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isRegex(value) {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\tif (!hasToStringTag) {\n\t\treturn toStr.call(value) === regexClass;\n\t}\n\n\tvar descriptor = gOPD(value, 'lastIndex');\n\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\tif (!hasLastIndexDataProperty) {\n\t\treturn false;\n\t}\n\n\treturn tryRegexExecCall(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX2lzLXJlZ2V4QDEuMC40QGlzLXJlZ2V4L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19pcy1yZWdleEAxLjAuNEBpcy1yZWdleC9pbmRleC5qcz84ZmVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIHJlZ2V4RXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIHRyeVJlZ2V4RXhlY0NhbGwgPSBmdW5jdGlvbiB0cnlSZWdleEV4ZWModmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgbGFzdEluZGV4ID0gdmFsdWUubGFzdEluZGV4O1xuXHRcdHZhbHVlLmxhc3RJbmRleCA9IDA7XG5cblx0XHRyZWdleEV4ZWMuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cdFx0dmFsdWUubGFzdEluZGV4ID0gbGFzdEluZGV4O1xuXHR9XG59O1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciByZWdleENsYXNzID0gJ1tvYmplY3QgUmVnRXhwXSc7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICghaGFzVG9TdHJpbmdUYWcpIHtcblx0XHRyZXR1cm4gdG9TdHIuY2FsbCh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH1cblxuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQodmFsdWUsICdsYXN0SW5kZXgnKTtcblx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRpZiAoIWhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnlSZWdleEV4ZWNDYWxsKHZhbHVlKTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_is-regex@1.0.4@is-regex/index.js\n");
/***/ }),
/***/ "./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js":
/*!********************************************************!*\
!*** ./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse {}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global require, module, window */\n\tvar Handler = __webpack_require__(1)\n\tvar Util = __webpack_require__(3)\n\tvar Random = __webpack_require__(5)\n\tvar RE = __webpack_require__(20)\n\tvar toJSONSchema = __webpack_require__(23)\n\tvar valid = __webpack_require__(25)\n\n\tvar XHR\n\tif (typeof window !== 'undefined') XHR = __webpack_require__(27)\n\n\t/*!\n\t Mock - 模拟请求 & 模拟数据\n\t https://github.com/nuysoft/Mock\n\t 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com\n\t*/\n\tvar Mock = {\n\t Handler: Handler,\n\t Random: Random,\n\t Util: Util,\n\t XHR: XHR,\n\t RE: RE,\n\t toJSONSchema: toJSONSchema,\n\t valid: valid,\n\t heredoc: Util.heredoc,\n\t setup: function(settings) {\n\t return XHR.setup(settings)\n\t },\n\t _mocked: {}\n\t}\n\n\tMock.version = '1.0.1-beta3'\n\n\t// 避免循环依赖\n\tif (XHR) XHR.Mock = Mock\n\n\t/*\n\t * Mock.mock( template )\n\t * Mock.mock( function() )\n\t * Mock.mock( rurl, template )\n\t * Mock.mock( rurl, function(options) )\n\t * Mock.mock( rurl, rtype, template )\n\t * Mock.mock( rurl, rtype, function(options) )\n\n\t 根据数据模板生成模拟数据。\n\t*/\n\tMock.mock = function(rurl, rtype, template) {\n\t // Mock.mock(template)\n\t if (arguments.length === 1) {\n\t return Handler.gen(rurl)\n\t }\n\t // Mock.mock(rurl, template)\n\t if (arguments.length === 2) {\n\t template = rtype\n\t rtype = undefined\n\t }\n\t // 拦截 XHR\n\t if (XHR) window.XMLHttpRequest = XHR\n\t Mock._mocked[rurl + (rtype || '')] = {\n\t rurl: rurl,\n\t rtype: rtype,\n\t template: template\n\t }\n\t return Mock\n\t}\n\n\tmodule.exports = Mock\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* \n\t ## Handler\n\n\t 处理数据模板。\n\t \n\t * Handler.gen( template, name?, context? )\n\n\t 入口方法。\n\n\t * Data Template Definition, DTD\n\t \n\t 处理数据模板定义。\n\n\t * Handler.array( options )\n\t * Handler.object( options )\n\t * Handler.number( options )\n\t * Handler.boolean( options )\n\t * Handler.string( options )\n\t * Handler.function( options )\n\t * Handler.regexp( options )\n\t \n\t 处理路径(相对和绝对)。\n\n\t * Handler.getValueByKeyPath( key, options )\n\n\t * Data Placeholder Definition, DPD\n\n\t 处理数据占位符定义\n\n\t * Handler.placeholder( placeholder, context, templateContext, options )\n\n\t*/\n\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar Parser = __webpack_require__(4)\n\tvar Random = __webpack_require__(5)\n\tvar RE = __webpack_require__(20)\n\n\tvar Handler = {\n\t extend: Util.extend\n\t}\n\n\t/*\n\t template 属性值(即数据模板)\n\t name 属性名\n\t context 数据上下文,生成后的数据\n\t templateContext 模板上下文,\n\n\t Handle.gen(template, name, options)\n\t context\n\t currentContext, templateCurrentContext, \n\t path, templatePath\n\t root, templateRoot\n\t*/\n\tHandler.gen = function(template, name, context) {\n\t /* jshint -W041 */\n\t name = name == undefined ? '' : (name + '')\n\n\t context = context || {}\n\t context = {\n\t // 当前访问路径,只有属性名,不包括生成规则\n\t path: context.path || [Constant.GUID],\n\t templatePath: context.templatePath || [Constant.GUID++],\n\t // 最终属性值的上下文\n\t currentContext: context.currentContext,\n\t // 属性值模板的上下文\n\t templateCurrentContext: context.templateCurrentContext || template,\n\t // 最终值的根\n\t root: context.root || context.currentContext,\n\t // 模板的根\n\t templateRoot: context.templateRoot || context.templateCurrentContext || template\n\t }\n\t // console.log('path:', context.path.join('.'), template)\n\n\t var rule = Parser.parse(name)\n\t var type = Util.type(template)\n\t var data\n\n\t if (Handler[type]) {\n\t data = Handler[type]({\n\t // 属性值类型\n\t type: type,\n\t // 属性值模板\n\t template: template,\n\t // 属性名 + 生成规则\n\t name: name,\n\t // 属性名\n\t parsedName: name ? name.replace(Constant.RE_KEY, '$1') : name,\n\n\t // 解析后的生成规则\n\t rule: rule,\n\t // 相关上下文\n\t context: context\n\t })\n\n\t if (!context.root) context.root = data\n\t return data\n\t }\n\n\t return template\n\t}\n\n\tHandler.extend({\n\t array: function(options) {\n\t var result = [],\n\t i, ii;\n\n\t // 'name|1': []\n\t // 'name|count': []\n\t // 'name|min-max': []\n\t if (options.template.length === 0) return result\n\n\t // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }]\n\t if (!options.rule.parameters) {\n\t for (i = 0; i < options.template.length; i++) {\n\t options.context.path.push(i)\n\t options.context.templatePath.push(i)\n\t result.push(\n\t Handler.gen(options.template[i], i, {\n\t path: options.context.path,\n\t templatePath: options.context.templatePath,\n\t currentContext: result,\n\t templateCurrentContext: options.template,\n\t root: options.context.root || result,\n\t templateRoot: options.context.templateRoot || options.template\n\t })\n\t )\n\t options.context.path.pop()\n\t options.context.templatePath.pop()\n\t }\n\t } else {\n\t // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE']\n\t if (options.rule.min === 1 && options.rule.max === undefined) {\n\t // fix #17\n\t options.context.path.push(options.name)\n\t options.context.templatePath.push(options.name)\n\t result = Random.pick(\n\t Handler.gen(options.template, undefined, {\n\t path: options.context.path,\n\t templatePath: options.context.templatePath,\n\t currentContext: result,\n\t templateCurrentContext: options.template,\n\t root: options.context.root || result,\n\t templateRoot: options.context.templateRoot || options.template\n\t })\n\t )\n\t options.context.path.pop()\n\t options.context.templatePath.pop()\n\t } else {\n\t // 'data|+1': [{}, {}]\n\t if (options.rule.parameters[2]) {\n\t options.template.__order_index = options.template.__order_index || 0\n\n\t options.context.path.push(options.name)\n\t options.context.templatePath.push(options.name)\n\t result = Handler.gen(options.template, undefined, {\n\t path: options.context.path,\n\t templatePath: options.context.templatePath,\n\t currentContext: result,\n\t templateCurrentContext: options.template,\n\t root: options.context.root || result,\n\t templateRoot: options.context.templateRoot || options.template\n\t })[\n\t options.template.__order_index % options.template.length\n\t ]\n\n\t options.template.__order_index += +options.rule.parameters[2]\n\n\t options.context.path.pop()\n\t options.context.templatePath.pop()\n\n\t } else {\n\t // 'data|1-10': [{}]\n\t for (i = 0; i < options.rule.count; i++) {\n\t // 'data|1-10': [{}, {}]\n\t for (ii = 0; ii < options.template.length; ii++) {\n\t options.context.path.push(result.length)\n\t options.context.templatePath.push(ii)\n\t result.push(\n\t Handler.gen(options.template[ii], result.length, {\n\t path: options.context.path,\n\t templatePath: options.context.templatePath,\n\t currentContext: result,\n\t templateCurrentContext: options.template,\n\t root: options.context.root || result,\n\t templateRoot: options.context.templateRoot || options.template\n\t })\n\t )\n\t options.context.path.pop()\n\t options.context.templatePath.pop()\n\t }\n\t }\n\t }\n\t }\n\t }\n\t return result\n\t },\n\t object: function(options) {\n\t var result = {},\n\t keys, fnKeys, key, parsedKey, inc, i;\n\n\t // 'obj|min-max': {}\n\t /* jshint -W041 */\n\t if (options.rule.min != undefined) {\n\t keys = Util.keys(options.template)\n\t keys = Random.shuffle(keys)\n\t keys = keys.slice(0, options.rule.count)\n\t for (i = 0; i < keys.length; i++) {\n\t key = keys[i]\n\t parsedKey = key.replace(Constant.RE_KEY, '$1')\n\t options.context.path.push(parsedKey)\n\t options.context.templatePath.push(key)\n\t result[parsedKey] = Handler.gen(options.template[key], key, {\n\t path: options.context.path,\n\t templatePath: options.context.templatePath,\n\t currentContext: result,\n\t templateCurrentContext: options.template,\n\t root: options.context.root || result,\n\t templateRoot: options.context.templateRoot || options.template\n\t })\n\t options.context.path.pop()\n\t options.context.templatePath.pop()\n\t }\n\n\t } else {\n\t // 'obj': {}\n\t keys = []\n\t fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便\n\t for (key in options.template) {\n\t (typeof options.template[key] === 'function' ? fnKeys : keys).push(key)\n\t }\n\t keys = keys.concat(fnKeys)\n\n\t /*\n\t 会改变非函数属性的顺序\n\t keys = Util.keys(options.template)\n\t keys.sort(function(a, b) {\n\t var afn = typeof options.template[a] === 'function'\n\t var bfn = typeof options.template[b] === 'function'\n\t if (afn === bfn) return 0\n\t if (afn && !bfn) return 1\n\t if (!afn && bfn) return -1\n\t })\n\t */\n\n\t for (i = 0; i < keys.length; i++) {\n\t key = keys[i]\n\t parsedKey = key.replace(Constant.RE_KEY, '$1')\n\t options.context.path.push(parsedKey)\n\t options.context.templatePath.push(key)\n\t result[parsedKey] = Handler.gen(options.template[key], key, {\n\t path: options.context.path,\n\t templatePath: options.context.templatePath,\n\t currentContext: result,\n\t templateCurrentContext: options.template,\n\t root: options.context.root || result,\n\t templateRoot: options.context.templateRoot || options.template\n\t })\n\t options.context.path.pop()\n\t options.context.templatePath.pop()\n\t // 'id|+1': 1\n\t inc = key.match(Constant.RE_KEY)\n\t if (inc && inc[2] && Util.type(options.template[key]) === 'number') {\n\t options.template[key] += parseInt(inc[2], 10)\n\t }\n\t }\n\t }\n\t return result\n\t },\n\t number: function(options) {\n\t var result, parts;\n\t if (options.rule.decimal) { // float\n\t options.template += ''\n\t parts = options.template.split('.')\n\t // 'float1|.1-10': 10,\n\t // 'float2|1-100.1-10': 1,\n\t // 'float3|999.1-10': 1,\n\t // 'float4|.3-10': 123.123,\n\t parts[0] = options.rule.range ? options.rule.count : parts[0]\n\t parts[1] = (parts[1] || '').slice(0, options.rule.dcount)\n\t while (parts[1].length < options.rule.dcount) {\n\t parts[1] += (\n\t // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。\n\t (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789')\n\t )\n\t }\n\t result = parseFloat(parts.join('.'), 10)\n\t } else { // integer\n\t // 'grade1|1-100': 1,\n\t result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template\n\t }\n\t return result\n\t },\n\t boolean: function(options) {\n\t var result;\n\t // 'prop|multiple': false, 当前值是相反值的概率倍数\n\t // 'prop|probability-probability': false, 当前值与相反值的概率\n\t result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template\n\t return result\n\t },\n\t string: function(options) {\n\t var result = '',\n\t i, placeholders, ph, phed;\n\t if (options.template.length) {\n\n\t // 'foo': '★',\n\t /* jshint -W041 */\n\t if (options.rule.count == undefined) {\n\t result += options.template\n\t }\n\n\t // 'star|1-5': '★',\n\t for (i = 0; i < options.rule.count; i++) {\n\t result += options.template\n\t }\n\t // 'email|1-10': '@EMAIL, ',\n\t placeholders = result.match(Constant.RE_PLACEHOLDER) || [] // A-Z_0-9 > \\w_\n\t for (i = 0; i < placeholders.length; i++) {\n\t ph = placeholders[i]\n\n\t // 遇到转义斜杠,不需要解析占位符\n\t if (/^\\\\/.test(ph)) {\n\t placeholders.splice(i--, 1)\n\t continue\n\t }\n\n\t phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options)\n\n\t // 只有一个占位符,并且没有其他字符\n\t if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // \n\t result = phed\n\t break\n\n\t if (Util.isNumeric(phed)) {\n\t result = parseFloat(phed, 10)\n\t break\n\t }\n\t if (/^(true|false)$/.test(phed)) {\n\t result = phed === 'true' ? true :\n\t phed === 'false' ? false :\n\t phed // 已经是布尔值\n\t break\n\t }\n\t }\n\t result = result.replace(ph, phed)\n\t }\n\n\t } else {\n\t // 'ASCII|1-10': '',\n\t // 'ASCII': '',\n\t result = options.rule.range ? Random.string(options.rule.count) : options.template\n\t }\n\t return result\n\t },\n\t 'function': function(options) {\n\t // ( context, options )\n\t return options.template.call(options.context.currentContext, options)\n\t },\n\t 'regexp': function(options) {\n\t var source = ''\n\n\t // 'name': /regexp/,\n\t /* jshint -W041 */\n\t if (options.rule.count == undefined) {\n\t source += options.template.source // regexp.source\n\t }\n\n\t // 'name|1-5': /regexp/,\n\t for (var i = 0; i < options.rule.count; i++) {\n\t source += options.template.source\n\t }\n\n\t return RE.Handler.gen(\n\t RE.Parser.parse(\n\t source\n\t )\n\t )\n\t }\n\t})\n\n\tHandler.extend({\n\t _all: function() {\n\t var re = {};\n\t for (var key in Random) re[key.toLowerCase()] = key\n\t return re\n\t },\n\t // 处理占位符,转换为最终值\n\t placeholder: function(placeholder, obj, templateContext, options) {\n\t // console.log(options.context.path)\n\t // 1 key, 2 params\n\t Constant.RE_PLACEHOLDER.exec('')\n\t var parts = Constant.RE_PLACEHOLDER.exec(placeholder),\n\t key = parts && parts[1],\n\t lkey = key && key.toLowerCase(),\n\t okey = this._all()[lkey],\n\t params = parts && parts[2] || ''\n\t var pathParts = this.splitPathToArray(key)\n\n\t // 解析占位符的参数\n\t try {\n\t // 1. 尝试保持参数的类型\n\t /*\n\t #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24)\n\t [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056)\n\t 应该属于 Window Firefox 30.0 的 BUG\n\t */\n\t /* jshint -W061 */\n\t params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')')\n\t } catch (error) {\n\t // 2. 如果失败,只能解析为字符串\n\t // console.error(error)\n\t // if (error instanceof ReferenceError) params = parts[2].split(/,\\s*/);\n\t // else throw error\n\t params = parts[2].split(/,\\s*/)\n\t }\n\n\t // 占位符优先引用数据模板中的属性\n\t if (obj && (key in obj)) return obj[key]\n\n\t // @index @key\n\t // if (Constant.RE_INDEX.test(key)) return +options.name\n\t // if (Constant.RE_KEY.test(key)) return options.name\n\n\t // 绝对路径 or 相对路径\n\t if (\n\t key.charAt(0) === '/' ||\n\t pathParts.length > 1\n\t ) return this.getValueByKeyPath(key, options)\n\n\t // 递归引用数据模板中的属性\n\t if (templateContext &&\n\t (typeof templateContext === 'object') &&\n\t (key in templateContext) &&\n\t (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己\n\t ) {\n\t // 先计算被引用的属性值\n\t templateContext[key] = Handler.gen(templateContext[key], key, {\n\t currentContext: obj,\n\t templateCurrentContext: templateContext\n\t })\n\t return templateContext[key]\n\t }\n\n\t // 如果未找到,则原样返回\n\t if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder\n\n\t // 递归解析参数中的占位符\n\t for (var i = 0; i < params.length; i++) {\n\t Constant.RE_PLACEHOLDER.exec('')\n\t if (Constant.RE_PLACEHOLDER.test(params[i])) {\n\t params[i] = Handler.placeholder(params[i], obj, templateContext, options)\n\t }\n\t }\n\n\t var handle = Random[key] || Random[lkey] || Random[okey]\n\t switch (Util.type(handle)) {\n\t case 'array':\n\t // 自动从数组中取一个,例如 @areas\n\t return Random.pick(handle)\n\t case 'function':\n\t // 执行占位符方法(大多数情况)\n\t handle.options = options\n\t var re = handle.apply(Random, params)\n\t if (re === undefined) re = '' // 因为是在字符串中,所以默认为空字符串。\n\t delete handle.options\n\t return re\n\t }\n\t },\n\t getValueByKeyPath: function(key, options) {\n\t var originalKey = key\n\t var keyPathParts = this.splitPathToArray(key)\n\t var absolutePathParts = []\n\n\t // 绝对路径\n\t if (key.charAt(0) === '/') {\n\t absolutePathParts = [options.context.path[0]].concat(\n\t this.normalizePath(keyPathParts)\n\t )\n\t } else {\n\t // 相对路径\n\t if (keyPathParts.length > 1) {\n\t absolutePathParts = options.context.path.slice(0)\n\t absolutePathParts.pop()\n\t absolutePathParts = this.normalizePath(\n\t absolutePathParts.concat(keyPathParts)\n\t )\n\n\t }\n\t }\n\n\t try {\n\t key = keyPathParts[keyPathParts.length - 1]\n\t var currentContext = options.context.root\n\t var templateCurrentContext = options.context.templateRoot\n\t for (var i = 1; i < absolutePathParts.length - 1; i++) {\n\t currentContext = currentContext[absolutePathParts[i]]\n\t templateCurrentContext = templateCurrentContext[absolutePathParts[i]]\n\t }\n\t // 引用的值已经计算好\n\t if (currentContext && (key in currentContext)) return currentContext[key]\n\t \n\t // 尚未计算,递归引用数据模板中的属性\n\t if (templateCurrentContext &&\n\t (typeof templateCurrentContext === 'object') &&\n\t (key in templateCurrentContext) &&\n\t (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己\n\t ) {\n\t // 先计算被引用的属性值\n\t templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, {\n\t currentContext: currentContext,\n\t templateCurrentContext: templateCurrentContext\n\t })\n\t return templateCurrentContext[key]\n\t }\n\t } catch(err) { }\n\n\t return '@' + keyPathParts.join('/')\n\t },\n\t // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js\n\t normalizePath: function(pathParts) {\n\t var newPathParts = []\n\t for (var i = 0; i < pathParts.length; i++) {\n\t switch (pathParts[i]) {\n\t case '..':\n\t newPathParts.pop()\n\t break\n\t case '.':\n\t break\n\t default:\n\t newPathParts.push(pathParts[i])\n\t }\n\t }\n\t return newPathParts\n\t },\n\t splitPathToArray: function(path) {\n\t var parts = path.split(/\\/+/);\n\t if (!parts[parts.length - 1]) parts = parts.slice(0, -1)\n\t if (!parts[0]) parts = parts.slice(1)\n\t return parts;\n\t }\n\t})\n\n\tmodule.exports = Handler\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Constant\n\n\t 常量集合。\n\t */\n\t/*\n\t RE_KEY\n\t 'name|min-max': value\n\t 'name|count': value\n\t 'name|min-max.dmin-dmax': value\n\t 'name|min-max.dcount': value\n\t 'name|count.dmin-dmax': value\n\t 'name|count.dcount': value\n\t 'name|+step': value\n\n\t 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ]\n\n\t RE_PLACEHOLDER\n\t placeholder(*)\n\n\t [正则查看工具](http://www.regexper.com/)\n\n\t #26 生成规则 支持 负数,例如 number|-100-100\n\t*/\n\tmodule.exports = {\n\t GUID: 1,\n\t RE_KEY: /(.+)\\|(?:\\+(\\d+)|([\\+\\-]?\\d+-?[\\+\\-]?\\d*)?(?:\\.(\\d+-?\\d*))?)/,\n\t RE_RANGE: /([\\+\\-]?\\d+)-?([\\+\\-]?\\d+)?/,\n\t RE_PLACEHOLDER: /\\\\*@([^@#%&()\\?\\s]+)(?:\\((.*?)\\))?/g\n\t // /\\\\*@([^@#%&()\\?\\s\\/\\.]+)(?:\\((.*?)\\))?/g\n\t // RE_INDEX: /^index$/,\n\t // RE_KEY: /^key$/\n\t}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Utilities\n\t*/\n\tvar Util = {}\n\n\tUtil.extend = function extend() {\n\t var target = arguments[0] || {},\n\t i = 1,\n\t length = arguments.length,\n\t options, name, src, copy, clone\n\n\t if (length === 1) {\n\t target = this\n\t i = 0\n\t }\n\n\t for (; i < length; i++) {\n\t options = arguments[i]\n\t if (!options) continue\n\n\t for (name in options) {\n\t src = target[name]\n\t copy = options[name]\n\n\t if (target === copy) continue\n\t if (copy === undefined) continue\n\n\t if (Util.isArray(copy) || Util.isObject(copy)) {\n\t if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : []\n\t if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {}\n\n\t target[name] = Util.extend(clone, copy)\n\t } else {\n\t target[name] = copy\n\t }\n\t }\n\t }\n\n\t return target\n\t}\n\n\tUtil.each = function each(obj, iterator, context) {\n\t var i, key\n\t if (this.type(obj) === 'number') {\n\t for (i = 0; i < obj; i++) {\n\t iterator(i, i)\n\t }\n\t } else if (obj.length === +obj.length) {\n\t for (i = 0; i < obj.length; i++) {\n\t if (iterator.call(context, obj[i], i, obj) === false) break\n\t }\n\t } else {\n\t for (key in obj) {\n\t if (iterator.call(context, obj[key], key, obj) === false) break\n\t }\n\t }\n\t}\n\n\tUtil.type = function type(obj) {\n\t return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\\[object (\\w+)\\]/)[1].toLowerCase()\n\t}\n\n\tUtil.each('String Object Array RegExp Function'.split(' '), function(value) {\n\t Util['is' + value] = function(obj) {\n\t return Util.type(obj) === value.toLowerCase()\n\t }\n\t})\n\n\tUtil.isObjectOrArray = function(value) {\n\t return Util.isObject(value) || Util.isArray(value)\n\t}\n\n\tUtil.isNumeric = function(value) {\n\t return !isNaN(parseFloat(value)) && isFinite(value)\n\t}\n\n\tUtil.keys = function(obj) {\n\t var keys = [];\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) keys.push(key)\n\t }\n\t return keys;\n\t}\n\tUtil.values = function(obj) {\n\t var values = [];\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) values.push(obj[key])\n\t }\n\t return values;\n\t}\n\n\t/*\n\t ### Mock.heredoc(fn)\n\n\t * Mock.heredoc(fn)\n\n\t 以直观、安全的方式书写(多行)HTML 模板。\n\n\t **使用示例**如下所示:\n\n\t var tpl = Mock.heredoc(function() {\n\t /*!\n\t {{email}}{{age}}\n\t <!-- Mock { \n\t email: '@EMAIL',\n\t age: '@INT(1,100)'\n\t } -->\n\t *\\/\n\t })\n\t \n\t **相关阅读**\n\t * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、\n\t*/\n\tUtil.heredoc = function heredoc(fn) {\n\t // 1. 移除起始的 function(){ /*!\n\t // 2. 移除末尾的 */ }\n\t // 3. 移除起始和末尾的空格\n\t return fn.toString()\n\t .replace(/^[^\\/]+\\/\\*!?/, '')\n\t .replace(/\\*\\/[^\\/]+$/, '')\n\t .replace(/^[\\s\\xA0]+/, '').replace(/[\\s\\xA0]+$/, '') // .trim()\n\t}\n\n\tUtil.noop = function() {}\n\n\tmodule.exports = Util\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t\t## Parser\n\n\t\t解析数据模板(属性名部分)。\n\n\t\t* Parser.parse( name )\n\t\t\t\n\t\t\t```json\n\t\t\t{\n\t\t\t\tparameters: [ name, inc, range, decimal ],\n\t\t\t\trnage: [ min , max ],\n\n\t\t\t\tmin: min,\n\t\t\t\tmax: max,\n\t\t\t\tcount : count,\n\n\t\t\t\tdecimal: decimal,\n\t\t\t\tdmin: dmin,\n\t\t\t\tdmax: dmax,\n\t\t\t\tdcount: dcount\n\t\t\t}\n\t\t\t```\n\t */\n\n\tvar Constant = __webpack_require__(2)\n\tvar Random = __webpack_require__(5)\n\n\t/* jshint -W041 */\n\tmodule.exports = {\n\t\tparse: function(name) {\n\t\t\tname = name == undefined ? '' : (name + '')\n\n\t\t\tvar parameters = (name || '').match(Constant.RE_KEY)\n\n\t\t\tvar range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE)\n\t\t\tvar min = range && range[1] && parseInt(range[1], 10) // || 1\n\t\t\tvar max = range && range[2] && parseInt(range[2], 10) // || 1\n\t\t\t\t// repeat || min-max || 1\n\t\t\t\t// var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1\n\t\t\tvar count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined\n\n\t\t\tvar decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE)\n\t\t\tvar dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0,\n\t\t\tvar dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0,\n\t\t\t\t// int || dmin-dmax || 0\n\t\t\tvar dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined\n\n\t\t\tvar result = {\n\t\t\t\t// 1 name, 2 inc, 3 range, 4 decimal\n\t\t\t\tparameters: parameters,\n\t\t\t\t// 1 min, 2 max\n\t\t\t\trange: range,\n\t\t\t\tmin: min,\n\t\t\t\tmax: max,\n\t\t\t\t// min-max\n\t\t\t\tcount: count,\n\t\t\t\t// 是否有 decimal\n\t\t\t\tdecimal: decimal,\n\t\t\t\tdmin: dmin,\n\t\t\t\tdmax: dmax,\n\t\t\t\t// dmin-dimax\n\t\t\t\tdcount: dcount\n\t\t\t}\n\n\t\t\tfor (var r in result) {\n\t\t\t\tif (result[r] != undefined) return result\n\t\t\t}\n\n\t\t\treturn {}\n\t\t}\n\t}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Mock.Random\n\t \n\t 工具类,用于生成各种随机数据。\n\t*/\n\n\tvar Util = __webpack_require__(3)\n\n\tvar Random = {\n\t extend: Util.extend\n\t}\n\n\tRandom.extend(__webpack_require__(6))\n\tRandom.extend(__webpack_require__(7))\n\tRandom.extend(__webpack_require__(8))\n\tRandom.extend(__webpack_require__(10))\n\tRandom.extend(__webpack_require__(13))\n\tRandom.extend(__webpack_require__(15))\n\tRandom.extend(__webpack_require__(16))\n\tRandom.extend(__webpack_require__(17))\n\tRandom.extend(__webpack_require__(14))\n\tRandom.extend(__webpack_require__(19))\n\n\tmodule.exports = Random\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Basics\n\t*/\n\tmodule.exports = {\n\t // 返回一个随机的布尔值。\n\t boolean: function(min, max, cur) {\n\t if (cur !== undefined) {\n\t min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1\n\t max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1\n\t return Math.random() > 1.0 / (min + max) * min ? !cur : cur\n\t }\n\n\t return Math.random() >= 0.5\n\t },\n\t bool: function(min, max, cur) {\n\t return this.boolean(min, max, cur)\n\t },\n\t // 返回一个随机的自然数(大于等于 0 的整数)。\n\t natural: function(min, max) {\n\t min = typeof min !== 'undefined' ? parseInt(min, 10) : 0\n\t max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n\t return Math.round(Math.random() * (max - min)) + min\n\t },\n\t // 返回一个随机的整数。\n\t integer: function(min, max) {\n\t min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992\n\t max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n\t return Math.round(Math.random() * (max - min)) + min\n\t },\n\t int: function(min, max) {\n\t return this.integer(min, max)\n\t },\n\t // 返回一个随机的浮点数。\n\t float: function(min, max, dmin, dmax) {\n\t dmin = dmin === undefined ? 0 : dmin\n\t dmin = Math.max(Math.min(dmin, 17), 0)\n\t dmax = dmax === undefined ? 17 : dmax\n\t dmax = Math.max(Math.min(dmax, 17), 0)\n\t var ret = this.integer(min, max) + '.';\n\t for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) {\n\t ret += (\n\t // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。\n\t (i < dcount - 1) ? this.character('number') : this.character('123456789')\n\t )\n\t }\n\t return parseFloat(ret, 10)\n\t },\n\t // 返回一个随机字符。\n\t character: function(pool) {\n\t var pools = {\n\t lower: 'abcdefghijklmnopqrstuvwxyz',\n\t upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n\t number: '0123456789',\n\t symbol: '!@#$%^&*()[]'\n\t }\n\t pools.alpha = pools.lower + pools.upper\n\t pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol\n\n\t pool = pools[('' + pool).toLowerCase()] || pool\n\t return pool.charAt(this.natural(0, pool.length - 1))\n\t },\n\t char: function(pool) {\n\t return this.character(pool)\n\t },\n\t // 返回一个随机字符串。\n\t string: function(pool, min, max) {\n\t var len\n\t switch (arguments.length) {\n\t case 0: // ()\n\t len = this.natural(3, 7)\n\t break\n\t case 1: // ( length )\n\t len = pool\n\t pool = undefined\n\t break\n\t case 2:\n\t // ( pool, length )\n\t if (typeof arguments[0] === 'string') {\n\t len = min\n\t } else {\n\t // ( min, max )\n\t len = this.natural(pool, min)\n\t pool = undefined\n\t }\n\t break\n\t case 3:\n\t len = this.natural(min, max)\n\t break\n\t }\n\n\t var text = ''\n\t for (var i = 0; i < len; i++) {\n\t text += this.character(pool)\n\t }\n\n\t return text\n\t },\n\t str: function( /*pool, min, max*/ ) {\n\t return this.string.apply(this, arguments)\n\t },\n\t // 返回一个整型数组。\n\t range: function(start, stop, step) {\n\t // range( stop )\n\t if (arguments.length <= 1) {\n\t stop = start || 0;\n\t start = 0;\n\t }\n\t // range( start, stop )\n\t step = arguments[2] || 1;\n\n\t start = +start\n\t stop = +stop\n\t step = +step\n\n\t var len = Math.max(Math.ceil((stop - start) / step), 0);\n\t var idx = 0;\n\t var range = new Array(len);\n\n\t while (idx < len) {\n\t range[idx++] = start;\n\t start += step;\n\t }\n\n\t return range;\n\t }\n\t}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Date\n\t*/\n\tvar patternLetters = {\n\t yyyy: 'getFullYear',\n\t yy: function(date) {\n\t return ('' + date.getFullYear()).slice(2)\n\t },\n\t y: 'yy',\n\n\t MM: function(date) {\n\t var m = date.getMonth() + 1\n\t return m < 10 ? '0' + m : m\n\t },\n\t M: function(date) {\n\t return date.getMonth() + 1\n\t },\n\n\t dd: function(date) {\n\t var d = date.getDate()\n\t return d < 10 ? '0' + d : d\n\t },\n\t d: 'getDate',\n\n\t HH: function(date) {\n\t var h = date.getHours()\n\t return h < 10 ? '0' + h : h\n\t },\n\t H: 'getHours',\n\t hh: function(date) {\n\t var h = date.getHours() % 12\n\t return h < 10 ? '0' + h : h\n\t },\n\t h: function(date) {\n\t return date.getHours() % 12\n\t },\n\n\t mm: function(date) {\n\t var m = date.getMinutes()\n\t return m < 10 ? '0' + m : m\n\t },\n\t m: 'getMinutes',\n\n\t ss: function(date) {\n\t var s = date.getSeconds()\n\t return s < 10 ? '0' + s : s\n\t },\n\t s: 'getSeconds',\n\n\t SS: function(date) {\n\t var ms = date.getMilliseconds()\n\t return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms\n\t },\n\t S: 'getMilliseconds',\n\n\t A: function(date) {\n\t return date.getHours() < 12 ? 'AM' : 'PM'\n\t },\n\t a: function(date) {\n\t return date.getHours() < 12 ? 'am' : 'pm'\n\t },\n\t T: 'getTime'\n\t}\n\tmodule.exports = {\n\t // 日期占位符集合。\n\t _patternLetters: patternLetters,\n\t // 日期占位符正则。\n\t _rformat: new RegExp((function() {\n\t var re = []\n\t for (var i in patternLetters) re.push(i)\n\t return '(' + re.join('|') + ')'\n\t })(), 'g'),\n\t // 格式化日期。\n\t _formatDate: function(date, format) {\n\t return format.replace(this._rformat, function creatNewSubString($0, flag) {\n\t return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) :\n\t patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) :\n\t date[patternLetters[flag]]()\n\t })\n\t },\n\t // 生成一个随机的 Date 对象。\n\t _randomDate: function(min, max) { // min, max\n\t min = min === undefined ? new Date(0) : min\n\t max = max === undefined ? new Date() : max\n\t return new Date(Math.random() * (max.getTime() - min.getTime()))\n\t },\n\t // 返回一个随机的日期字符串。\n\t date: function(format) {\n\t format = format || 'yyyy-MM-dd'\n\t return this._formatDate(this._randomDate(), format)\n\t },\n\t // 返回一个随机的时间字符串。\n\t time: function(format) {\n\t format = format || 'HH:mm:ss'\n\t return this._formatDate(this._randomDate(), format)\n\t },\n\t // 返回一个随机的日期和时间字符串。\n\t datetime: function(format) {\n\t format = format || 'yyyy-MM-dd HH:mm:ss'\n\t return this._formatDate(this._randomDate(), format)\n\t },\n\t // 返回当前的日期和时间字符串。\n\t now: function(unit, format) {\n\t // now(unit) now(format)\n\t if (arguments.length === 1) {\n\t // now(format)\n\t if (!/year|month|day|hour|minute|second|week/.test(unit)) {\n\t format = unit\n\t unit = ''\n\t }\n\t }\n\t unit = (unit || '').toLowerCase()\n\t format = format || 'yyyy-MM-dd HH:mm:ss'\n\n\t var date = new Date()\n\n\t /* jshint -W086 */\n\t // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/\n\t switch (unit) {\n\t case 'year':\n\t date.setMonth(0)\n\t case 'month':\n\t date.setDate(1)\n\t case 'week':\n\t case 'day':\n\t date.setHours(0)\n\t case 'hour':\n\t date.setMinutes(0)\n\t case 'minute':\n\t date.setSeconds(0)\n\t case 'second':\n\t date.setMilliseconds(0)\n\t }\n\t switch (unit) {\n\t case 'week':\n\t date.setDate(date.getDate() - date.getDay())\n\t }\n\n\t return this._formatDate(date, format)\n\t }\n\t}\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(module) {/* global document */\n\t/*\n\t ## Image\n\t*/\n\tmodule.exports = {\n\t // 常见的广告宽高\n\t _adSize: [\n\t '300x250', '250x250', '240x400', '336x280', '180x150',\n\t '720x300', '468x60', '234x60', '88x31', '120x90',\n\t '120x60', '120x240', '125x125', '728x90', '160x600',\n\t '120x600', '300x600'\n\t ],\n\t // 常见的屏幕宽高\n\t _screenSize: [\n\t '320x200', '320x240', '640x480', '800x480', '800x480',\n\t '1024x600', '1024x768', '1280x800', '1440x900', '1920x1200',\n\t '2560x1600'\n\t ],\n\t // 常见的视频宽高\n\t _videoSize: ['720x480', '768x576', '1280x720', '1920x1080'],\n\t /*\n\t 生成一个随机的图片地址。\n\n\t 替代图片源\n\t http://fpoimg.com/\n\t 参考自 \n\t http://rensanning.iteye.com/blog/1933310\n\t http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485\n\t */\n\t image: function(size, background, foreground, format, text) {\n\t // Random.image( size, background, foreground, text )\n\t if (arguments.length === 4) {\n\t text = format\n\t format = undefined\n\t }\n\t // Random.image( size, background, text )\n\t if (arguments.length === 3) {\n\t text = foreground\n\t foreground = undefined\n\t }\n\t // Random.image()\n\t if (!size) size = this.pick(this._adSize)\n\n\t if (background && ~background.indexOf('#')) background = background.slice(1)\n\t if (foreground && ~foreground.indexOf('#')) foreground = foreground.slice(1)\n\n\t // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello\n\t return 'http://dummyimage.com/' + size +\n\t (background ? '/' + background : '') +\n\t (foreground ? '/' + foreground : '') +\n\t (format ? '.' + format : '') +\n\t (text ? '&text=' + text : '')\n\t },\n\t img: function() {\n\t return this.image.apply(this, arguments)\n\t },\n\n\t /*\n\t BrandColors\n\t http://brandcolors.net/\n\t A collection of major brand color codes curated by Galen Gidman.\n\t 大牌公司的颜色集合\n\n\t // 获取品牌和颜色\n\t $('h2').each(function(index, item){\n\t item = $(item)\n\t console.log('\\'' + item.text() + '\\'', ':', '\\'' + item.next().text() + '\\'', ',')\n\t })\n\t */\n\t _brandColors: {\n\t '4ormat': '#fb0a2a',\n\t '500px': '#02adea',\n\t 'About.me (blue)': '#00405d',\n\t 'About.me (yellow)': '#ffcc33',\n\t 'Addvocate': '#ff6138',\n\t 'Adobe': '#ff0000',\n\t 'Aim': '#fcd20b',\n\t 'Amazon': '#e47911',\n\t 'Android': '#a4c639',\n\t 'Angie\\'s List': '#7fbb00',\n\t 'AOL': '#0060a3',\n\t 'Atlassian': '#003366',\n\t 'Behance': '#053eff',\n\t 'Big Cartel': '#97b538',\n\t 'bitly': '#ee6123',\n\t 'Blogger': '#fc4f08',\n\t 'Boeing': '#0039a6',\n\t 'Booking.com': '#003580',\n\t 'Carbonmade': '#613854',\n\t 'Cheddar': '#ff7243',\n\t 'Code School': '#3d4944',\n\t 'Delicious': '#205cc0',\n\t 'Dell': '#3287c1',\n\t 'Designmoo': '#e54a4f',\n\t 'Deviantart': '#4e6252',\n\t 'Designer News': '#2d72da',\n\t 'Devour': '#fd0001',\n\t 'DEWALT': '#febd17',\n\t 'Disqus (blue)': '#59a3fc',\n\t 'Disqus (orange)': '#db7132',\n\t 'Dribbble': '#ea4c89',\n\t 'Dropbox': '#3d9ae8',\n\t 'Drupal': '#0c76ab',\n\t 'Dunked': '#2a323a',\n\t 'eBay': '#89c507',\n\t 'Ember': '#f05e1b',\n\t 'Engadget': '#00bdf6',\n\t 'Envato': '#528036',\n\t 'Etsy': '#eb6d20',\n\t 'Evernote': '#5ba525',\n\t 'Fab.com': '#dd0017',\n\t 'Facebook': '#3b5998',\n\t 'Firefox': '#e66000',\n\t 'Flickr (blue)': '#0063dc',\n\t 'Flickr (pink)': '#ff0084',\n\t 'Forrst': '#5b9a68',\n\t 'Foursquare': '#25a0ca',\n\t 'Garmin': '#007cc3',\n\t 'GetGlue': '#2d75a2',\n\t 'Gimmebar': '#f70078',\n\t 'GitHub': '#171515',\n\t 'Google Blue': '#0140ca',\n\t 'Google Green': '#16a61e',\n\t 'Google Red': '#dd1812',\n\t 'Google Yellow': '#fcca03',\n\t 'Google+': '#dd4b39',\n\t 'Grooveshark': '#f77f00',\n\t 'Groupon': '#82b548',\n\t 'Hacker News': '#ff6600',\n\t 'HelloWallet': '#0085ca',\n\t 'Heroku (light)': '#c7c5e6',\n\t 'Heroku (dark)': '#6567a5',\n\t 'HootSuite': '#003366',\n\t 'Houzz': '#73ba37',\n\t 'HTML5': '#ec6231',\n\t 'IKEA': '#ffcc33',\n\t 'IMDb': '#f3ce13',\n\t 'Instagram': '#3f729b',\n\t 'Intel': '#0071c5',\n\t 'Intuit': '#365ebf',\n\t 'Kickstarter': '#76cc1e',\n\t 'kippt': '#e03500',\n\t 'Kodery': '#00af81',\n\t 'LastFM': '#c3000d',\n\t 'LinkedIn': '#0e76a8',\n\t 'Livestream': '#cf0005',\n\t 'Lumo': '#576396',\n\t 'Mixpanel': '#a086d3',\n\t 'Meetup': '#e51937',\n\t 'Nokia': '#183693',\n\t 'NVIDIA': '#76b900',\n\t 'Opera': '#cc0f16',\n\t 'Path': '#e41f11',\n\t 'PayPal (dark)': '#1e477a',\n\t 'PayPal (light)': '#3b7bbf',\n\t 'Pinboard': '#0000e6',\n\t 'Pinterest': '#c8232c',\n\t 'PlayStation': '#665cbe',\n\t 'Pocket': '#ee4056',\n\t 'Prezi': '#318bff',\n\t 'Pusha': '#0f71b4',\n\t 'Quora': '#a82400',\n\t 'QUOTE.fm': '#66ceff',\n\t 'Rdio': '#008fd5',\n\t 'Readability': '#9c0000',\n\t 'Red Hat': '#cc0000',\n\t 'Resource': '#7eb400',\n\t 'Rockpack': '#0ba6ab',\n\t 'Roon': '#62b0d9',\n\t 'RSS': '#ee802f',\n\t 'Salesforce': '#1798c1',\n\t 'Samsung': '#0c4da2',\n\t 'Shopify': '#96bf48',\n\t 'Skype': '#00aff0',\n\t 'Snagajob': '#f47a20',\n\t 'Softonic': '#008ace',\n\t 'SoundCloud': '#ff7700',\n\t 'Space Box': '#f86960',\n\t 'Spotify': '#81b71a',\n\t 'Sprint': '#fee100',\n\t 'Squarespace': '#121212',\n\t 'StackOverflow': '#ef8236',\n\t 'Staples': '#cc0000',\n\t 'Status Chart': '#d7584f',\n\t 'Stripe': '#008cdd',\n\t 'StudyBlue': '#00afe1',\n\t 'StumbleUpon': '#f74425',\n\t 'T-Mobile': '#ea0a8e',\n\t 'Technorati': '#40a800',\n\t 'The Next Web': '#ef4423',\n\t 'Treehouse': '#5cb868',\n\t 'Trulia': '#5eab1f',\n\t 'Tumblr': '#34526f',\n\t 'Twitch.tv': '#6441a5',\n\t 'Twitter': '#00acee',\n\t 'TYPO3': '#ff8700',\n\t 'Ubuntu': '#dd4814',\n\t 'Ustream': '#3388ff',\n\t 'Verizon': '#ef1d1d',\n\t 'Vimeo': '#86c9ef',\n\t 'Vine': '#00a478',\n\t 'Virb': '#06afd8',\n\t 'Virgin Media': '#cc0000',\n\t 'Wooga': '#5b009c',\n\t 'WordPress (blue)': '#21759b',\n\t 'WordPress (orange)': '#d54e21',\n\t 'WordPress (grey)': '#464646',\n\t 'Wunderlist': '#2b88d9',\n\t 'XBOX': '#9bc848',\n\t 'XING': '#126567',\n\t 'Yahoo!': '#720e9e',\n\t 'Yandex': '#ffcc00',\n\t 'Yelp': '#c41200',\n\t 'YouTube': '#c4302b',\n\t 'Zalongo': '#5498dc',\n\t 'Zendesk': '#78a300',\n\t 'Zerply': '#9dcc7a',\n\t 'Zootool': '#5e8b1d'\n\t },\n\t _brandNames: function() {\n\t var brands = [];\n\t for (var b in this._brandColors) {\n\t brands.push(b)\n\t }\n\t return brands\n\t },\n\t /*\n\t 生成一段随机的 Base64 图片编码。\n\n\t https://github.com/imsky/holder\n\t Holder renders image placeholders entirely on the client side.\n\n\t dataImageHolder: function(size) {\n\t return 'holder.js/' + size\n\t },\n\t */\n\t dataImage: function(size, text) {\n\t var canvas\n\t if (typeof document !== 'undefined') {\n\t canvas = document.createElement('canvas')\n\t } else {\n\t /*\n\t https://github.com/Automattic/node-canvas\n\t npm install canvas --save\n\t 安装问题:\n\t * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva\n\t * https://github.com/Automattic/node-canvas/issues/415\n\t * https://github.com/Automattic/node-canvas/wiki/_pages\n\n\t PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。\n\t */\n\t var Canvas = module.require('canvas')\n\t canvas = new Canvas()\n\t }\n\n\t var ctx = canvas && canvas.getContext && canvas.getContext(\"2d\")\n\t if (!canvas || !ctx) return ''\n\n\t if (!size) size = this.pick(this._adSize)\n\t text = text !== undefined ? text : size\n\n\t size = size.split('x')\n\n\t var width = parseInt(size[0], 10),\n\t height = parseInt(size[1], 10),\n\t background = this._brandColors[this.pick(this._brandNames())],\n\t foreground = '#FFF',\n\t text_height = 14,\n\t font = 'sans-serif';\n\n\t canvas.width = width\n\t canvas.height = height\n\t ctx.textAlign = 'center'\n\t ctx.textBaseline = 'middle'\n\t ctx.fillStyle = background\n\t ctx.fillRect(0, 0, width, height)\n\t ctx.fillStyle = foreground\n\t ctx.font = 'bold ' + text_height + 'px ' + font\n\t ctx.fillText(text, (width / 2), (height / 2), width)\n\t return canvas.toDataURL('image/png')\n\t }\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9)(module)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Color\n\n\t http://llllll.li/randomColor/\n\t A color generator for JavaScript.\n\t randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art.\n\n\t http://randomcolour.com/\n\t var bg_colour = Math.floor(Math.random() * 16777215).toString(16);\n\t bg_colour = \"#\" + (\"000000\" + bg_colour).slice(-6);\n\t document.bgColor = bg_colour;\n\t \n\t http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n\t Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult.\n\t https://github.com/devongovett/color-generator\n\n\t http://www.paulirish.com/2009/random-hex-color-code-snippets/\n\t Random Hex Color Code Generator in JavaScript\n\n\t http://chancejs.com/#color\n\t chance.color()\n\t // => '#79c157'\n\t chance.color({format: 'hex'})\n\t // => '#d67118'\n\t chance.color({format: 'shorthex'})\n\t // => '#60f'\n\t chance.color({format: 'rgb'})\n\t // => 'rgb(110,52,164)'\n\n\t http://tool.c7sky.com/webcolor\n\t 网页设计常用色彩搭配表\n\t \n\t https://github.com/One-com/one-color\n\t An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels.\n\t API 很赞\n\n\t https://github.com/harthur/color\n\t JavaScript color conversion and manipulation library\n\n\t https://github.com/leaverou/css-colors\n\t Share & convert CSS colors\n\t http://leaverou.github.io/css-colors/#slategray\n\t Type a CSS color keyword, #hex, hsl(), rgba(), whatever:\n\n\t 色调 hue\n\t http://baike.baidu.com/view/23368.htm\n\t 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。\n\t 饱和度 saturation\n\t http://baike.baidu.com/view/189644.htm\n\t 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。\n\t 亮度 brightness\n\t http://baike.baidu.com/view/34773.htm\n\t 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。\n\t 照度 luminosity\n\t 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。\n\n\t http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript\n\t var letters = '0123456789ABCDEF'.split('')\n\t var color = '#'\n\t for (var i = 0; i < 6; i++) {\n\t color += letters[Math.floor(Math.random() * 16)]\n\t }\n\t return color\n\t \n\t // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。\n\t // _brainlessColor()\n\t var color = Math.floor(\n\t Math.random() *\n\t (16 * 16 * 16 * 16 * 16 * 16 - 1)\n\t ).toString(16)\n\t color = \"#\" + (\"000000\" + color).slice(-6)\n\t return color.toUpperCase()\n\t*/\n\n\tvar Convert = __webpack_require__(11)\n\tvar DICT = __webpack_require__(12)\n\n\tmodule.exports = {\n\t // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。\n\t color: function(name) {\n\t if (name || DICT[name]) return DICT[name].nicer\n\t return this.hex()\n\t },\n\t // #DAC0DE\n\t hex: function() {\n\t var hsv = this._goldenRatioColor()\n\t var rgb = Convert.hsv2rgb(hsv)\n\t var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2])\n\t return hex\n\t },\n\t // rgb(128,255,255)\n\t rgb: function() {\n\t var hsv = this._goldenRatioColor()\n\t var rgb = Convert.hsv2rgb(hsv)\n\t return 'rgb(' +\n\t parseInt(rgb[0], 10) + ', ' +\n\t parseInt(rgb[1], 10) + ', ' +\n\t parseInt(rgb[2], 10) + ')'\n\t },\n\t // rgba(128,255,255,0.3)\n\t rgba: function() {\n\t var hsv = this._goldenRatioColor()\n\t var rgb = Convert.hsv2rgb(hsv)\n\t return 'rgba(' +\n\t parseInt(rgb[0], 10) + ', ' +\n\t parseInt(rgb[1], 10) + ', ' +\n\t parseInt(rgb[2], 10) + ', ' +\n\t Math.random().toFixed(2) + ')'\n\t },\n\t // hsl(300,80%,90%)\n\t hsl: function() {\n\t var hsv = this._goldenRatioColor()\n\t var hsl = Convert.hsv2hsl(hsv)\n\t return 'hsl(' +\n\t parseInt(hsl[0], 10) + ', ' +\n\t parseInt(hsl[1], 10) + ', ' +\n\t parseInt(hsl[2], 10) + ')'\n\t },\n\t // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n\t // https://github.com/devongovett/color-generator/blob/master/index.js\n\t // 随机生成一个有吸引力的颜色。\n\t _goldenRatioColor: function(saturation, value) {\n\t this._goldenRatio = 0.618033988749895\n\t this._hue = this._hue || Math.random()\n\t this._hue += this._goldenRatio\n\t this._hue %= 1\n\n\t if (typeof saturation !== \"number\") saturation = 0.5;\n\t if (typeof value !== \"number\") value = 0.95;\n\n\t return [\n\t this._hue * 360,\n\t saturation * 100,\n\t value * 100\n\t ]\n\t }\n\t}\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Color Convert\n\n\t http://blog.csdn.net/idfaya/article/details/6770414\n\t 颜色空间RGB与HSV(HSL)的转换\n\t*/\n\t// https://github.com/harthur/color-convert/blob/master/conversions.js\n\tmodule.exports = {\n\t\trgb2hsl: function rgb2hsl(rgb) {\n\t\t\tvar r = rgb[0] / 255,\n\t\t\t\tg = rgb[1] / 255,\n\t\t\t\tb = rgb[2] / 255,\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tmax = Math.max(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th, s, l;\n\n\t\t\tif (max == min)\n\t\t\t\th = 0;\n\t\t\telse if (r == max)\n\t\t\t\th = (g - b) / delta;\n\t\t\telse if (g == max)\n\t\t\t\th = 2 + (b - r) / delta;\n\t\t\telse if (b == max)\n\t\t\t\th = 4 + (r - g) / delta;\n\n\t\t\th = Math.min(h * 60, 360);\n\n\t\t\tif (h < 0)\n\t\t\t\th += 360;\n\n\t\t\tl = (min + max) / 2;\n\n\t\t\tif (max == min)\n\t\t\t\ts = 0;\n\t\t\telse if (l <= 0.5)\n\t\t\t\ts = delta / (max + min);\n\t\t\telse\n\t\t\t\ts = delta / (2 - max - min);\n\n\t\t\treturn [h, s * 100, l * 100];\n\t\t},\n\t\trgb2hsv: function rgb2hsv(rgb) {\n\t\t\tvar r = rgb[0],\n\t\t\t\tg = rgb[1],\n\t\t\t\tb = rgb[2],\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tmax = Math.max(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th, s, v;\n\n\t\t\tif (max === 0)\n\t\t\t\ts = 0;\n\t\t\telse\n\t\t\t\ts = (delta / max * 1000) / 10;\n\n\t\t\tif (max == min)\n\t\t\t\th = 0;\n\t\t\telse if (r == max)\n\t\t\t\th = (g - b) / delta;\n\t\t\telse if (g == max)\n\t\t\t\th = 2 + (b - r) / delta;\n\t\t\telse if (b == max)\n\t\t\t\th = 4 + (r - g) / delta;\n\n\t\t\th = Math.min(h * 60, 360);\n\n\t\t\tif (h < 0)\n\t\t\t\th += 360;\n\n\t\t\tv = ((max / 255) * 1000) / 10;\n\n\t\t\treturn [h, s, v];\n\t\t},\n\t\thsl2rgb: function hsl2rgb(hsl) {\n\t\t\tvar h = hsl[0] / 360,\n\t\t\t\ts = hsl[1] / 100,\n\t\t\t\tl = hsl[2] / 100,\n\t\t\t\tt1, t2, t3, rgb, val;\n\n\t\t\tif (s === 0) {\n\t\t\t\tval = l * 255;\n\t\t\t\treturn [val, val, val];\n\t\t\t}\n\n\t\t\tif (l < 0.5)\n\t\t\t\tt2 = l * (1 + s);\n\t\t\telse\n\t\t\t\tt2 = l + s - l * s;\n\t\t\tt1 = 2 * l - t2;\n\n\t\t\trgb = [0, 0, 0];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\t\t\tif (t3 < 0) t3++;\n\t\t\t\tif (t3 > 1) t3--;\n\n\t\t\t\tif (6 * t3 < 1)\n\t\t\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t\t\telse if (2 * t3 < 1)\n\t\t\t\t\tval = t2;\n\t\t\t\telse if (3 * t3 < 2)\n\t\t\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t\t\telse\n\t\t\t\t\tval = t1;\n\n\t\t\t\trgb[i] = val * 255;\n\t\t\t}\n\n\t\t\treturn rgb;\n\t\t},\n\t\thsl2hsv: function hsl2hsv(hsl) {\n\t\t\tvar h = hsl[0],\n\t\t\t\ts = hsl[1] / 100,\n\t\t\t\tl = hsl[2] / 100,\n\t\t\t\tsv, v;\n\t\t\tl *= 2;\n\t\t\ts *= (l <= 1) ? l : 2 - l;\n\t\t\tv = (l + s) / 2;\n\t\t\tsv = (2 * s) / (l + s);\n\t\t\treturn [h, sv * 100, v * 100];\n\t\t},\n\t\thsv2rgb: function hsv2rgb(hsv) {\n\t\t\tvar h = hsv[0] / 60\n\t\t\tvar s = hsv[1] / 100\n\t\t\tvar v = hsv[2] / 100\n\t\t\tvar hi = Math.floor(h) % 6\n\n\t\t\tvar f = h - Math.floor(h)\n\t\t\tvar p = 255 * v * (1 - s)\n\t\t\tvar q = 255 * v * (1 - (s * f))\n\t\t\tvar t = 255 * v * (1 - (s * (1 - f)))\n\n\t\t\tv = 255 * v\n\n\t\t\tswitch (hi) {\n\t\t\t\tcase 0:\n\t\t\t\t\treturn [v, t, p]\n\t\t\t\tcase 1:\n\t\t\t\t\treturn [q, v, p]\n\t\t\t\tcase 2:\n\t\t\t\t\treturn [p, v, t]\n\t\t\t\tcase 3:\n\t\t\t\t\treturn [p, q, v]\n\t\t\t\tcase 4:\n\t\t\t\t\treturn [t, p, v]\n\t\t\t\tcase 5:\n\t\t\t\t\treturn [v, p, q]\n\t\t\t}\n\t\t},\n\t\thsv2hsl: function hsv2hsl(hsv) {\n\t\t\tvar h = hsv[0],\n\t\t\t\ts = hsv[1] / 100,\n\t\t\t\tv = hsv[2] / 100,\n\t\t\t\tsl, l;\n\n\t\t\tl = (2 - s) * v;\n\t\t\tsl = s * v;\n\t\t\tsl /= (l <= 1) ? l : 2 - l;\n\t\t\tl /= 2;\n\t\t\treturn [h, sl * 100, l * 100];\n\t\t},\n\t\t// http://www.140byt.es/keywords/color\n\t\trgb2hex: function(\n\t\t\ta, // red, as a number from 0 to 255\n\t\t\tb, // green, as a number from 0 to 255\n\t\t\tc // blue, as a number from 0 to 255\n\t\t) {\n\t\t\treturn \"#\" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1)\n\t\t},\n\t\thex2rgb: function(\n\t\t\ta // take a \"#xxxxxx\" hex string,\n\t\t) {\n\t\t\ta = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0;\n\t\t\treturn [a >> 16, a >> 8 & 255, a & 255]\n\t\t}\n\t}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Color 字典数据\n\n\t 字典数据来源 [A nicer color palette for the web](http://clrs.cc/)\n\t*/\n\tmodule.exports = {\n\t // name value nicer\n\t navy: {\n\t value: '#000080',\n\t nicer: '#001F3F'\n\t },\n\t blue: {\n\t value: '#0000ff',\n\t nicer: '#0074D9'\n\t },\n\t aqua: {\n\t value: '#00ffff',\n\t nicer: '#7FDBFF'\n\t },\n\t teal: {\n\t value: '#008080',\n\t nicer: '#39CCCC'\n\t },\n\t olive: {\n\t value: '#008000',\n\t nicer: '#3D9970'\n\t },\n\t green: {\n\t value: '#008000',\n\t nicer: '#2ECC40'\n\t },\n\t lime: {\n\t value: '#00ff00',\n\t nicer: '#01FF70'\n\t },\n\t yellow: {\n\t value: '#ffff00',\n\t nicer: '#FFDC00'\n\t },\n\t orange: {\n\t value: '#ffa500',\n\t nicer: '#FF851B'\n\t },\n\t red: {\n\t value: '#ff0000',\n\t nicer: '#FF4136'\n\t },\n\t maroon: {\n\t value: '#800000',\n\t nicer: '#85144B'\n\t },\n\t fuchsia: {\n\t value: '#ff00ff',\n\t nicer: '#F012BE'\n\t },\n\t purple: {\n\t value: '#800080',\n\t nicer: '#B10DC9'\n\t },\n\t silver: {\n\t value: '#c0c0c0',\n\t nicer: '#DDDDDD'\n\t },\n\t gray: {\n\t value: '#808080',\n\t nicer: '#AAAAAA'\n\t },\n\t black: {\n\t value: '#000000',\n\t nicer: '#111111'\n\t },\n\t white: {\n\t value: '#FFFFFF',\n\t nicer: '#FFFFFF'\n\t }\n\t}\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Text\n\n\t http://www.lipsum.com/\n\t*/\n\tvar Basic = __webpack_require__(6)\n\tvar Helper = __webpack_require__(14)\n\n\tfunction range(defaultMin, defaultMax, min, max) {\n\t return min === undefined ? Basic.natural(defaultMin, defaultMax) : // ()\n\t max === undefined ? min : // ( len )\n\t Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max )\n\t}\n\n\tmodule.exports = {\n\t // 随机生成一段文本。\n\t paragraph: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.sentence())\n\t }\n\t return result.join(' ')\n\t },\n\t // \n\t cparagraph: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.csentence())\n\t }\n\t return result.join('')\n\t },\n\t // 随机生成一个句子,第一个单词的首字母大写。\n\t sentence: function(min, max) {\n\t var len = range(12, 18, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.word())\n\t }\n\t return Helper.capitalize(result.join(' ')) + '.'\n\t },\n\t // 随机生成一个中文句子。\n\t csentence: function(min, max) {\n\t var len = range(12, 18, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.cword())\n\t }\n\n\t return result.join('') + '。'\n\t },\n\t // 随机生成一个单词。\n\t word: function(min, max) {\n\t var len = range(3, 10, min, max)\n\t var result = '';\n\t for (var i = 0; i < len; i++) {\n\t result += Basic.character('lower')\n\t }\n\t return result\n\t },\n\t // 随机生成一个或多个汉字。\n\t cword: function(pool, min, max) {\n\t // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm\n\t var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'\n\n\t var len\n\t switch (arguments.length) {\n\t case 0: // ()\n\t pool = DICT_KANZI\n\t len = 1\n\t break\n\t case 1: // ( pool )\n\t if (typeof arguments[0] === 'string') {\n\t len = 1\n\t } else {\n\t // ( length )\n\t len = pool\n\t pool = DICT_KANZI\n\t }\n\t break\n\t case 2:\n\t // ( pool, length )\n\t if (typeof arguments[0] === 'string') {\n\t len = min\n\t } else {\n\t // ( min, max )\n\t len = this.natural(pool, min)\n\t pool = DICT_KANZI\n\t }\n\t break\n\t case 3:\n\t len = this.natural(min, max)\n\t break\n\t }\n\n\t var result = ''\n\t for (var i = 0; i < len; i++) {\n\t result += pool.charAt(this.natural(0, pool.length - 1))\n\t }\n\t return result\n\t },\n\t // 随机生成一句标题,其中每个单词的首字母大写。\n\t title: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.capitalize(this.word()))\n\t }\n\t return result.join(' ')\n\t },\n\t // 随机生成一句中文标题。\n\t ctitle: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.cword())\n\t }\n\t return result.join('')\n\t }\n\t}\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Helpers\n\t*/\n\n\tvar Util = __webpack_require__(3)\n\n\tmodule.exports = {\n\t\t// 把字符串的第一个字母转换为大写。\n\t\tcapitalize: function(word) {\n\t\t\treturn (word + '').charAt(0).toUpperCase() + (word + '').substr(1)\n\t\t},\n\t\t// 把字符串转换为大写。\n\t\tupper: function(str) {\n\t\t\treturn (str + '').toUpperCase()\n\t\t},\n\t\t// 把字符串转换为小写。\n\t\tlower: function(str) {\n\t\t\treturn (str + '').toLowerCase()\n\t\t},\n\t\t// 从数组中随机选取一个元素,并返回。\n\t\tpick: function pick(arr, min, max) {\n\t\t\t// pick( item1, item2 ... )\n\t\t\tif (!Util.isArray(arr)) {\n\t\t\t\tarr = [].slice.call(arguments)\n\t\t\t\tmin = 1\n\t\t\t\tmax = 1\n\t\t\t} else {\n\t\t\t\t// pick( [ item1, item2 ... ] )\n\t\t\t\tif (min === undefined) min = 1\n\n\t\t\t\t// pick( [ item1, item2 ... ], count )\n\t\t\t\tif (max === undefined) max = min\n\t\t\t}\n\n\t\t\tif (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]\n\n\t\t\t// pick( [ item1, item2 ... ], min, max )\n\t\t\treturn this.shuffle(arr, min, max)\n\n\t\t\t// 通过参数个数判断方法签名,扩展性太差!#90\n\t\t\t// switch (arguments.length) {\n\t\t\t// \tcase 1:\n\t\t\t// \t\t// pick( [ item1, item2 ... ] )\n\t\t\t// \t\treturn arr[this.natural(0, arr.length - 1)]\n\t\t\t// \tcase 2:\n\t\t\t// \t\t// pick( [ item1, item2 ... ], count )\n\t\t\t// \t\tmax = min\n\t\t\t// \t\t\t/* falls through */\n\t\t\t// \tcase 3:\n\t\t\t// \t\t// pick( [ item1, item2 ... ], min, max )\n\t\t\t// \t\treturn this.shuffle(arr, min, max)\n\t\t\t// }\n\t\t},\n\t\t/*\n\t\t 打乱数组中元素的顺序,并返回。\n\t\t Given an array, scramble the order and return it.\n\n\t\t 其他的实现思路:\n\t\t // https://code.google.com/p/jslibs/wiki/JavascriptTips\n\t\t result = result.sort(function() {\n\t\t return Math.random() - 0.5\n\t\t })\n\t\t*/\n\t\tshuffle: function shuffle(arr, min, max) {\n\t\t\tarr = arr || []\n\t\t\tvar old = arr.slice(0),\n\t\t\t\tresult = [],\n\t\t\t\tindex = 0,\n\t\t\t\tlength = old.length;\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tindex = this.natural(0, old.length - 1)\n\t\t\t\tresult.push(old[index])\n\t\t\t\told.splice(index, 1)\n\t\t\t}\n\t\t\tswitch (arguments.length) {\n\t\t\t\tcase 0:\n\t\t\t\tcase 1:\n\t\t\t\t\treturn result\n\t\t\t\tcase 2:\n\t\t\t\t\tmax = min\n\t\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tmin = parseInt(min, 10)\n\t\t\t\t\tmax = parseInt(max, 10)\n\t\t\t\t\treturn result.slice(0, this.natural(min, max))\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t * Random.order(item, item)\n\t\t * Random.order([item, item ...])\n\n\t\t 顺序获取数组中的元素\n\n\t\t [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22)\n\n\t\t 不支持单独调用!\n\t\t*/\n\t\torder: function order(array) {\n\t\t\torder.cache = order.cache || {}\n\n\t\t\tif (arguments.length > 1) array = [].slice.call(arguments, 0)\n\n\t\t\t// options.context.path/templatePath\n\t\t\tvar options = order.options\n\t\t\tvar templatePath = options.context.templatePath.join('.')\n\n\t\t\tvar cache = (\n\t\t\t\torder.cache[templatePath] = order.cache[templatePath] || {\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tarray: array\n\t\t\t\t}\n\t\t\t)\n\n\t\t\treturn cache.array[cache.index++ % cache.array.length]\n\t\t}\n\t}\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Name\n\n\t [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html)\n\t*/\n\tmodule.exports = {\n\t\t// 随机生成一个常见的英文名。\n\t\tfirst: function() {\n\t\t\tvar names = [\n\t\t\t\t// male\n\t\t\t\t\"James\", \"John\", \"Robert\", \"Michael\", \"William\",\n\t\t\t\t\"David\", \"Richard\", \"Charles\", \"Joseph\", \"Thomas\",\n\t\t\t\t\"Christopher\", \"Daniel\", \"Paul\", \"Mark\", \"Donald\",\n\t\t\t\t\"George\", \"Kenneth\", \"Steven\", \"Edward\", \"Brian\",\n\t\t\t\t\"Ronald\", \"Anthony\", \"Kevin\", \"Jason\", \"Matthew\",\n\t\t\t\t\"Gary\", \"Timothy\", \"Jose\", \"Larry\", \"Jeffrey\",\n\t\t\t\t\"Frank\", \"Scott\", \"Eric\"\n\t\t\t].concat([\n\t\t\t\t// female\n\t\t\t\t\"Mary\", \"Patricia\", \"Linda\", \"Barbara\", \"Elizabeth\",\n\t\t\t\t\"Jennifer\", \"Maria\", \"Susan\", \"Margaret\", \"Dorothy\",\n\t\t\t\t\"Lisa\", \"Nancy\", \"Karen\", \"Betty\", \"Helen\",\n\t\t\t\t\"Sandra\", \"Donna\", \"Carol\", \"Ruth\", \"Sharon\",\n\t\t\t\t\"Michelle\", \"Laura\", \"Sarah\", \"Kimberly\", \"Deborah\",\n\t\t\t\t\"Jessica\", \"Shirley\", \"Cynthia\", \"Angela\", \"Melissa\",\n\t\t\t\t\"Brenda\", \"Amy\", \"Anna\"\n\t\t\t])\n\t\t\treturn this.pick(names)\n\t\t\t\t// or this.capitalize(this.word())\n\t\t},\n\t\t// 随机生成一个常见的英文姓。\n\t\tlast: function() {\n\t\t\tvar names = [\n\t\t\t\t\"Smith\", \"Johnson\", \"Williams\", \"Brown\", \"Jones\",\n\t\t\t\t\"Miller\", \"Davis\", \"Garcia\", \"Rodriguez\", \"Wilson\",\n\t\t\t\t\"Martinez\", \"Anderson\", \"Taylor\", \"Thomas\", \"Hernandez\",\n\t\t\t\t\"Moore\", \"Martin\", \"Jackson\", \"Thompson\", \"White\",\n\t\t\t\t\"Lopez\", \"Lee\", \"Gonzalez\", \"Harris\", \"Clark\",\n\t\t\t\t\"Lewis\", \"Robinson\", \"Walker\", \"Perez\", \"Hall\",\n\t\t\t\t\"Young\", \"Allen\"\n\t\t\t]\n\t\t\treturn this.pick(names)\n\t\t\t\t// or this.capitalize(this.word())\n\t\t},\n\t\t// 随机生成一个常见的英文姓名。\n\t\tname: function(middle) {\n\t\t\treturn this.first() + ' ' +\n\t\t\t\t(middle ? this.first() + ' ' : '') +\n\t\t\t\tthis.last()\n\t\t},\n\t\t/*\n\t\t 随机生成一个常见的中文姓。\n\t\t [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm)\n\t\t [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/)\n\t\t */\n\t\tcfirst: function() {\n\t\t\tvar names = (\n\t\t\t\t'王 李 张 刘 陈 杨 赵 黄 周 吴 ' +\n\t\t\t\t'徐 孙 胡 朱 高 林 何 郭 马 罗 ' +\n\t\t\t\t'梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' +\n\t\t\t\t'程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' +\n\t\t\t\t'苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' +\n\t\t\t\t'余 潘 杜 戴 夏 锺 汪 田 任 姜 ' +\n\t\t\t\t'范 方 石 姚 谭 廖 邹 熊 金 陆 ' +\n\t\t\t\t'郝 孔 白 崔 康 毛 邱 秦 江 史 ' +\n\t\t\t\t'顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' +\n\t\t\t\t'尹 黎 易 常 武 乔 贺 赖 龚 文'\n\t\t\t).split(' ')\n\t\t\treturn this.pick(names)\n\t\t},\n\t\t/*\n\t\t 随机生成一个常见的中文名。\n\t\t [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html)\n\t\t */\n\t\tclast: function() {\n\t\t\tvar names = (\n\t\t\t\t'伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' +\n\t\t\t\t'洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' +\n\t\t\t\t'平 刚 桂英'\n\t\t\t).split(' ')\n\t\t\treturn this.pick(names)\n\t\t},\n\t\t// 随机生成一个常见的中文姓名。\n\t\tcname: function() {\n\t\t\treturn this.cfirst() + this.clast()\n\t\t}\n\t}\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Web\n\t*/\n\tmodule.exports = {\n\t /*\n\t 随机生成一个 URL。\n\n\t [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt)\n\t http Hypertext Transfer Protocol \n\t ftp File Transfer protocol \n\t gopher The Gopher protocol \n\t mailto Electronic mail address \n\t mid Message identifiers for electronic mail \n\t cid Content identifiers for MIME body part \n\t news Usenet news \n\t nntp Usenet news for local NNTP access only \n\t prospero Access using the prospero protocols \n\t telnet rlogin tn3270 Reference to interactive sessions\n\t wais Wide Area Information Servers \n\t */\n\t url: function(protocol, host) {\n\t return (protocol || this.protocol()) + '://' + // protocol?\n\t (host || this.domain()) + // host?\n\t '/' + this.word()\n\t },\n\t // 随机生成一个 URL 协议。\n\t protocol: function() {\n\t return this.pick(\n\t // 协议簇\n\t 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ')\n\t )\n\t },\n\t // 随机生成一个域名。\n\t domain: function(tld) {\n\t return this.word() + '.' + (tld || this.tld())\n\t },\n\t /*\n\t 随机生成一个顶级域名。\n\t 国际顶级域名 international top-level domain-names, iTLDs\n\t 国家顶级域名 national top-level domainnames, nTLDs\n\t [域名后缀大全](http://www.163ns.com/zixun/post/4417.html)\n\t */\n\t tld: function() { // Top Level Domain\n\t return this.pick(\n\t (\n\t // 域名后缀\n\t 'com net org edu gov int mil cn ' +\n\t // 国内域名\n\t 'com.cn net.cn gov.cn org.cn ' +\n\t // 中文国内域名\n\t '中国 中国互联.公司 中国互联.网络 ' +\n\t // 新国际域名\n\t 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' +\n\t // 世界各国域名后缀\n\t 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw'\n\t ).split(' ')\n\t )\n\t },\n\t // 随机生成一个邮件地址。\n\t email: function(domain) {\n\t return this.character('lower') + '.' + this.word() + '@' +\n\t (\n\t domain ||\n\t (this.word() + '.' + this.tld())\n\t )\n\t // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld()\n\t // return this.word() + '@' + (domain || this.domain())\n\t },\n\t // 随机生成一个 IP 地址。\n\t ip: function() {\n\t return this.natural(0, 255) + '.' +\n\t this.natural(0, 255) + '.' +\n\t this.natural(0, 255) + '.' +\n\t this.natural(0, 255)\n\t }\n\t}\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Address\n\t*/\n\n\tvar DICT = __webpack_require__(18)\n\tvar REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']\n\n\tmodule.exports = {\n\t // 随机生成一个大区。\n\t region: function() {\n\t return this.pick(REGION)\n\t },\n\t // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。\n\t province: function() {\n\t return this.pick(DICT).name\n\t },\n\t // 随机生成一个(中国)市。\n\t city: function(prefix) {\n\t var province = this.pick(DICT)\n\t var city = this.pick(province.children)\n\t return prefix ? [province.name, city.name].join(' ') : city.name\n\t },\n\t // 随机生成一个(中国)县。\n\t county: function(prefix) {\n\t var province = this.pick(DICT)\n\t var city = this.pick(province.children)\n\t var county = this.pick(city.children) || {\n\t name: '-'\n\t }\n\t return prefix ? [province.name, city.name, county.name].join(' ') : county.name\n\t },\n\t // 随机生成一个邮政编码(六位数字)。\n\t zip: function(len) {\n\t var zip = ''\n\t for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9)\n\t return zip\n\t }\n\n\t // address: function() {},\n\t // phone: function() {},\n\t // areacode: function() {},\n\t // street: function() {},\n\t // street_suffixes: function() {},\n\t // street_suffix: function() {},\n\t // states: function() {},\n\t // state: function() {},\n\t}\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Address 字典数据\n\n\t 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856\n\n\t 国标 省(市)级行政区划码表\n\n\t 华北 北京市 天津市 河北省 山西省 内蒙古自治区\n\t 东北 辽宁省 吉林省 黑龙江省\n\t 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省\n\t 华南 广东省 广西壮族自治区 海南省\n\t 华中 河南省 湖北省 湖南省\n\t 西南 重庆市 四川省 贵州省 云南省 西藏自治区\n\t 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区\n\t 港澳台 香港特别行政区 澳门特别行政区 台湾省\n\t \n\t **排序**\n\t \n\t ```js\n\t var map = {}\n\t _.each(_.keys(REGIONS),function(id){\n\t map[id] = REGIONS[ID]\n\t })\n\t JSON.stringify(map)\n\t ```\n\t*/\n\tvar DICT = {\n\t \"110000\": \"北京\",\n\t \"110100\": \"北京市\",\n\t \"110101\": \"东城区\",\n\t \"110102\": \"西城区\",\n\t \"110105\": \"朝阳区\",\n\t \"110106\": \"丰台区\",\n\t \"110107\": \"石景山区\",\n\t \"110108\": \"海淀区\",\n\t \"110109\": \"门头沟区\",\n\t \"110111\": \"房山区\",\n\t \"110112\": \"通州区\",\n\t \"110113\": \"顺义区\",\n\t \"110114\": \"昌平区\",\n\t \"110115\": \"大兴区\",\n\t \"110116\": \"怀柔区\",\n\t \"110117\": \"平谷区\",\n\t \"110228\": \"密云县\",\n\t \"110229\": \"延庆县\",\n\t \"110230\": \"其它区\",\n\t \"120000\": \"天津\",\n\t \"120100\": \"天津市\",\n\t \"120101\": \"和平区\",\n\t \"120102\": \"河东区\",\n\t \"120103\": \"河西区\",\n\t \"120104\": \"南开区\",\n\t \"120105\": \"河北区\",\n\t \"120106\": \"红桥区\",\n\t \"120110\": \"东丽区\",\n\t \"120111\": \"西青区\",\n\t \"120112\": \"津南区\",\n\t \"120113\": \"北辰区\",\n\t \"120114\": \"武清区\",\n\t \"120115\": \"宝坻区\",\n\t \"120116\": \"滨海新区\",\n\t \"120221\": \"宁河县\",\n\t \"120223\": \"静海县\",\n\t \"120225\": \"蓟县\",\n\t \"120226\": \"其它区\",\n\t \"130000\": \"河北省\",\n\t \"130100\": \"石家庄市\",\n\t \"130102\": \"长安区\",\n\t \"130103\": \"桥东区\",\n\t \"130104\": \"桥西区\",\n\t \"130105\": \"新华区\",\n\t \"130107\": \"井陉矿区\",\n\t \"130108\": \"裕华区\",\n\t \"130121\": \"井陉县\",\n\t \"130123\": \"正定县\",\n\t \"130124\": \"栾城县\",\n\t \"130125\": \"行唐县\",\n\t \"130126\": \"灵寿县\",\n\t \"130127\": \"高邑县\",\n\t \"130128\": \"深泽县\",\n\t \"130129\": \"赞皇县\",\n\t \"130130\": \"无极县\",\n\t \"130131\": \"平山县\",\n\t \"130132\": \"元氏县\",\n\t \"130133\": \"赵县\",\n\t \"130181\": \"辛集市\",\n\t \"130182\": \"藁城市\",\n\t \"130183\": \"晋州市\",\n\t \"130184\": \"新乐市\",\n\t \"130185\": \"鹿泉市\",\n\t \"130186\": \"其它区\",\n\t \"130200\": \"唐山市\",\n\t \"130202\": \"路南区\",\n\t \"130203\": \"路北区\",\n\t \"130204\": \"古冶区\",\n\t \"130205\": \"开平区\",\n\t \"130207\": \"丰南区\",\n\t \"130208\": \"丰润区\",\n\t \"130223\": \"滦县\",\n\t \"130224\": \"滦南县\",\n\t \"130225\": \"乐亭县\",\n\t \"130227\": \"迁西县\",\n\t \"130229\": \"玉田县\",\n\t \"130230\": \"曹妃甸区\",\n\t \"130281\": \"遵化市\",\n\t \"130283\": \"迁安市\",\n\t \"130284\": \"其它区\",\n\t \"130300\": \"秦皇岛市\",\n\t \"130302\": \"海港区\",\n\t \"130303\": \"山海关区\",\n\t \"130304\": \"北戴河区\",\n\t \"130321\": \"青龙满族自治县\",\n\t \"130322\": \"昌黎县\",\n\t \"130323\": \"抚宁县\",\n\t \"130324\": \"卢龙县\",\n\t \"130398\": \"其它区\",\n\t \"130400\": \"邯郸市\",\n\t \"130402\": \"邯山区\",\n\t \"130403\": \"丛台区\",\n\t \"130404\": \"复兴区\",\n\t \"130406\": \"峰峰矿区\",\n\t \"130421\": \"邯郸县\",\n\t \"130423\": \"临漳县\",\n\t \"130424\": \"成安县\",\n\t \"130425\": \"大名县\",\n\t \"130426\": \"涉县\",\n\t \"130427\": \"磁县\",\n\t \"130428\": \"肥乡县\",\n\t \"130429\": \"永年县\",\n\t \"130430\": \"邱县\",\n\t \"130431\": \"鸡泽县\",\n\t \"130432\": \"广平县\",\n\t \"130433\": \"馆陶县\",\n\t \"130434\": \"魏县\",\n\t \"130435\": \"曲周县\",\n\t \"130481\": \"武安市\",\n\t \"130482\": \"其它区\",\n\t \"130500\": \"邢台市\",\n\t \"130502\": \"桥东区\",\n\t \"130503\": \"桥西区\",\n\t \"130521\": \"邢台县\",\n\t \"130522\": \"临城县\",\n\t \"130523\": \"内丘县\",\n\t \"130524\": \"柏乡县\",\n\t \"130525\": \"隆尧县\",\n\t \"130526\": \"任县\",\n\t \"130527\": \"南和县\",\n\t \"130528\": \"宁晋县\",\n\t \"130529\": \"巨鹿县\",\n\t \"130530\": \"新河县\",\n\t \"130531\": \"广宗县\",\n\t \"130532\": \"平乡县\",\n\t \"130533\": \"威县\",\n\t \"130534\": \"清河县\",\n\t \"130535\": \"临西县\",\n\t \"130581\": \"南宫市\",\n\t \"130582\": \"沙河市\",\n\t \"130583\": \"其它区\",\n\t \"130600\": \"保定市\",\n\t \"130602\": \"新市区\",\n\t \"130603\": \"北市区\",\n\t \"130604\": \"南市区\",\n\t \"130621\": \"满城县\",\n\t \"130622\": \"清苑县\",\n\t \"130623\": \"涞水县\",\n\t \"130624\": \"阜平县\",\n\t \"130625\": \"徐水县\",\n\t \"130626\": \"定兴县\",\n\t \"130627\": \"唐县\",\n\t \"130628\": \"高阳县\",\n\t \"130629\": \"容城县\",\n\t \"130630\": \"涞源县\",\n\t \"130631\": \"望都县\",\n\t \"130632\": \"安新县\",\n\t \"130633\": \"易县\",\n\t \"130634\": \"曲阳县\",\n\t \"130635\": \"蠡县\",\n\t \"130636\": \"顺平县\",\n\t \"130637\": \"博野县\",\n\t \"130638\": \"雄县\",\n\t \"130681\": \"涿州市\",\n\t \"130682\": \"定州市\",\n\t \"130683\": \"安国市\",\n\t \"130684\": \"高碑店市\",\n\t \"130699\": \"其它区\",\n\t \"130700\": \"张家口市\",\n\t \"130702\": \"桥东区\",\n\t \"130703\": \"桥西区\",\n\t \"130705\": \"宣化区\",\n\t \"130706\": \"下花园区\",\n\t \"130721\": \"宣化县\",\n\t \"130722\": \"张北县\",\n\t \"130723\": \"康保县\",\n\t \"130724\": \"沽源县\",\n\t \"130725\": \"尚义县\",\n\t \"130726\": \"蔚县\",\n\t \"130727\": \"阳原县\",\n\t \"130728\": \"怀安县\",\n\t \"130729\": \"万全县\",\n\t \"130730\": \"怀来县\",\n\t \"130731\": \"涿鹿县\",\n\t \"130732\": \"赤城县\",\n\t \"130733\": \"崇礼县\",\n\t \"130734\": \"其它区\",\n\t \"130800\": \"承德市\",\n\t \"130802\": \"双桥区\",\n\t \"130803\": \"双滦区\",\n\t \"130804\": \"鹰手营子矿区\",\n\t \"130821\": \"承德县\",\n\t \"130822\": \"兴隆县\",\n\t \"130823\": \"平泉县\",\n\t \"130824\": \"滦平县\",\n\t \"130825\": \"隆化县\",\n\t \"130826\": \"丰宁满族自治县\",\n\t \"130827\": \"宽城满族自治县\",\n\t \"130828\": \"围场满族蒙古族自治县\",\n\t \"130829\": \"其它区\",\n\t \"130900\": \"沧州市\",\n\t \"130902\": \"新华区\",\n\t \"130903\": \"运河区\",\n\t \"130921\": \"沧县\",\n\t \"130922\": \"青县\",\n\t \"130923\": \"东光县\",\n\t \"130924\": \"海兴县\",\n\t \"130925\": \"盐山县\",\n\t \"130926\": \"肃宁县\",\n\t \"130927\": \"南皮县\",\n\t \"130928\": \"吴桥县\",\n\t \"130929\": \"献县\",\n\t \"130930\": \"孟村回族自治县\",\n\t \"130981\": \"泊头市\",\n\t \"130982\": \"任丘市\",\n\t \"130983\": \"黄骅市\",\n\t \"130984\": \"河间市\",\n\t \"130985\": \"其它区\",\n\t \"131000\": \"廊坊市\",\n\t \"131002\": \"安次区\",\n\t \"131003\": \"广阳区\",\n\t \"131022\": \"固安县\",\n\t \"131023\": \"永清县\",\n\t \"131024\": \"香河县\",\n\t \"131025\": \"大城县\",\n\t \"131026\": \"文安县\",\n\t \"131028\": \"大厂回族自治县\",\n\t \"131081\": \"霸州市\",\n\t \"131082\": \"三河市\",\n\t \"131083\": \"其它区\",\n\t \"131100\": \"衡水市\",\n\t \"131102\": \"桃城区\",\n\t \"131121\": \"枣强县\",\n\t \"131122\": \"武邑县\",\n\t \"131123\": \"武强县\",\n\t \"131124\": \"饶阳县\",\n\t \"131125\": \"安平县\",\n\t \"131126\": \"故城县\",\n\t \"131127\": \"景县\",\n\t \"131128\": \"阜城县\",\n\t \"131181\": \"冀州市\",\n\t \"131182\": \"深州市\",\n\t \"131183\": \"其它区\",\n\t \"140000\": \"山西省\",\n\t \"140100\": \"太原市\",\n\t \"140105\": \"小店区\",\n\t \"140106\": \"迎泽区\",\n\t \"140107\": \"杏花岭区\",\n\t \"140108\": \"尖草坪区\",\n\t \"140109\": \"万柏林区\",\n\t \"140110\": \"晋源区\",\n\t \"140121\": \"清徐县\",\n\t \"140122\": \"阳曲县\",\n\t \"140123\": \"娄烦县\",\n\t \"140181\": \"古交市\",\n\t \"140182\": \"其它区\",\n\t \"140200\": \"大同市\",\n\t \"140202\": \"城区\",\n\t \"140203\": \"矿区\",\n\t \"140211\": \"南郊区\",\n\t \"140212\": \"新荣区\",\n\t \"140221\": \"阳高县\",\n\t \"140222\": \"天镇县\",\n\t \"140223\": \"广灵县\",\n\t \"140224\": \"灵丘县\",\n\t \"140225\": \"浑源县\",\n\t \"140226\": \"左云县\",\n\t \"140227\": \"大同县\",\n\t \"140228\": \"其它区\",\n\t \"140300\": \"阳泉市\",\n\t \"140302\": \"城区\",\n\t \"140303\": \"矿区\",\n\t \"140311\": \"郊区\",\n\t \"140321\": \"平定县\",\n\t \"140322\": \"盂县\",\n\t \"140323\": \"其它区\",\n\t \"140400\": \"长治市\",\n\t \"140421\": \"长治县\",\n\t \"140423\": \"襄垣县\",\n\t \"140424\": \"屯留县\",\n\t \"140425\": \"平顺县\",\n\t \"140426\": \"黎城县\",\n\t \"140427\": \"壶关县\",\n\t \"140428\": \"长子县\",\n\t \"140429\": \"武乡县\",\n\t \"140430\": \"沁县\",\n\t \"140431\": \"沁源县\",\n\t \"140481\": \"潞城市\",\n\t \"140482\": \"城区\",\n\t \"140483\": \"郊区\",\n\t \"140485\": \"其它区\",\n\t \"140500\": \"晋城市\",\n\t \"140502\": \"城区\",\n\t \"140521\": \"沁水县\",\n\t \"140522\": \"阳城县\",\n\t \"140524\": \"陵川县\",\n\t \"140525\": \"泽州县\",\n\t \"140581\": \"高平市\",\n\t \"140582\": \"其它区\",\n\t \"140600\": \"朔州市\",\n\t \"140602\": \"朔城区\",\n\t \"140603\": \"平鲁区\",\n\t \"140621\": \"山阴县\",\n\t \"140622\": \"应县\",\n\t \"140623\": \"右玉县\",\n\t \"140624\": \"怀仁县\",\n\t \"140625\": \"其它区\",\n\t \"140700\": \"晋中市\",\n\t \"140702\": \"榆次区\",\n\t \"140721\": \"榆社县\",\n\t \"140722\": \"左权县\",\n\t \"140723\": \"和顺县\",\n\t \"140724\": \"昔阳县\",\n\t \"140725\": \"寿阳县\",\n\t \"140726\": \"太谷县\",\n\t \"140727\": \"祁县\",\n\t \"140728\": \"平遥县\",\n\t \"140729\": \"灵石县\",\n\t \"140781\": \"介休市\",\n\t \"140782\": \"其它区\",\n\t \"140800\": \"运城市\",\n\t \"140802\": \"盐湖区\",\n\t \"140821\": \"临猗县\",\n\t \"140822\": \"万荣县\",\n\t \"140823\": \"闻喜县\",\n\t \"140824\": \"稷山县\",\n\t \"140825\": \"新绛县\",\n\t \"140826\": \"绛县\",\n\t \"140827\": \"垣曲县\",\n\t \"140828\": \"夏县\",\n\t \"140829\": \"平陆县\",\n\t \"140830\": \"芮城县\",\n\t \"140881\": \"永济市\",\n\t \"140882\": \"河津市\",\n\t \"140883\": \"其它区\",\n\t \"140900\": \"忻州市\",\n\t \"140902\": \"忻府区\",\n\t \"140921\": \"定襄县\",\n\t \"140922\": \"五台县\",\n\t \"140923\": \"代县\",\n\t \"140924\": \"繁峙县\",\n\t \"140925\": \"宁武县\",\n\t \"140926\": \"静乐县\",\n\t \"140927\": \"神池县\",\n\t \"140928\": \"五寨县\",\n\t \"140929\": \"岢岚县\",\n\t \"140930\": \"河曲县\",\n\t \"140931\": \"保德县\",\n\t \"140932\": \"偏关县\",\n\t \"140981\": \"原平市\",\n\t \"140982\": \"其它区\",\n\t \"141000\": \"临汾市\",\n\t \"141002\": \"尧都区\",\n\t \"141021\": \"曲沃县\",\n\t \"141022\": \"翼城县\",\n\t \"141023\": \"襄汾县\",\n\t \"141024\": \"洪洞县\",\n\t \"141025\": \"古县\",\n\t \"141026\": \"安泽县\",\n\t \"141027\": \"浮山县\",\n\t \"141028\": \"吉县\",\n\t \"141029\": \"乡宁县\",\n\t \"141030\": \"大宁县\",\n\t \"141031\": \"隰县\",\n\t \"141032\": \"永和县\",\n\t \"141033\": \"蒲县\",\n\t \"141034\": \"汾西县\",\n\t \"141081\": \"侯马市\",\n\t \"141082\": \"霍州市\",\n\t \"141083\": \"其它区\",\n\t \"141100\": \"吕梁市\",\n\t \"141102\": \"离石区\",\n\t \"141121\": \"文水县\",\n\t \"141122\": \"交城县\",\n\t \"141123\": \"兴县\",\n\t \"141124\": \"临县\",\n\t \"141125\": \"柳林县\",\n\t \"141126\": \"石楼县\",\n\t \"141127\": \"岚县\",\n\t \"141128\": \"方山县\",\n\t \"141129\": \"中阳县\",\n\t \"141130\": \"交口县\",\n\t \"141181\": \"孝义市\",\n\t \"141182\": \"汾阳市\",\n\t \"141183\": \"其它区\",\n\t \"150000\": \"内蒙古自治区\",\n\t \"150100\": \"呼和浩特市\",\n\t \"150102\": \"新城区\",\n\t \"150103\": \"回民区\",\n\t \"150104\": \"玉泉区\",\n\t \"150105\": \"赛罕区\",\n\t \"150121\": \"土默特左旗\",\n\t \"150122\": \"托克托县\",\n\t \"150123\": \"和林格尔县\",\n\t \"150124\": \"清水河县\",\n\t \"150125\": \"武川县\",\n\t \"150126\": \"其它区\",\n\t \"150200\": \"包头市\",\n\t \"150202\": \"东河区\",\n\t \"150203\": \"昆都仑区\",\n\t \"150204\": \"青山区\",\n\t \"150205\": \"石拐区\",\n\t \"150206\": \"白云鄂博矿区\",\n\t \"150207\": \"九原区\",\n\t \"150221\": \"土默特右旗\",\n\t \"150222\": \"固阳县\",\n\t \"150223\": \"达尔罕茂明安联合旗\",\n\t \"150224\": \"其它区\",\n\t \"150300\": \"乌海市\",\n\t \"150302\": \"海勃湾区\",\n\t \"150303\": \"海南区\",\n\t \"150304\": \"乌达区\",\n\t \"150305\": \"其它区\",\n\t \"150400\": \"赤峰市\",\n\t \"150402\": \"红山区\",\n\t \"150403\": \"元宝山区\",\n\t \"150404\": \"松山区\",\n\t \"150421\": \"阿鲁科尔沁旗\",\n\t \"150422\": \"巴林左旗\",\n\t \"150423\": \"巴林右旗\",\n\t \"150424\": \"林西县\",\n\t \"150425\": \"克什克腾旗\",\n\t \"150426\": \"翁牛特旗\",\n\t \"150428\": \"喀喇沁旗\",\n\t \"150429\": \"宁城县\",\n\t \"150430\": \"敖汉旗\",\n\t \"150431\": \"其它区\",\n\t \"150500\": \"通辽市\",\n\t \"150502\": \"科尔沁区\",\n\t \"150521\": \"科尔沁左翼中旗\",\n\t \"150522\": \"科尔沁左翼后旗\",\n\t \"150523\": \"开鲁县\",\n\t \"150524\": \"库伦旗\",\n\t \"150525\": \"奈曼旗\",\n\t \"150526\": \"扎鲁特旗\",\n\t \"150581\": \"霍林郭勒市\",\n\t \"150582\": \"其它区\",\n\t \"150600\": \"鄂尔多斯市\",\n\t \"150602\": \"东胜区\",\n\t \"150621\": \"达拉特旗\",\n\t \"150622\": \"准格尔旗\",\n\t \"150623\": \"鄂托克前旗\",\n\t \"150624\": \"鄂托克旗\",\n\t \"150625\": \"杭锦旗\",\n\t \"150626\": \"乌审旗\",\n\t \"150627\": \"伊金霍洛旗\",\n\t \"150628\": \"其它区\",\n\t \"150700\": \"呼伦贝尔市\",\n\t \"150702\": \"海拉尔区\",\n\t \"150703\": \"扎赉诺尔区\",\n\t \"150721\": \"阿荣旗\",\n\t \"150722\": \"莫力达瓦达斡尔族自治旗\",\n\t \"150723\": \"鄂伦春自治旗\",\n\t \"150724\": \"鄂温克族自治旗\",\n\t \"150725\": \"陈巴尔虎旗\",\n\t \"150726\": \"新巴尔虎左旗\",\n\t \"150727\": \"新巴尔虎右旗\",\n\t \"150781\": \"满洲里市\",\n\t \"150782\": \"牙克石市\",\n\t \"150783\": \"扎兰屯市\",\n\t \"150784\": \"额尔古纳市\",\n\t \"150785\": \"根河市\",\n\t \"150786\": \"其它区\",\n\t \"150800\": \"巴彦淖尔市\",\n\t \"150802\": \"临河区\",\n\t \"150821\": \"五原县\",\n\t \"150822\": \"磴口县\",\n\t \"150823\": \"乌拉特前旗\",\n\t \"150824\": \"乌拉特中旗\",\n\t \"150825\": \"乌拉特后旗\",\n\t \"150826\": \"杭锦后旗\",\n\t \"150827\": \"其它区\",\n\t \"150900\": \"乌兰察布市\",\n\t \"150902\": \"集宁区\",\n\t \"150921\": \"卓资县\",\n\t \"150922\": \"化德县\",\n\t \"150923\": \"商都县\",\n\t \"150924\": \"兴和县\",\n\t \"150925\": \"凉城县\",\n\t \"150926\": \"察哈尔右翼前旗\",\n\t \"150927\": \"察哈尔右翼中旗\",\n\t \"150928\": \"察哈尔右翼后旗\",\n\t \"150929\": \"四子王旗\",\n\t \"150981\": \"丰镇市\",\n\t \"150982\": \"其它区\",\n\t \"152200\": \"兴安盟\",\n\t \"152201\": \"乌兰浩特市\",\n\t \"152202\": \"阿尔山市\",\n\t \"152221\": \"科尔沁右翼前旗\",\n\t \"152222\": \"科尔沁右翼中旗\",\n\t \"152223\": \"扎赉特旗\",\n\t \"152224\": \"突泉县\",\n\t \"152225\": \"其它区\",\n\t \"152500\": \"锡林郭勒盟\",\n\t \"152501\": \"二连浩特市\",\n\t \"152502\": \"锡林浩特市\",\n\t \"152522\": \"阿巴嘎旗\",\n\t \"152523\": \"苏尼特左旗\",\n\t \"152524\": \"苏尼特右旗\",\n\t \"152525\": \"东乌珠穆沁旗\",\n\t \"152526\": \"西乌珠穆沁旗\",\n\t \"152527\": \"太仆寺旗\",\n\t \"152528\": \"镶黄旗\",\n\t \"152529\": \"正镶白旗\",\n\t \"152530\": \"正蓝旗\",\n\t \"152531\": \"多伦县\",\n\t \"152532\": \"其它区\",\n\t \"152900\": \"阿拉善盟\",\n\t \"152921\": \"阿拉善左旗\",\n\t \"152922\": \"阿拉善右旗\",\n\t \"152923\": \"额济纳旗\",\n\t \"152924\": \"其它区\",\n\t \"210000\": \"辽宁省\",\n\t \"210100\": \"沈阳市\",\n\t \"210102\": \"和平区\",\n\t \"210103\": \"沈河区\",\n\t \"210104\": \"大东区\",\n\t \"210105\": \"皇姑区\",\n\t \"210106\": \"铁西区\",\n\t \"210111\": \"苏家屯区\",\n\t \"210112\": \"东陵区\",\n\t \"210113\": \"新城子区\",\n\t \"210114\": \"于洪区\",\n\t \"210122\": \"辽中县\",\n\t \"210123\": \"康平县\",\n\t \"210124\": \"法库县\",\n\t \"210181\": \"新民市\",\n\t \"210184\": \"沈北新区\",\n\t \"210185\": \"其它区\",\n\t \"210200\": \"大连市\",\n\t \"210202\": \"中山区\",\n\t \"210203\": \"西岗区\",\n\t \"210204\": \"沙河口区\",\n\t \"210211\": \"甘井子区\",\n\t \"210212\": \"旅顺口区\",\n\t \"210213\": \"金州区\",\n\t \"210224\": \"长海县\",\n\t \"210281\": \"瓦房店市\",\n\t \"210282\": \"普兰店市\",\n\t \"210283\": \"庄河市\",\n\t \"210298\": \"其它区\",\n\t \"210300\": \"鞍山市\",\n\t \"210302\": \"铁东区\",\n\t \"210303\": \"铁西区\",\n\t \"210304\": \"立山区\",\n\t \"210311\": \"千山区\",\n\t \"210321\": \"台安县\",\n\t \"210323\": \"岫岩满族自治县\",\n\t \"210381\": \"海城市\",\n\t \"210382\": \"其它区\",\n\t \"210400\": \"抚顺市\",\n\t \"210402\": \"新抚区\",\n\t \"210403\": \"东洲区\",\n\t \"210404\": \"望花区\",\n\t \"210411\": \"顺城区\",\n\t \"210421\": \"抚顺县\",\n\t \"210422\": \"新宾满族自治县\",\n\t \"210423\": \"清原满族自治县\",\n\t \"210424\": \"其它区\",\n\t \"210500\": \"本溪市\",\n\t \"210502\": \"平山区\",\n\t \"210503\": \"溪湖区\",\n\t \"210504\": \"明山区\",\n\t \"210505\": \"南芬区\",\n\t \"210521\": \"本溪满族自治县\",\n\t \"210522\": \"桓仁满族自治县\",\n\t \"210523\": \"其它区\",\n\t \"210600\": \"丹东市\",\n\t \"210602\": \"元宝区\",\n\t \"210603\": \"振兴区\",\n\t \"210604\": \"振安区\",\n\t \"210624\": \"宽甸满族自治县\",\n\t \"210681\": \"东港市\",\n\t \"210682\": \"凤城市\",\n\t \"210683\": \"其它区\",\n\t \"210700\": \"锦州市\",\n\t \"210702\": \"古塔区\",\n\t \"210703\": \"凌河区\",\n\t \"210711\": \"太和区\",\n\t \"210726\": \"黑山县\",\n\t \"210727\": \"义县\",\n\t \"210781\": \"凌海市\",\n\t \"210782\": \"北镇市\",\n\t \"210783\": \"其它区\",\n\t \"210800\": \"营口市\",\n\t \"210802\": \"站前区\",\n\t \"210803\": \"西市区\",\n\t \"210804\": \"鲅鱼圈区\",\n\t \"210811\": \"老边区\",\n\t \"210881\": \"盖州市\",\n\t \"210882\": \"大石桥市\",\n\t \"210883\": \"其它区\",\n\t \"210900\": \"阜新市\",\n\t \"210902\": \"海州区\",\n\t \"210903\": \"新邱区\",\n\t \"210904\": \"太平区\",\n\t \"210905\": \"清河门区\",\n\t \"210911\": \"细河区\",\n\t \"210921\": \"阜新蒙古族自治县\",\n\t \"210922\": \"彰武县\",\n\t \"210923\": \"其它区\",\n\t \"211000\": \"辽阳市\",\n\t \"211002\": \"白塔区\",\n\t \"211003\": \"文圣区\",\n\t \"211004\": \"宏伟区\",\n\t \"211005\": \"弓长岭区\",\n\t \"211011\": \"太子河区\",\n\t \"211021\": \"辽阳县\",\n\t \"211081\": \"灯塔市\",\n\t \"211082\": \"其它区\",\n\t \"211100\": \"盘锦市\",\n\t \"211102\": \"双台子区\",\n\t \"211103\": \"兴隆台区\",\n\t \"211121\": \"大洼县\",\n\t \"211122\": \"盘山县\",\n\t \"211123\": \"其它区\",\n\t \"211200\": \"铁岭市\",\n\t \"211202\": \"银州区\",\n\t \"211204\": \"清河区\",\n\t \"211221\": \"铁岭县\",\n\t \"211223\": \"西丰县\",\n\t \"211224\": \"昌图县\",\n\t \"211281\": \"调兵山市\",\n\t \"211282\": \"开原市\",\n\t \"211283\": \"其它区\",\n\t \"211300\": \"朝阳市\",\n\t \"211302\": \"双塔区\",\n\t \"211303\": \"龙城区\",\n\t \"211321\": \"朝阳县\",\n\t \"211322\": \"建平县\",\n\t \"211324\": \"喀喇沁左翼蒙古族自治县\",\n\t \"211381\": \"北票市\",\n\t \"211382\": \"凌源市\",\n\t \"211383\": \"其它区\",\n\t \"211400\": \"葫芦岛市\",\n\t \"211402\": \"连山区\",\n\t \"211403\": \"龙港区\",\n\t \"211404\": \"南票区\",\n\t \"211421\": \"绥中县\",\n\t \"211422\": \"建昌县\",\n\t \"211481\": \"兴城市\",\n\t \"211482\": \"其它区\",\n\t \"220000\": \"吉林省\",\n\t \"220100\": \"长春市\",\n\t \"220102\": \"南关区\",\n\t \"220103\": \"宽城区\",\n\t \"220104\": \"朝阳区\",\n\t \"220105\": \"二道区\",\n\t \"220106\": \"绿园区\",\n\t \"220112\": \"双阳区\",\n\t \"220122\": \"农安县\",\n\t \"220181\": \"九台市\",\n\t \"220182\": \"榆树市\",\n\t \"220183\": \"德惠市\",\n\t \"220188\": \"其它区\",\n\t \"220200\": \"吉林市\",\n\t \"220202\": \"昌邑区\",\n\t \"220203\": \"龙潭区\",\n\t \"220204\": \"船营区\",\n\t \"220211\": \"丰满区\",\n\t \"220221\": \"永吉县\",\n\t \"220281\": \"蛟河市\",\n\t \"220282\": \"桦甸市\",\n\t \"220283\": \"舒兰市\",\n\t \"220284\": \"磐石市\",\n\t \"220285\": \"其它区\",\n\t \"220300\": \"四平市\",\n\t \"220302\": \"铁西区\",\n\t \"220303\": \"铁东区\",\n\t \"220322\": \"梨树县\",\n\t \"220323\": \"伊通满族自治县\",\n\t \"220381\": \"公主岭市\",\n\t \"220382\": \"双辽市\",\n\t \"220383\": \"其它区\",\n\t \"220400\": \"辽源市\",\n\t \"220402\": \"龙山区\",\n\t \"220403\": \"西安区\",\n\t \"220421\": \"东丰县\",\n\t \"220422\": \"东辽县\",\n\t \"220423\": \"其它区\",\n\t \"220500\": \"通化市\",\n\t \"220502\": \"东昌区\",\n\t \"220503\": \"二道江区\",\n\t \"220521\": \"通化县\",\n\t \"220523\": \"辉南县\",\n\t \"220524\": \"柳河县\",\n\t \"220581\": \"梅河口市\",\n\t \"220582\": \"集安市\",\n\t \"220583\": \"其它区\",\n\t \"220600\": \"白山市\",\n\t \"220602\": \"浑江区\",\n\t \"220621\": \"抚松县\",\n\t \"220622\": \"靖宇县\",\n\t \"220623\": \"长白朝鲜族自治县\",\n\t \"220625\": \"江源区\",\n\t \"220681\": \"临江市\",\n\t \"220682\": \"其它区\",\n\t \"220700\": \"松原市\",\n\t \"220702\": \"宁江区\",\n\t \"220721\": \"前郭尔罗斯蒙古族自治县\",\n\t \"220722\": \"长岭县\",\n\t \"220723\": \"乾安县\",\n\t \"220724\": \"扶余市\",\n\t \"220725\": \"其它区\",\n\t \"220800\": \"白城市\",\n\t \"220802\": \"洮北区\",\n\t \"220821\": \"镇赉县\",\n\t \"220822\": \"通榆县\",\n\t \"220881\": \"洮南市\",\n\t \"220882\": \"大安市\",\n\t \"220883\": \"其它区\",\n\t \"222400\": \"延边朝鲜族自治州\",\n\t \"222401\": \"延吉市\",\n\t \"222402\": \"图们市\",\n\t \"222403\": \"敦化市\",\n\t \"222404\": \"珲春市\",\n\t \"222405\": \"龙井市\",\n\t \"222406\": \"和龙市\",\n\t \"222424\": \"汪清县\",\n\t \"222426\": \"安图县\",\n\t \"222427\": \"其它区\",\n\t \"230000\": \"黑龙江省\",\n\t \"230100\": \"哈尔滨市\",\n\t \"230102\": \"道里区\",\n\t \"230103\": \"南岗区\",\n\t \"230104\": \"道外区\",\n\t \"230106\": \"香坊区\",\n\t \"230108\": \"平房区\",\n\t \"230109\": \"松北区\",\n\t \"230111\": \"呼兰区\",\n\t \"230123\": \"依兰县\",\n\t \"230124\": \"方正县\",\n\t \"230125\": \"宾县\",\n\t \"230126\": \"巴彦县\",\n\t \"230127\": \"木兰县\",\n\t \"230128\": \"通河县\",\n\t \"230129\": \"延寿县\",\n\t \"230181\": \"阿城区\",\n\t \"230182\": \"双城市\",\n\t \"230183\": \"尚志市\",\n\t \"230184\": \"五常市\",\n\t \"230186\": \"其它区\",\n\t \"230200\": \"齐齐哈尔市\",\n\t \"230202\": \"龙沙区\",\n\t \"230203\": \"建华区\",\n\t \"230204\": \"铁锋区\",\n\t \"230205\": \"昂昂溪区\",\n\t \"230206\": \"富拉尔基区\",\n\t \"230207\": \"碾子山区\",\n\t \"230208\": \"梅里斯达斡尔族区\",\n\t \"230221\": \"龙江县\",\n\t \"230223\": \"依安县\",\n\t \"230224\": \"泰来县\",\n\t \"230225\": \"甘南县\",\n\t \"230227\": \"富裕县\",\n\t \"230229\": \"克山县\",\n\t \"230230\": \"克东县\",\n\t \"230231\": \"拜泉县\",\n\t \"230281\": \"讷河市\",\n\t \"230282\": \"其它区\",\n\t \"230300\": \"鸡西市\",\n\t \"230302\": \"鸡冠区\",\n\t \"230303\": \"恒山区\",\n\t \"230304\": \"滴道区\",\n\t \"230305\": \"梨树区\",\n\t \"230306\": \"城子河区\",\n\t \"230307\": \"麻山区\",\n\t \"230321\": \"鸡东县\",\n\t \"230381\": \"虎林市\",\n\t \"230382\": \"密山市\",\n\t \"230383\": \"其它区\",\n\t \"230400\": \"鹤岗市\",\n\t \"230402\": \"向阳区\",\n\t \"230403\": \"工农区\",\n\t \"230404\": \"南山区\",\n\t \"230405\": \"兴安区\",\n\t \"230406\": \"东山区\",\n\t \"230407\": \"兴山区\",\n\t \"230421\": \"萝北县\",\n\t \"230422\": \"绥滨县\",\n\t \"230423\": \"其它区\",\n\t \"230500\": \"双鸭山市\",\n\t \"230502\": \"尖山区\",\n\t \"230503\": \"岭东区\",\n\t \"230505\": \"四方台区\",\n\t \"230506\": \"宝山区\",\n\t \"230521\": \"集贤县\",\n\t \"230522\": \"友谊县\",\n\t \"230523\": \"宝清县\",\n\t \"230524\": \"饶河县\",\n\t \"230525\": \"其它区\",\n\t \"230600\": \"大庆市\",\n\t \"230602\": \"萨尔图区\",\n\t \"230603\": \"龙凤区\",\n\t \"230604\": \"让胡路区\",\n\t \"230605\": \"红岗区\",\n\t \"230606\": \"大同区\",\n\t \"230621\": \"肇州县\",\n\t \"230622\": \"肇源县\",\n\t \"230623\": \"林甸县\",\n\t \"230624\": \"杜尔伯特蒙古族自治县\",\n\t \"230625\": \"其它区\",\n\t \"230700\": \"伊春市\",\n\t \"230702\": \"伊春区\",\n\t \"230703\": \"南岔区\",\n\t \"230704\": \"友好区\",\n\t \"230705\": \"西林区\",\n\t \"230706\": \"翠峦区\",\n\t \"230707\": \"新青区\",\n\t \"230708\": \"美溪区\",\n\t \"230709\": \"金山屯区\",\n\t \"230710\": \"五营区\",\n\t \"230711\": \"乌马河区\",\n\t \"230712\": \"汤旺河区\",\n\t \"230713\": \"带岭区\",\n\t \"230714\": \"乌伊岭区\",\n\t \"230715\": \"红星区\",\n\t \"230716\": \"上甘岭区\",\n\t \"230722\": \"嘉荫县\",\n\t \"230781\": \"铁力市\",\n\t \"230782\": \"其它区\",\n\t \"230800\": \"佳木斯市\",\n\t \"230803\": \"向阳区\",\n\t \"230804\": \"前进区\",\n\t \"230805\": \"东风区\",\n\t \"230811\": \"郊区\",\n\t \"230822\": \"桦南县\",\n\t \"230826\": \"桦川县\",\n\t \"230828\": \"汤原县\",\n\t \"230833\": \"抚远县\",\n\t \"230881\": \"同江市\",\n\t \"230882\": \"富锦市\",\n\t \"230883\": \"其它区\",\n\t \"230900\": \"七台河市\",\n\t \"230902\": \"新兴区\",\n\t \"230903\": \"桃山区\",\n\t \"230904\": \"茄子河区\",\n\t \"230921\": \"勃利县\",\n\t \"230922\": \"其它区\",\n\t \"231000\": \"牡丹江市\",\n\t \"231002\": \"东安区\",\n\t \"231003\": \"阳明区\",\n\t \"231004\": \"爱民区\",\n\t \"231005\": \"西安区\",\n\t \"231024\": \"东宁县\",\n\t \"231025\": \"林口县\",\n\t \"231081\": \"绥芬河市\",\n\t \"231083\": \"海林市\",\n\t \"231084\": \"宁安市\",\n\t \"231085\": \"穆棱市\",\n\t \"231086\": \"其它区\",\n\t \"231100\": \"黑河市\",\n\t \"231102\": \"爱辉区\",\n\t \"231121\": \"嫩江县\",\n\t \"231123\": \"逊克县\",\n\t \"231124\": \"孙吴县\",\n\t \"231181\": \"北安市\",\n\t \"231182\": \"五大连池市\",\n\t \"231183\": \"其它区\",\n\t \"231200\": \"绥化市\",\n\t \"231202\": \"北林区\",\n\t \"231221\": \"望奎县\",\n\t \"231222\": \"兰西县\",\n\t \"231223\": \"青冈县\",\n\t \"231224\": \"庆安县\",\n\t \"231225\": \"明水县\",\n\t \"231226\": \"绥棱县\",\n\t \"231281\": \"安达市\",\n\t \"231282\": \"肇东市\",\n\t \"231283\": \"海伦市\",\n\t \"231284\": \"其它区\",\n\t \"232700\": \"大兴安岭地区\",\n\t \"232702\": \"松岭区\",\n\t \"232703\": \"新林区\",\n\t \"232704\": \"呼中区\",\n\t \"232721\": \"呼玛县\",\n\t \"232722\": \"塔河县\",\n\t \"232723\": \"漠河县\",\n\t \"232724\": \"加格达奇区\",\n\t \"232725\": \"其它区\",\n\t \"310000\": \"上海\",\n\t \"310100\": \"上海市\",\n\t \"310101\": \"黄浦区\",\n\t \"310104\": \"徐汇区\",\n\t \"310105\": \"长宁区\",\n\t \"310106\": \"静安区\",\n\t \"310107\": \"普陀区\",\n\t \"310108\": \"闸北区\",\n\t \"310109\": \"虹口区\",\n\t \"310110\": \"杨浦区\",\n\t \"310112\": \"闵行区\",\n\t \"310113\": \"宝山区\",\n\t \"310114\": \"嘉定区\",\n\t \"310115\": \"浦东新区\",\n\t \"310116\": \"金山区\",\n\t \"310117\": \"松江区\",\n\t \"310118\": \"青浦区\",\n\t \"310120\": \"奉贤区\",\n\t \"310230\": \"崇明县\",\n\t \"310231\": \"其它区\",\n\t \"320000\": \"江苏省\",\n\t \"320100\": \"南京市\",\n\t \"320102\": \"玄武区\",\n\t \"320104\": \"秦淮区\",\n\t \"320105\": \"建邺区\",\n\t \"320106\": \"鼓楼区\",\n\t \"320111\": \"浦口区\",\n\t \"320113\": \"栖霞区\",\n\t \"320114\": \"雨花台区\",\n\t \"320115\": \"江宁区\",\n\t \"320116\": \"六合区\",\n\t \"320124\": \"溧水区\",\n\t \"320125\": \"高淳区\",\n\t \"320126\": \"其它区\",\n\t \"320200\": \"无锡市\",\n\t \"320202\": \"崇安区\",\n\t \"320203\": \"南长区\",\n\t \"320204\": \"北塘区\",\n\t \"320205\": \"锡山区\",\n\t \"320206\": \"惠山区\",\n\t \"320211\": \"滨湖区\",\n\t \"320281\": \"江阴市\",\n\t \"320282\": \"宜兴市\",\n\t \"320297\": \"其它区\",\n\t \"320300\": \"徐州市\",\n\t \"320302\": \"鼓楼区\",\n\t \"320303\": \"云龙区\",\n\t \"320305\": \"贾汪区\",\n\t \"320311\": \"泉山区\",\n\t \"320321\": \"丰县\",\n\t \"320322\": \"沛县\",\n\t \"320323\": \"铜山区\",\n\t \"320324\": \"睢宁县\",\n\t \"320381\": \"新沂市\",\n\t \"320382\": \"邳州市\",\n\t \"320383\": \"其它区\",\n\t \"320400\": \"常州市\",\n\t \"320402\": \"天宁区\",\n\t \"320404\": \"钟楼区\",\n\t \"320405\": \"戚墅堰区\",\n\t \"320411\": \"新北区\",\n\t \"320412\": \"武进区\",\n\t \"320481\": \"溧阳市\",\n\t \"320482\": \"金坛市\",\n\t \"320483\": \"其它区\",\n\t \"320500\": \"苏州市\",\n\t \"320505\": \"虎丘区\",\n\t \"320506\": \"吴中区\",\n\t \"320507\": \"相城区\",\n\t \"320508\": \"姑苏区\",\n\t \"320581\": \"常熟市\",\n\t \"320582\": \"张家港市\",\n\t \"320583\": \"昆山市\",\n\t \"320584\": \"吴江区\",\n\t \"320585\": \"太仓市\",\n\t \"320596\": \"其它区\",\n\t \"320600\": \"南通市\",\n\t \"320602\": \"崇川区\",\n\t \"320611\": \"港闸区\",\n\t \"320612\": \"通州区\",\n\t \"320621\": \"海安县\",\n\t \"320623\": \"如东县\",\n\t \"320681\": \"启东市\",\n\t \"320682\": \"如皋市\",\n\t \"320684\": \"海门市\",\n\t \"320694\": \"其它区\",\n\t \"320700\": \"连云港市\",\n\t \"320703\": \"连云区\",\n\t \"320705\": \"新浦区\",\n\t \"320706\": \"海州区\",\n\t \"320721\": \"赣榆县\",\n\t \"320722\": \"东海县\",\n\t \"320723\": \"灌云县\",\n\t \"320724\": \"灌南县\",\n\t \"320725\": \"其它区\",\n\t \"320800\": \"淮安市\",\n\t \"320802\": \"清河区\",\n\t \"320803\": \"淮安区\",\n\t \"320804\": \"淮阴区\",\n\t \"320811\": \"清浦区\",\n\t \"320826\": \"涟水县\",\n\t \"320829\": \"洪泽县\",\n\t \"320830\": \"盱眙县\",\n\t \"320831\": \"金湖县\",\n\t \"320832\": \"其它区\",\n\t \"320900\": \"盐城市\",\n\t \"320902\": \"亭湖区\",\n\t \"320903\": \"盐都区\",\n\t \"320921\": \"响水县\",\n\t \"320922\": \"滨海县\",\n\t \"320923\": \"阜宁县\",\n\t \"320924\": \"射阳县\",\n\t \"320925\": \"建湖县\",\n\t \"320981\": \"东台市\",\n\t \"320982\": \"大丰市\",\n\t \"320983\": \"其它区\",\n\t \"321000\": \"扬州市\",\n\t \"321002\": \"广陵区\",\n\t \"321003\": \"邗江区\",\n\t \"321023\": \"宝应县\",\n\t \"321081\": \"仪征市\",\n\t \"321084\": \"高邮市\",\n\t \"321088\": \"江都区\",\n\t \"321093\": \"其它区\",\n\t \"321100\": \"镇江市\",\n\t \"321102\": \"京口区\",\n\t \"321111\": \"润州区\",\n\t \"321112\": \"丹徒区\",\n\t \"321181\": \"丹阳市\",\n\t \"321182\": \"扬中市\",\n\t \"321183\": \"句容市\",\n\t \"321184\": \"其它区\",\n\t \"321200\": \"泰州市\",\n\t \"321202\": \"海陵区\",\n\t \"321203\": \"高港区\",\n\t \"321281\": \"兴化市\",\n\t \"321282\": \"靖江市\",\n\t \"321283\": \"泰兴市\",\n\t \"321284\": \"姜堰区\",\n\t \"321285\": \"其它区\",\n\t \"321300\": \"宿迁市\",\n\t \"321302\": \"宿城区\",\n\t \"321311\": \"宿豫区\",\n\t \"321322\": \"沭阳县\",\n\t \"321323\": \"泗阳县\",\n\t \"321324\": \"泗洪县\",\n\t \"321325\": \"其它区\",\n\t \"330000\": \"浙江省\",\n\t \"330100\": \"杭州市\",\n\t \"330102\": \"上城区\",\n\t \"330103\": \"下城区\",\n\t \"330104\": \"江干区\",\n\t \"330105\": \"拱墅区\",\n\t \"330106\": \"西湖区\",\n\t \"330108\": \"滨江区\",\n\t \"330109\": \"萧山区\",\n\t \"330110\": \"余杭区\",\n\t \"330122\": \"桐庐县\",\n\t \"330127\": \"淳安县\",\n\t \"330182\": \"建德市\",\n\t \"330183\": \"富阳市\",\n\t \"330185\": \"临安市\",\n\t \"330186\": \"其它区\",\n\t \"330200\": \"宁波市\",\n\t \"330203\": \"海曙区\",\n\t \"330204\": \"江东区\",\n\t \"330205\": \"江北区\",\n\t \"330206\": \"北仑区\",\n\t \"330211\": \"镇海区\",\n\t \"330212\": \"鄞州区\",\n\t \"330225\": \"象山县\",\n\t \"330226\": \"宁海县\",\n\t \"330281\": \"余姚市\",\n\t \"330282\": \"慈溪市\",\n\t \"330283\": \"奉化市\",\n\t \"330284\": \"其它区\",\n\t \"330300\": \"温州市\",\n\t \"330302\": \"鹿城区\",\n\t \"330303\": \"龙湾区\",\n\t \"330304\": \"瓯海区\",\n\t \"330322\": \"洞头县\",\n\t \"330324\": \"永嘉县\",\n\t \"330326\": \"平阳县\",\n\t \"330327\": \"苍南县\",\n\t \"330328\": \"文成县\",\n\t \"330329\": \"泰顺县\",\n\t \"330381\": \"瑞安市\",\n\t \"330382\": \"乐清市\",\n\t \"330383\": \"其它区\",\n\t \"330400\": \"嘉兴市\",\n\t \"330402\": \"南湖区\",\n\t \"330411\": \"秀洲区\",\n\t \"330421\": \"嘉善县\",\n\t \"330424\": \"海盐县\",\n\t \"330481\": \"海宁市\",\n\t \"330482\": \"平湖市\",\n\t \"330483\": \"桐乡市\",\n\t \"330484\": \"其它区\",\n\t \"330500\": \"湖州市\",\n\t \"330502\": \"吴兴区\",\n\t \"330503\": \"南浔区\",\n\t \"330521\": \"德清县\",\n\t \"330522\": \"长兴县\",\n\t \"330523\": \"安吉县\",\n\t \"330524\": \"其它区\",\n\t \"330600\": \"绍兴市\",\n\t \"330602\": \"越城区\",\n\t \"330621\": \"绍兴县\",\n\t \"330624\": \"新昌县\",\n\t \"330681\": \"诸暨市\",\n\t \"330682\": \"上虞市\",\n\t \"330683\": \"嵊州市\",\n\t \"330684\": \"其它区\",\n\t \"330700\": \"金华市\",\n\t \"330702\": \"婺城区\",\n\t \"330703\": \"金东区\",\n\t \"330723\": \"武义县\",\n\t \"330726\": \"浦江县\",\n\t \"330727\": \"磐安县\",\n\t \"330781\": \"兰溪市\",\n\t \"330782\": \"义乌市\",\n\t \"330783\": \"东阳市\",\n\t \"330784\": \"永康市\",\n\t \"330785\": \"其它区\",\n\t \"330800\": \"衢州市\",\n\t \"330802\": \"柯城区\",\n\t \"330803\": \"衢江区\",\n\t \"330822\": \"常山县\",\n\t \"330824\": \"开化县\",\n\t \"330825\": \"龙游县\",\n\t \"330881\": \"江山市\",\n\t \"330882\": \"其它区\",\n\t \"330900\": \"舟山市\",\n\t \"330902\": \"定海区\",\n\t \"330903\": \"普陀区\",\n\t \"330921\": \"岱山县\",\n\t \"330922\": \"嵊泗县\",\n\t \"330923\": \"其它区\",\n\t \"331000\": \"台州市\",\n\t \"331002\": \"椒江区\",\n\t \"331003\": \"黄岩区\",\n\t \"331004\": \"路桥区\",\n\t \"331021\": \"玉环县\",\n\t \"331022\": \"三门县\",\n\t \"331023\": \"天台县\",\n\t \"331024\": \"仙居县\",\n\t \"331081\": \"温岭市\",\n\t \"331082\": \"临海市\",\n\t \"331083\": \"其它区\",\n\t \"331100\": \"丽水市\",\n\t \"331102\": \"莲都区\",\n\t \"331121\": \"青田县\",\n\t \"331122\": \"缙云县\",\n\t \"331123\": \"遂昌县\",\n\t \"331124\": \"松阳县\",\n\t \"331125\": \"云和县\",\n\t \"331126\": \"庆元县\",\n\t \"331127\": \"景宁畲族自治县\",\n\t \"331181\": \"龙泉市\",\n\t \"331182\": \"其它区\",\n\t \"340000\": \"安徽省\",\n\t \"340100\": \"合肥市\",\n\t \"340102\": \"瑶海区\",\n\t \"340103\": \"庐阳区\",\n\t \"340104\": \"蜀山区\",\n\t \"340111\": \"包河区\",\n\t \"340121\": \"长丰县\",\n\t \"340122\": \"肥东县\",\n\t \"340123\": \"肥西县\",\n\t \"340192\": \"其它区\",\n\t \"340200\": \"芜湖市\",\n\t \"340202\": \"镜湖区\",\n\t \"340203\": \"弋江区\",\n\t \"340207\": \"鸠江区\",\n\t \"340208\": \"三山区\",\n\t \"340221\": \"芜湖县\",\n\t \"340222\": \"繁昌县\",\n\t \"340223\": \"南陵县\",\n\t \"340224\": \"其它区\",\n\t \"340300\": \"蚌埠市\",\n\t \"340302\": \"龙子湖区\",\n\t \"340303\": \"蚌山区\",\n\t \"340304\": \"禹会区\",\n\t \"340311\": \"淮上区\",\n\t \"340321\": \"怀远县\",\n\t \"340322\": \"五河县\",\n\t \"340323\": \"固镇县\",\n\t \"340324\": \"其它区\",\n\t \"340400\": \"淮南市\",\n\t \"340402\": \"大通区\",\n\t \"340403\": \"田家庵区\",\n\t \"340404\": \"谢家集区\",\n\t \"340405\": \"八公山区\",\n\t \"340406\": \"潘集区\",\n\t \"340421\": \"凤台县\",\n\t \"340422\": \"其它区\",\n\t \"340500\": \"马鞍山市\",\n\t \"340503\": \"花山区\",\n\t \"340504\": \"雨山区\",\n\t \"340506\": \"博望区\",\n\t \"340521\": \"当涂县\",\n\t \"340522\": \"其它区\",\n\t \"340600\": \"淮北市\",\n\t \"340602\": \"杜集区\",\n\t \"340603\": \"相山区\",\n\t \"340604\": \"烈山区\",\n\t \"340621\": \"濉溪县\",\n\t \"340622\": \"其它区\",\n\t \"340700\": \"铜陵市\",\n\t \"340702\": \"铜官山区\",\n\t \"340703\": \"狮子山区\",\n\t \"340711\": \"郊区\",\n\t \"340721\": \"铜陵县\",\n\t \"340722\": \"其它区\",\n\t \"340800\": \"安庆市\",\n\t \"340802\": \"迎江区\",\n\t \"340803\": \"大观区\",\n\t \"340811\": \"宜秀区\",\n\t \"340822\": \"怀宁县\",\n\t \"340823\": \"枞阳县\",\n\t \"340824\": \"潜山县\",\n\t \"340825\": \"太湖县\",\n\t \"340826\": \"宿松县\",\n\t \"340827\": \"望江县\",\n\t \"340828\": \"岳西县\",\n\t \"340881\": \"桐城市\",\n\t \"340882\": \"其它区\",\n\t \"341000\": \"黄山市\",\n\t \"341002\": \"屯溪区\",\n\t \"341003\": \"黄山区\",\n\t \"341004\": \"徽州区\",\n\t \"341021\": \"歙县\",\n\t \"341022\": \"休宁县\",\n\t \"341023\": \"黟县\",\n\t \"341024\": \"祁门县\",\n\t \"341025\": \"其它区\",\n\t \"341100\": \"滁州市\",\n\t \"341102\": \"琅琊区\",\n\t \"341103\": \"南谯区\",\n\t \"341122\": \"来安县\",\n\t \"341124\": \"全椒县\",\n\t \"341125\": \"定远县\",\n\t \"341126\": \"凤阳县\",\n\t \"341181\": \"天长市\",\n\t \"341182\": \"明光市\",\n\t \"341183\": \"其它区\",\n\t \"341200\": \"阜阳市\",\n\t \"341202\": \"颍州区\",\n\t \"341203\": \"颍东区\",\n\t \"341204\": \"颍泉区\",\n\t \"341221\": \"临泉县\",\n\t \"341222\": \"太和县\",\n\t \"341225\": \"阜南县\",\n\t \"341226\": \"颍上县\",\n\t \"341282\": \"界首市\",\n\t \"341283\": \"其它区\",\n\t \"341300\": \"宿州市\",\n\t \"341302\": \"埇桥区\",\n\t \"341321\": \"砀山县\",\n\t \"341322\": \"萧县\",\n\t \"341323\": \"灵璧县\",\n\t \"341324\": \"泗县\",\n\t \"341325\": \"其它区\",\n\t \"341400\": \"巢湖市\",\n\t \"341421\": \"庐江县\",\n\t \"341422\": \"无为县\",\n\t \"341423\": \"含山县\",\n\t \"341424\": \"和县\",\n\t \"341500\": \"六安市\",\n\t \"341502\": \"金安区\",\n\t \"341503\": \"裕安区\",\n\t \"341521\": \"寿县\",\n\t \"341522\": \"霍邱县\",\n\t \"341523\": \"舒城县\",\n\t \"341524\": \"金寨县\",\n\t \"341525\": \"霍山县\",\n\t \"341526\": \"其它区\",\n\t \"341600\": \"亳州市\",\n\t \"341602\": \"谯城区\",\n\t \"341621\": \"涡阳县\",\n\t \"341622\": \"蒙城县\",\n\t \"341623\": \"利辛县\",\n\t \"341624\": \"其它区\",\n\t \"341700\": \"池州市\",\n\t \"341702\": \"贵池区\",\n\t \"341721\": \"东至县\",\n\t \"341722\": \"石台县\",\n\t \"341723\": \"青阳县\",\n\t \"341724\": \"其它区\",\n\t \"341800\": \"宣城市\",\n\t \"341802\": \"宣州区\",\n\t \"341821\": \"郎溪县\",\n\t \"341822\": \"广德县\",\n\t \"341823\": \"泾县\",\n\t \"341824\": \"绩溪县\",\n\t \"341825\": \"旌德县\",\n\t \"341881\": \"宁国市\",\n\t \"341882\": \"其它区\",\n\t \"350000\": \"福建省\",\n\t \"350100\": \"福州市\",\n\t \"350102\": \"鼓楼区\",\n\t \"350103\": \"台江区\",\n\t \"350104\": \"仓山区\",\n\t \"350105\": \"马尾区\",\n\t \"350111\": \"晋安区\",\n\t \"350121\": \"闽侯县\",\n\t \"350122\": \"连江县\",\n\t \"350123\": \"罗源县\",\n\t \"350124\": \"闽清县\",\n\t \"350125\": \"永泰县\",\n\t \"350128\": \"平潭县\",\n\t \"350181\": \"福清市\",\n\t \"350182\": \"长乐市\",\n\t \"350183\": \"其它区\",\n\t \"350200\": \"厦门市\",\n\t \"350203\": \"思明区\",\n\t \"350205\": \"海沧区\",\n\t \"350206\": \"湖里区\",\n\t \"350211\": \"集美区\",\n\t \"350212\": \"同安区\",\n\t \"350213\": \"翔安区\",\n\t \"350214\": \"其它区\",\n\t \"350300\": \"莆田市\",\n\t \"350302\": \"城厢区\",\n\t \"350303\": \"涵江区\",\n\t \"350304\": \"荔城区\",\n\t \"350305\": \"秀屿区\",\n\t \"350322\": \"仙游县\",\n\t \"350323\": \"其它区\",\n\t \"350400\": \"三明市\",\n\t \"350402\": \"梅列区\",\n\t \"350403\": \"三元区\",\n\t \"350421\": \"明溪县\",\n\t \"350423\": \"清流县\",\n\t \"350424\": \"宁化县\",\n\t \"350425\": \"大田县\",\n\t \"350426\": \"尤溪县\",\n\t \"350427\": \"沙县\",\n\t \"350428\": \"将乐县\",\n\t \"350429\": \"泰宁县\",\n\t \"350430\": \"建宁县\",\n\t \"350481\": \"永安市\",\n\t \"350482\": \"其它区\",\n\t \"350500\": \"泉州市\",\n\t \"350502\": \"鲤城区\",\n\t \"350503\": \"丰泽区\",\n\t \"350504\": \"洛江区\",\n\t \"350505\": \"泉港区\",\n\t \"350521\": \"惠安县\",\n\t \"350524\": \"安溪县\",\n\t \"350525\": \"永春县\",\n\t \"350526\": \"德化县\",\n\t \"350527\": \"金门县\",\n\t \"350581\": \"石狮市\",\n\t \"350582\": \"晋江市\",\n\t \"350583\": \"南安市\",\n\t \"350584\": \"其它区\",\n\t \"350600\": \"漳州市\",\n\t \"350602\": \"芗城区\",\n\t \"350603\": \"龙文区\",\n\t \"350622\": \"云霄县\",\n\t \"350623\": \"漳浦县\",\n\t \"350624\": \"诏安县\",\n\t \"350625\": \"长泰县\",\n\t \"350626\": \"东山县\",\n\t \"350627\": \"南靖县\",\n\t \"350628\": \"平和县\",\n\t \"350629\": \"华安县\",\n\t \"350681\": \"龙海市\",\n\t \"350682\": \"其它区\",\n\t \"350700\": \"南平市\",\n\t \"350702\": \"延平区\",\n\t \"350721\": \"顺昌县\",\n\t \"350722\": \"浦城县\",\n\t \"350723\": \"光泽县\",\n\t \"350724\": \"松溪县\",\n\t \"350725\": \"政和县\",\n\t \"350781\": \"邵武市\",\n\t \"350782\": \"武夷山市\",\n\t \"350783\": \"建瓯市\",\n\t \"350784\": \"建阳市\",\n\t \"350785\": \"其它区\",\n\t \"350800\": \"龙岩市\",\n\t \"350802\": \"新罗区\",\n\t \"350821\": \"长汀县\",\n\t \"350822\": \"永定县\",\n\t \"350823\": \"上杭县\",\n\t \"350824\": \"武平县\",\n\t \"350825\": \"连城县\",\n\t \"350881\": \"漳平市\",\n\t \"350882\": \"其它区\",\n\t \"350900\": \"宁德市\",\n\t \"350902\": \"蕉城区\",\n\t \"350921\": \"霞浦县\",\n\t \"350922\": \"古田县\",\n\t \"350923\": \"屏南县\",\n\t \"350924\": \"寿宁县\",\n\t \"350925\": \"周宁县\",\n\t \"350926\": \"柘荣县\",\n\t \"350981\": \"福安市\",\n\t \"350982\": \"福鼎市\",\n\t \"350983\": \"其它区\",\n\t \"360000\": \"江西省\",\n\t \"360100\": \"南昌市\",\n\t \"360102\": \"东湖区\",\n\t \"360103\": \"西湖区\",\n\t \"360104\": \"青云谱区\",\n\t \"360105\": \"湾里区\",\n\t \"360111\": \"青山湖区\",\n\t \"360121\": \"南昌县\",\n\t \"360122\": \"新建县\",\n\t \"360123\": \"安义县\",\n\t \"360124\": \"进贤县\",\n\t \"360128\": \"其它区\",\n\t \"360200\": \"景德镇市\",\n\t \"360202\": \"昌江区\",\n\t \"360203\": \"珠山区\",\n\t \"360222\": \"浮梁县\",\n\t \"360281\": \"乐平市\",\n\t \"360282\": \"其它区\",\n\t \"360300\": \"萍乡市\",\n\t \"360302\": \"安源区\",\n\t \"360313\": \"湘东区\",\n\t \"360321\": \"莲花县\",\n\t \"360322\": \"上栗县\",\n\t \"360323\": \"芦溪县\",\n\t \"360324\": \"其它区\",\n\t \"360400\": \"九江市\",\n\t \"360402\": \"庐山区\",\n\t \"360403\": \"浔阳区\",\n\t \"360421\": \"九江县\",\n\t \"360423\": \"武宁县\",\n\t \"360424\": \"修水县\",\n\t \"360425\": \"永修县\",\n\t \"360426\": \"德安县\",\n\t \"360427\": \"星子县\",\n\t \"360428\": \"都昌县\",\n\t \"360429\": \"湖口县\",\n\t \"360430\": \"彭泽县\",\n\t \"360481\": \"瑞昌市\",\n\t \"360482\": \"其它区\",\n\t \"360483\": \"共青城市\",\n\t \"360500\": \"新余市\",\n\t \"360502\": \"渝水区\",\n\t \"360521\": \"分宜县\",\n\t \"360522\": \"其它区\",\n\t \"360600\": \"鹰潭市\",\n\t \"360602\": \"月湖区\",\n\t \"360622\": \"余江县\",\n\t \"360681\": \"贵溪市\",\n\t \"360682\": \"其它区\",\n\t \"360700\": \"赣州市\",\n\t \"360702\": \"章贡区\",\n\t \"360721\": \"赣县\",\n\t \"360722\": \"信丰县\",\n\t \"360723\": \"大余县\",\n\t \"360724\": \"上犹县\",\n\t \"360725\": \"崇义县\",\n\t \"360726\": \"安远县\",\n\t \"360727\": \"龙南县\",\n\t \"360728\": \"定南县\",\n\t \"360729\": \"全南县\",\n\t \"360730\": \"宁都县\",\n\t \"360731\": \"于都县\",\n\t \"360732\": \"兴国县\",\n\t \"360733\": \"会昌县\",\n\t \"360734\": \"寻乌县\",\n\t \"360735\": \"石城县\",\n\t \"360781\": \"瑞金市\",\n\t \"360782\": \"南康市\",\n\t \"360783\": \"其它区\",\n\t \"360800\": \"吉安市\",\n\t \"360802\": \"吉州区\",\n\t \"360803\": \"青原区\",\n\t \"360821\": \"吉安县\",\n\t \"360822\": \"吉水县\",\n\t \"360823\": \"峡江县\",\n\t \"360824\": \"新干县\",\n\t \"360825\": \"永丰县\",\n\t \"360826\": \"泰和县\",\n\t \"360827\": \"遂川县\",\n\t \"360828\": \"万安县\",\n\t \"360829\": \"安福县\",\n\t \"360830\": \"永新县\",\n\t \"360881\": \"井冈山市\",\n\t \"360882\": \"其它区\",\n\t \"360900\": \"宜春市\",\n\t \"360902\": \"袁州区\",\n\t \"360921\": \"奉新县\",\n\t \"360922\": \"万载县\",\n\t \"360923\": \"上高县\",\n\t \"360924\": \"宜丰县\",\n\t \"360925\": \"靖安县\",\n\t \"360926\": \"铜鼓县\",\n\t \"360981\": \"丰城市\",\n\t \"360982\": \"樟树市\",\n\t \"360983\": \"高安市\",\n\t \"360984\": \"其它区\",\n\t \"361000\": \"抚州市\",\n\t \"361002\": \"临川区\",\n\t \"361021\": \"南城县\",\n\t \"361022\": \"黎川县\",\n\t \"361023\": \"南丰县\",\n\t \"361024\": \"崇仁县\",\n\t \"361025\": \"乐安县\",\n\t \"361026\": \"宜黄县\",\n\t \"361027\": \"金溪县\",\n\t \"361028\": \"资溪县\",\n\t \"361029\": \"东乡县\",\n\t \"361030\": \"广昌县\",\n\t \"361031\": \"其它区\",\n\t \"361100\": \"上饶市\",\n\t \"361102\": \"信州区\",\n\t \"361121\": \"上饶县\",\n\t \"361122\": \"广丰县\",\n\t \"361123\": \"玉山县\",\n\t \"361124\": \"铅山县\",\n\t \"361125\": \"横峰县\",\n\t \"361126\": \"弋阳县\",\n\t \"361127\": \"余干县\",\n\t \"361128\": \"鄱阳县\",\n\t \"361129\": \"万年县\",\n\t \"361130\": \"婺源县\",\n\t \"361181\": \"德兴市\",\n\t \"361182\": \"其它区\",\n\t \"370000\": \"山东省\",\n\t \"370100\": \"济南市\",\n\t \"370102\": \"历下区\",\n\t \"370103\": \"市中区\",\n\t \"370104\": \"槐荫区\",\n\t \"370105\": \"天桥区\",\n\t \"370112\": \"历城区\",\n\t \"370113\": \"长清区\",\n\t \"370124\": \"平阴县\",\n\t \"370125\": \"济阳县\",\n\t \"370126\": \"商河县\",\n\t \"370181\": \"章丘市\",\n\t \"370182\": \"其它区\",\n\t \"370200\": \"青岛市\",\n\t \"370202\": \"市南区\",\n\t \"370203\": \"市北区\",\n\t \"370211\": \"黄岛区\",\n\t \"370212\": \"崂山区\",\n\t \"370213\": \"李沧区\",\n\t \"370214\": \"城阳区\",\n\t \"370281\": \"胶州市\",\n\t \"370282\": \"即墨市\",\n\t \"370283\": \"平度市\",\n\t \"370285\": \"莱西市\",\n\t \"370286\": \"其它区\",\n\t \"370300\": \"淄博市\",\n\t \"370302\": \"淄川区\",\n\t \"370303\": \"张店区\",\n\t \"370304\": \"博山区\",\n\t \"370305\": \"临淄区\",\n\t \"370306\": \"周村区\",\n\t \"370321\": \"桓台县\",\n\t \"370322\": \"高青县\",\n\t \"370323\": \"沂源县\",\n\t \"370324\": \"其它区\",\n\t \"370400\": \"枣庄市\",\n\t \"370402\": \"市中区\",\n\t \"370403\": \"薛城区\",\n\t \"370404\": \"峄城区\",\n\t \"370405\": \"台儿庄区\",\n\t \"370406\": \"山亭区\",\n\t \"370481\": \"滕州市\",\n\t \"370482\": \"其它区\",\n\t \"370500\": \"东营市\",\n\t \"370502\": \"东营区\",\n\t \"370503\": \"河口区\",\n\t \"370521\": \"垦利县\",\n\t \"370522\": \"利津县\",\n\t \"370523\": \"广饶县\",\n\t \"370591\": \"其它区\",\n\t \"370600\": \"烟台市\",\n\t \"370602\": \"芝罘区\",\n\t \"370611\": \"福山区\",\n\t \"370612\": \"牟平区\",\n\t \"370613\": \"莱山区\",\n\t \"370634\": \"长岛县\",\n\t \"370681\": \"龙口市\",\n\t \"370682\": \"莱阳市\",\n\t \"370683\": \"莱州市\",\n\t \"370684\": \"蓬莱市\",\n\t \"370685\": \"招远市\",\n\t \"370686\": \"栖霞市\",\n\t \"370687\": \"海阳市\",\n\t \"370688\": \"其它区\",\n\t \"370700\": \"潍坊市\",\n\t \"370702\": \"潍城区\",\n\t \"370703\": \"寒亭区\",\n\t \"370704\": \"坊子区\",\n\t \"370705\": \"奎文区\",\n\t \"370724\": \"临朐县\",\n\t \"370725\": \"昌乐县\",\n\t \"370781\": \"青州市\",\n\t \"370782\": \"诸城市\",\n\t \"370783\": \"寿光市\",\n\t \"370784\": \"安丘市\",\n\t \"370785\": \"高密市\",\n\t \"370786\": \"昌邑市\",\n\t \"370787\": \"其它区\",\n\t \"370800\": \"济宁市\",\n\t \"370802\": \"市中区\",\n\t \"370811\": \"任城区\",\n\t \"370826\": \"微山县\",\n\t \"370827\": \"鱼台县\",\n\t \"370828\": \"金乡县\",\n\t \"370829\": \"嘉祥县\",\n\t \"370830\": \"汶上县\",\n\t \"370831\": \"泗水县\",\n\t \"370832\": \"梁山县\",\n\t \"370881\": \"曲阜市\",\n\t \"370882\": \"兖州市\",\n\t \"370883\": \"邹城市\",\n\t \"370884\": \"其它区\",\n\t \"370900\": \"泰安市\",\n\t \"370902\": \"泰山区\",\n\t \"370903\": \"岱岳区\",\n\t \"370921\": \"宁阳县\",\n\t \"370923\": \"东平县\",\n\t \"370982\": \"新泰市\",\n\t \"370983\": \"肥城市\",\n\t \"370984\": \"其它区\",\n\t \"371000\": \"威海市\",\n\t \"371002\": \"环翠区\",\n\t \"371081\": \"文登市\",\n\t \"371082\": \"荣成市\",\n\t \"371083\": \"乳山市\",\n\t \"371084\": \"其它区\",\n\t \"371100\": \"日照市\",\n\t \"371102\": \"东港区\",\n\t \"371103\": \"岚山区\",\n\t \"371121\": \"五莲县\",\n\t \"371122\": \"莒县\",\n\t \"371123\": \"其它区\",\n\t \"371200\": \"莱芜市\",\n\t \"371202\": \"莱城区\",\n\t \"371203\": \"钢城区\",\n\t \"371204\": \"其它区\",\n\t \"371300\": \"临沂市\",\n\t \"371302\": \"兰山区\",\n\t \"371311\": \"罗庄区\",\n\t \"371312\": \"河东区\",\n\t \"371321\": \"沂南县\",\n\t \"371322\": \"郯城县\",\n\t \"371323\": \"沂水县\",\n\t \"371324\": \"苍山县\",\n\t \"371325\": \"费县\",\n\t \"371326\": \"平邑县\",\n\t \"371327\": \"莒南县\",\n\t \"371328\": \"蒙阴县\",\n\t \"371329\": \"临沭县\",\n\t \"371330\": \"其它区\",\n\t \"371400\": \"德州市\",\n\t \"371402\": \"德城区\",\n\t \"371421\": \"陵县\",\n\t \"371422\": \"宁津县\",\n\t \"371423\": \"庆云县\",\n\t \"371424\": \"临邑县\",\n\t \"371425\": \"齐河县\",\n\t \"371426\": \"平原县\",\n\t \"371427\": \"夏津县\",\n\t \"371428\": \"武城县\",\n\t \"371481\": \"乐陵市\",\n\t \"371482\": \"禹城市\",\n\t \"371483\": \"其它区\",\n\t \"371500\": \"聊城市\",\n\t \"371502\": \"东昌府区\",\n\t \"371521\": \"阳谷县\",\n\t \"371522\": \"莘县\",\n\t \"371523\": \"茌平县\",\n\t \"371524\": \"东阿县\",\n\t \"371525\": \"冠县\",\n\t \"371526\": \"高唐县\",\n\t \"371581\": \"临清市\",\n\t \"371582\": \"其它区\",\n\t \"371600\": \"滨州市\",\n\t \"371602\": \"滨城区\",\n\t \"371621\": \"惠民县\",\n\t \"371622\": \"阳信县\",\n\t \"371623\": \"无棣县\",\n\t \"371624\": \"沾化县\",\n\t \"371625\": \"博兴县\",\n\t \"371626\": \"邹平县\",\n\t \"371627\": \"其它区\",\n\t \"371700\": \"菏泽市\",\n\t \"371702\": \"牡丹区\",\n\t \"371721\": \"曹县\",\n\t \"371722\": \"单县\",\n\t \"371723\": \"成武县\",\n\t \"371724\": \"巨野县\",\n\t \"371725\": \"郓城县\",\n\t \"371726\": \"鄄城县\",\n\t \"371727\": \"定陶县\",\n\t \"371728\": \"东明县\",\n\t \"371729\": \"其它区\",\n\t \"410000\": \"河南省\",\n\t \"410100\": \"郑州市\",\n\t \"410102\": \"中原区\",\n\t \"410103\": \"二七区\",\n\t \"410104\": \"管城回族区\",\n\t \"410105\": \"金水区\",\n\t \"410106\": \"上街区\",\n\t \"410108\": \"惠济区\",\n\t \"410122\": \"中牟县\",\n\t \"410181\": \"巩义市\",\n\t \"410182\": \"荥阳市\",\n\t \"410183\": \"新密市\",\n\t \"410184\": \"新郑市\",\n\t \"410185\": \"登封市\",\n\t \"410188\": \"其它区\",\n\t \"410200\": \"开封市\",\n\t \"410202\": \"龙亭区\",\n\t \"410203\": \"顺河回族区\",\n\t \"410204\": \"鼓楼区\",\n\t \"410205\": \"禹王台区\",\n\t \"410211\": \"金明区\",\n\t \"410221\": \"杞县\",\n\t \"410222\": \"通许县\",\n\t \"410223\": \"尉氏县\",\n\t \"410224\": \"开封县\",\n\t \"410225\": \"兰考县\",\n\t \"410226\": \"其它区\",\n\t \"410300\": \"洛阳市\",\n\t \"410302\": \"老城区\",\n\t \"410303\": \"西工区\",\n\t \"410304\": \"瀍河回族区\",\n\t \"410305\": \"涧西区\",\n\t \"410306\": \"吉利区\",\n\t \"410307\": \"洛龙区\",\n\t \"410322\": \"孟津县\",\n\t \"410323\": \"新安县\",\n\t \"410324\": \"栾川县\",\n\t \"410325\": \"嵩县\",\n\t \"410326\": \"汝阳县\",\n\t \"410327\": \"宜阳县\",\n\t \"410328\": \"洛宁县\",\n\t \"410329\": \"伊川县\",\n\t \"410381\": \"偃师市\",\n\t \"410400\": \"平顶山市\",\n\t \"410402\": \"新华区\",\n\t \"410403\": \"卫东区\",\n\t \"410404\": \"石龙区\",\n\t \"410411\": \"湛河区\",\n\t \"410421\": \"宝丰县\",\n\t \"410422\": \"叶县\",\n\t \"410423\": \"鲁山县\",\n\t \"410425\": \"郏县\",\n\t \"410481\": \"舞钢市\",\n\t \"410482\": \"汝州市\",\n\t \"410483\": \"其它区\",\n\t \"410500\": \"安阳市\",\n\t \"410502\": \"文峰区\",\n\t \"410503\": \"北关区\",\n\t \"410505\": \"殷都区\",\n\t \"410506\": \"龙安区\",\n\t \"410522\": \"安阳县\",\n\t \"410523\": \"汤阴县\",\n\t \"410526\": \"滑县\",\n\t \"410527\": \"内黄县\",\n\t \"410581\": \"林州市\",\n\t \"410582\": \"其它区\",\n\t \"410600\": \"鹤壁市\",\n\t \"410602\": \"鹤山区\",\n\t \"410603\": \"山城区\",\n\t \"410611\": \"淇滨区\",\n\t \"410621\": \"浚县\",\n\t \"410622\": \"淇县\",\n\t \"410623\": \"其它区\",\n\t \"410700\": \"新乡市\",\n\t \"410702\": \"红旗区\",\n\t \"410703\": \"卫滨区\",\n\t \"410704\": \"凤泉区\",\n\t \"410711\": \"牧野区\",\n\t \"410721\": \"新乡县\",\n\t \"410724\": \"获嘉县\",\n\t \"410725\": \"原阳县\",\n\t \"410726\": \"延津县\",\n\t \"410727\": \"封丘县\",\n\t \"410728\": \"长垣县\",\n\t \"410781\": \"卫辉市\",\n\t \"410782\": \"辉县市\",\n\t \"410783\": \"其它区\",\n\t \"410800\": \"焦作市\",\n\t \"410802\": \"解放区\",\n\t \"410803\": \"中站区\",\n\t \"410804\": \"马村区\",\n\t \"410811\": \"山阳区\",\n\t \"410821\": \"修武县\",\n\t \"410822\": \"博爱县\",\n\t \"410823\": \"武陟县\",\n\t \"410825\": \"温县\",\n\t \"410881\": \"济源市\",\n\t \"410882\": \"沁阳市\",\n\t \"410883\": \"孟州市\",\n\t \"410884\": \"其它区\",\n\t \"410900\": \"濮阳市\",\n\t \"410902\": \"华龙区\",\n\t \"410922\": \"清丰县\",\n\t \"410923\": \"南乐县\",\n\t \"410926\": \"范县\",\n\t \"410927\": \"台前县\",\n\t \"410928\": \"濮阳县\",\n\t \"410929\": \"其它区\",\n\t \"411000\": \"许昌市\",\n\t \"411002\": \"魏都区\",\n\t \"411023\": \"许昌县\",\n\t \"411024\": \"鄢陵县\",\n\t \"411025\": \"襄城县\",\n\t \"411081\": \"禹州市\",\n\t \"411082\": \"长葛市\",\n\t \"411083\": \"其它区\",\n\t \"411100\": \"漯河市\",\n\t \"411102\": \"源汇区\",\n\t \"411103\": \"郾城区\",\n\t \"411104\": \"召陵区\",\n\t \"411121\": \"舞阳县\",\n\t \"411122\": \"临颍县\",\n\t \"411123\": \"其它区\",\n\t \"411200\": \"三门峡市\",\n\t \"411202\": \"湖滨区\",\n\t \"411221\": \"渑池县\",\n\t \"411222\": \"陕县\",\n\t \"411224\": \"卢氏县\",\n\t \"411281\": \"义马市\",\n\t \"411282\": \"灵宝市\",\n\t \"411283\": \"其它区\",\n\t \"411300\": \"南阳市\",\n\t \"411302\": \"宛城区\",\n\t \"411303\": \"卧龙区\",\n\t \"411321\": \"南召县\",\n\t \"411322\": \"方城县\",\n\t \"411323\": \"西峡县\",\n\t \"411324\": \"镇平县\",\n\t \"411325\": \"内乡县\",\n\t \"411326\": \"淅川县\",\n\t \"411327\": \"社旗县\",\n\t \"411328\": \"唐河县\",\n\t \"411329\": \"新野县\",\n\t \"411330\": \"桐柏县\",\n\t \"411381\": \"邓州市\",\n\t \"411382\": \"其它区\",\n\t \"411400\": \"商丘市\",\n\t \"411402\": \"梁园区\",\n\t \"411403\": \"睢阳区\",\n\t \"411421\": \"民权县\",\n\t \"411422\": \"睢县\",\n\t \"411423\": \"宁陵县\",\n\t \"411424\": \"柘城县\",\n\t \"411425\": \"虞城县\",\n\t \"411426\": \"夏邑县\",\n\t \"411481\": \"永城市\",\n\t \"411482\": \"其它区\",\n\t \"411500\": \"信阳市\",\n\t \"411502\": \"浉河区\",\n\t \"411503\": \"平桥区\",\n\t \"411521\": \"罗山县\",\n\t \"411522\": \"光山县\",\n\t \"411523\": \"新县\",\n\t \"411524\": \"商城县\",\n\t \"411525\": \"固始县\",\n\t \"411526\": \"潢川县\",\n\t \"411527\": \"淮滨县\",\n\t \"411528\": \"息县\",\n\t \"411529\": \"其它区\",\n\t \"411600\": \"周口市\",\n\t \"411602\": \"川汇区\",\n\t \"411621\": \"扶沟县\",\n\t \"411622\": \"西华县\",\n\t \"411623\": \"商水县\",\n\t \"411624\": \"沈丘县\",\n\t \"411625\": \"郸城县\",\n\t \"411626\": \"淮阳县\",\n\t \"411627\": \"太康县\",\n\t \"411628\": \"鹿邑县\",\n\t \"411681\": \"项城市\",\n\t \"411682\": \"其它区\",\n\t \"411700\": \"驻马店市\",\n\t \"411702\": \"驿城区\",\n\t \"411721\": \"西平县\",\n\t \"411722\": \"上蔡县\",\n\t \"411723\": \"平舆县\",\n\t \"411724\": \"正阳县\",\n\t \"411725\": \"确山县\",\n\t \"411726\": \"泌阳县\",\n\t \"411727\": \"汝南县\",\n\t \"411728\": \"遂平县\",\n\t \"411729\": \"新蔡县\",\n\t \"411730\": \"其它区\",\n\t \"420000\": \"湖北省\",\n\t \"420100\": \"武汉市\",\n\t \"420102\": \"江岸区\",\n\t \"420103\": \"江汉区\",\n\t \"420104\": \"硚口区\",\n\t \"420105\": \"汉阳区\",\n\t \"420106\": \"武昌区\",\n\t \"420107\": \"青山区\",\n\t \"420111\": \"洪山区\",\n\t \"420112\": \"东西湖区\",\n\t \"420113\": \"汉南区\",\n\t \"420114\": \"蔡甸区\",\n\t \"420115\": \"江夏区\",\n\t \"420116\": \"黄陂区\",\n\t \"420117\": \"新洲区\",\n\t \"420118\": \"其它区\",\n\t \"420200\": \"黄石市\",\n\t \"420202\": \"黄石港区\",\n\t \"420203\": \"西塞山区\",\n\t \"420204\": \"下陆区\",\n\t \"420205\": \"铁山区\",\n\t \"420222\": \"阳新县\",\n\t \"420281\": \"大冶市\",\n\t \"420282\": \"其它区\",\n\t \"420300\": \"十堰市\",\n\t \"420302\": \"茅箭区\",\n\t \"420303\": \"张湾区\",\n\t \"420321\": \"郧县\",\n\t \"420322\": \"郧西县\",\n\t \"420323\": \"竹山县\",\n\t \"420324\": \"竹溪县\",\n\t \"420325\": \"房县\",\n\t \"420381\": \"丹江口市\",\n\t \"420383\": \"其它区\",\n\t \"420500\": \"宜昌市\",\n\t \"420502\": \"西陵区\",\n\t \"420503\": \"伍家岗区\",\n\t \"420504\": \"点军区\",\n\t \"420505\": \"猇亭区\",\n\t \"420506\": \"夷陵区\",\n\t \"420525\": \"远安县\",\n\t \"420526\": \"兴山县\",\n\t \"420527\": \"秭归县\",\n\t \"420528\": \"长阳土家族自治县\",\n\t \"420529\": \"五峰土家族自治县\",\n\t \"420581\": \"宜都市\",\n\t \"420582\": \"当阳市\",\n\t \"420583\": \"枝江市\",\n\t \"420584\": \"其它区\",\n\t \"420600\": \"襄阳市\",\n\t \"420602\": \"襄城区\",\n\t \"420606\": \"樊城区\",\n\t \"420607\": \"襄州区\",\n\t \"420624\": \"南漳县\",\n\t \"420625\": \"谷城县\",\n\t \"420626\": \"保康县\",\n\t \"420682\": \"老河口市\",\n\t \"420683\": \"枣阳市\",\n\t \"420684\": \"宜城市\",\n\t \"420685\": \"其它区\",\n\t \"420700\": \"鄂州市\",\n\t \"420702\": \"梁子湖区\",\n\t \"420703\": \"华容区\",\n\t \"420704\": \"鄂城区\",\n\t \"420705\": \"其它区\",\n\t \"420800\": \"荆门市\",\n\t \"420802\": \"东宝区\",\n\t \"420804\": \"掇刀区\",\n\t \"420821\": \"京山县\",\n\t \"420822\": \"沙洋县\",\n\t \"420881\": \"钟祥市\",\n\t \"420882\": \"其它区\",\n\t \"420900\": \"孝感市\",\n\t \"420902\": \"孝南区\",\n\t \"420921\": \"孝昌县\",\n\t \"420922\": \"大悟县\",\n\t \"420923\": \"云梦县\",\n\t \"420981\": \"应城市\",\n\t \"420982\": \"安陆市\",\n\t \"420984\": \"汉川市\",\n\t \"420985\": \"其它区\",\n\t \"421000\": \"荆州市\",\n\t \"421002\": \"沙市区\",\n\t \"421003\": \"荆州区\",\n\t \"421022\": \"公安县\",\n\t \"421023\": \"监利县\",\n\t \"421024\": \"江陵县\",\n\t \"421081\": \"石首市\",\n\t \"421083\": \"洪湖市\",\n\t \"421087\": \"松滋市\",\n\t \"421088\": \"其它区\",\n\t \"421100\": \"黄冈市\",\n\t \"421102\": \"黄州区\",\n\t \"421121\": \"团风县\",\n\t \"421122\": \"红安县\",\n\t \"421123\": \"罗田县\",\n\t \"421124\": \"英山县\",\n\t \"421125\": \"浠水县\",\n\t \"421126\": \"蕲春县\",\n\t \"421127\": \"黄梅县\",\n\t \"421181\": \"麻城市\",\n\t \"421182\": \"武穴市\",\n\t \"421183\": \"其它区\",\n\t \"421200\": \"咸宁市\",\n\t \"421202\": \"咸安区\",\n\t \"421221\": \"嘉鱼县\",\n\t \"421222\": \"通城县\",\n\t \"421223\": \"崇阳县\",\n\t \"421224\": \"通山县\",\n\t \"421281\": \"赤壁市\",\n\t \"421283\": \"其它区\",\n\t \"421300\": \"随州市\",\n\t \"421302\": \"曾都区\",\n\t \"421321\": \"随县\",\n\t \"421381\": \"广水市\",\n\t \"421382\": \"其它区\",\n\t \"422800\": \"恩施土家族苗族自治州\",\n\t \"422801\": \"恩施市\",\n\t \"422802\": \"利川市\",\n\t \"422822\": \"建始县\",\n\t \"422823\": \"巴东县\",\n\t \"422825\": \"宣恩县\",\n\t \"422826\": \"咸丰县\",\n\t \"422827\": \"来凤县\",\n\t \"422828\": \"鹤峰县\",\n\t \"422829\": \"其它区\",\n\t \"429004\": \"仙桃市\",\n\t \"429005\": \"潜江市\",\n\t \"429006\": \"天门市\",\n\t \"429021\": \"神农架林区\",\n\t \"430000\": \"湖南省\",\n\t \"430100\": \"长沙市\",\n\t \"430102\": \"芙蓉区\",\n\t \"430103\": \"天心区\",\n\t \"430104\": \"岳麓区\",\n\t \"430105\": \"开福区\",\n\t \"430111\": \"雨花区\",\n\t \"430121\": \"长沙县\",\n\t \"430122\": \"望城区\",\n\t \"430124\": \"宁乡县\",\n\t \"430181\": \"浏阳市\",\n\t \"430182\": \"其它区\",\n\t \"430200\": \"株洲市\",\n\t \"430202\": \"荷塘区\",\n\t \"430203\": \"芦淞区\",\n\t \"430204\": \"石峰区\",\n\t \"430211\": \"天元区\",\n\t \"430221\": \"株洲县\",\n\t \"430223\": \"攸县\",\n\t \"430224\": \"茶陵县\",\n\t \"430225\": \"炎陵县\",\n\t \"430281\": \"醴陵市\",\n\t \"430282\": \"其它区\",\n\t \"430300\": \"湘潭市\",\n\t \"430302\": \"雨湖区\",\n\t \"430304\": \"岳塘区\",\n\t \"430321\": \"湘潭县\",\n\t \"430381\": \"湘乡市\",\n\t \"430382\": \"韶山市\",\n\t \"430383\": \"其它区\",\n\t \"430400\": \"衡阳市\",\n\t \"430405\": \"珠晖区\",\n\t \"430406\": \"雁峰区\",\n\t \"430407\": \"石鼓区\",\n\t \"430408\": \"蒸湘区\",\n\t \"430412\": \"南岳区\",\n\t \"430421\": \"衡阳县\",\n\t \"430422\": \"衡南县\",\n\t \"430423\": \"衡山县\",\n\t \"430424\": \"衡东县\",\n\t \"430426\": \"祁东县\",\n\t \"430481\": \"耒阳市\",\n\t \"430482\": \"常宁市\",\n\t \"430483\": \"其它区\",\n\t \"430500\": \"邵阳市\",\n\t \"430502\": \"双清区\",\n\t \"430503\": \"大祥区\",\n\t \"430511\": \"北塔区\",\n\t \"430521\": \"邵东县\",\n\t \"430522\": \"新邵县\",\n\t \"430523\": \"邵阳县\",\n\t \"430524\": \"隆回县\",\n\t \"430525\": \"洞口县\",\n\t \"430527\": \"绥宁县\",\n\t \"430528\": \"新宁县\",\n\t \"430529\": \"城步苗族自治县\",\n\t \"430581\": \"武冈市\",\n\t \"430582\": \"其它区\",\n\t \"430600\": \"岳阳市\",\n\t \"430602\": \"岳阳楼区\",\n\t \"430603\": \"云溪区\",\n\t \"430611\": \"君山区\",\n\t \"430621\": \"岳阳县\",\n\t \"430623\": \"华容县\",\n\t \"430624\": \"湘阴县\",\n\t \"430626\": \"平江县\",\n\t \"430681\": \"汨罗市\",\n\t \"430682\": \"临湘市\",\n\t \"430683\": \"其它区\",\n\t \"430700\": \"常德市\",\n\t \"430702\": \"武陵区\",\n\t \"430703\": \"鼎城区\",\n\t \"430721\": \"安乡县\",\n\t \"430722\": \"汉寿县\",\n\t \"430723\": \"澧县\",\n\t \"430724\": \"临澧县\",\n\t \"430725\": \"桃源县\",\n\t \"430726\": \"石门县\",\n\t \"430781\": \"津市市\",\n\t \"430782\": \"其它区\",\n\t \"430800\": \"张家界市\",\n\t \"430802\": \"永定区\",\n\t \"430811\": \"武陵源区\",\n\t \"430821\": \"慈利县\",\n\t \"430822\": \"桑植县\",\n\t \"430823\": \"其它区\",\n\t \"430900\": \"益阳市\",\n\t \"430902\": \"资阳区\",\n\t \"430903\": \"赫山区\",\n\t \"430921\": \"南县\",\n\t \"430922\": \"桃江县\",\n\t \"430923\": \"安化县\",\n\t \"430981\": \"沅江市\",\n\t \"430982\": \"其它区\",\n\t \"431000\": \"郴州市\",\n\t \"431002\": \"北湖区\",\n\t \"431003\": \"苏仙区\",\n\t \"431021\": \"桂阳县\",\n\t \"431022\": \"宜章县\",\n\t \"431023\": \"永兴县\",\n\t \"431024\": \"嘉禾县\",\n\t \"431025\": \"临武县\",\n\t \"431026\": \"汝城县\",\n\t \"431027\": \"桂东县\",\n\t \"431028\": \"安仁县\",\n\t \"431081\": \"资兴市\",\n\t \"431082\": \"其它区\",\n\t \"431100\": \"永州市\",\n\t \"431102\": \"零陵区\",\n\t \"431103\": \"冷水滩区\",\n\t \"431121\": \"祁阳县\",\n\t \"431122\": \"东安县\",\n\t \"431123\": \"双牌县\",\n\t \"431124\": \"道县\",\n\t \"431125\": \"江永县\",\n\t \"431126\": \"宁远县\",\n\t \"431127\": \"蓝山县\",\n\t \"431128\": \"新田县\",\n\t \"431129\": \"江华瑶族自治县\",\n\t \"431130\": \"其它区\",\n\t \"431200\": \"怀化市\",\n\t \"431202\": \"鹤城区\",\n\t \"431221\": \"中方县\",\n\t \"431222\": \"沅陵县\",\n\t \"431223\": \"辰溪县\",\n\t \"431224\": \"溆浦县\",\n\t \"431225\": \"会同县\",\n\t \"431226\": \"麻阳苗族自治县\",\n\t \"431227\": \"新晃侗族自治县\",\n\t \"431228\": \"芷江侗族自治县\",\n\t \"431229\": \"靖州苗族侗族自治县\",\n\t \"431230\": \"通道侗族自治县\",\n\t \"431281\": \"洪江市\",\n\t \"431282\": \"其它区\",\n\t \"431300\": \"娄底市\",\n\t \"431302\": \"娄星区\",\n\t \"431321\": \"双峰县\",\n\t \"431322\": \"新化县\",\n\t \"431381\": \"冷水江市\",\n\t \"431382\": \"涟源市\",\n\t \"431383\": \"其它区\",\n\t \"433100\": \"湘西土家族苗族自治州\",\n\t \"433101\": \"吉首市\",\n\t \"433122\": \"泸溪县\",\n\t \"433123\": \"凤凰县\",\n\t \"433124\": \"花垣县\",\n\t \"433125\": \"保靖县\",\n\t \"433126\": \"古丈县\",\n\t \"433127\": \"永顺县\",\n\t \"433130\": \"龙山县\",\n\t \"433131\": \"其它区\",\n\t \"440000\": \"广东省\",\n\t \"440100\": \"广州市\",\n\t \"440103\": \"荔湾区\",\n\t \"440104\": \"越秀区\",\n\t \"440105\": \"海珠区\",\n\t \"440106\": \"天河区\",\n\t \"440111\": \"白云区\",\n\t \"440112\": \"黄埔区\",\n\t \"440113\": \"番禺区\",\n\t \"440114\": \"花都区\",\n\t \"440115\": \"南沙区\",\n\t \"440116\": \"萝岗区\",\n\t \"440183\": \"增城市\",\n\t \"440184\": \"从化市\",\n\t \"440189\": \"其它区\",\n\t \"440200\": \"韶关市\",\n\t \"440203\": \"武江区\",\n\t \"440204\": \"浈江区\",\n\t \"440205\": \"曲江区\",\n\t \"440222\": \"始兴县\",\n\t \"440224\": \"仁化县\",\n\t \"440229\": \"翁源县\",\n\t \"440232\": \"乳源瑶族自治县\",\n\t \"440233\": \"新丰县\",\n\t \"440281\": \"乐昌市\",\n\t \"440282\": \"南雄市\",\n\t \"440283\": \"其它区\",\n\t \"440300\": \"深圳市\",\n\t \"440303\": \"罗湖区\",\n\t \"440304\": \"福田区\",\n\t \"440305\": \"南山区\",\n\t \"440306\": \"宝安区\",\n\t \"440307\": \"龙岗区\",\n\t \"440308\": \"盐田区\",\n\t \"440309\": \"其它区\",\n\t \"440320\": \"光明新区\",\n\t \"440321\": \"坪山新区\",\n\t \"440322\": \"大鹏新区\",\n\t \"440323\": \"龙华新区\",\n\t \"440400\": \"珠海市\",\n\t \"440402\": \"香洲区\",\n\t \"440403\": \"斗门区\",\n\t \"440404\": \"金湾区\",\n\t \"440488\": \"其它区\",\n\t \"440500\": \"汕头市\",\n\t \"440507\": \"龙湖区\",\n\t \"440511\": \"金平区\",\n\t \"440512\": \"濠江区\",\n\t \"440513\": \"潮阳区\",\n\t \"440514\": \"潮南区\",\n\t \"440515\": \"澄海区\",\n\t \"440523\": \"南澳县\",\n\t \"440524\": \"其它区\",\n\t \"440600\": \"佛山市\",\n\t \"440604\": \"禅城区\",\n\t \"440605\": \"南海区\",\n\t \"440606\": \"顺德区\",\n\t \"440607\": \"三水区\",\n\t \"440608\": \"高明区\",\n\t \"440609\": \"其它区\",\n\t \"440700\": \"江门市\",\n\t \"440703\": \"蓬江区\",\n\t \"440704\": \"江海区\",\n\t \"440705\": \"新会区\",\n\t \"440781\": \"台山市\",\n\t \"440783\": \"开平市\",\n\t \"440784\": \"鹤山市\",\n\t \"440785\": \"恩平市\",\n\t \"440786\": \"其它区\",\n\t \"440800\": \"湛江市\",\n\t \"440802\": \"赤坎区\",\n\t \"440803\": \"霞山区\",\n\t \"440804\": \"坡头区\",\n\t \"440811\": \"麻章区\",\n\t \"440823\": \"遂溪县\",\n\t \"440825\": \"徐闻县\",\n\t \"440881\": \"廉江市\",\n\t \"440882\": \"雷州市\",\n\t \"440883\": \"吴川市\",\n\t \"440884\": \"其它区\",\n\t \"440900\": \"茂名市\",\n\t \"440902\": \"茂南区\",\n\t \"440903\": \"茂港区\",\n\t \"440923\": \"电白县\",\n\t \"440981\": \"高州市\",\n\t \"440982\": \"化州市\",\n\t \"440983\": \"信宜市\",\n\t \"440984\": \"其它区\",\n\t \"441200\": \"肇庆市\",\n\t \"441202\": \"端州区\",\n\t \"441203\": \"鼎湖区\",\n\t \"441223\": \"广宁县\",\n\t \"441224\": \"怀集县\",\n\t \"441225\": \"封开县\",\n\t \"441226\": \"德庆县\",\n\t \"441283\": \"高要市\",\n\t \"441284\": \"四会市\",\n\t \"441285\": \"其它区\",\n\t \"441300\": \"惠州市\",\n\t \"441302\": \"惠城区\",\n\t \"441303\": \"惠阳区\",\n\t \"441322\": \"博罗县\",\n\t \"441323\": \"惠东县\",\n\t \"441324\": \"龙门县\",\n\t \"441325\": \"其它区\",\n\t \"441400\": \"梅州市\",\n\t \"441402\": \"梅江区\",\n\t \"441421\": \"梅县\",\n\t \"441422\": \"大埔县\",\n\t \"441423\": \"丰顺县\",\n\t \"441424\": \"五华县\",\n\t \"441426\": \"平远县\",\n\t \"441427\": \"蕉岭县\",\n\t \"441481\": \"兴宁市\",\n\t \"441482\": \"其它区\",\n\t \"441500\": \"汕尾市\",\n\t \"441502\": \"城区\",\n\t \"441521\": \"海丰县\",\n\t \"441523\": \"陆河县\",\n\t \"441581\": \"陆丰市\",\n\t \"441582\": \"其它区\",\n\t \"441600\": \"河源市\",\n\t \"441602\": \"源城区\",\n\t \"441621\": \"紫金县\",\n\t \"441622\": \"龙川县\",\n\t \"441623\": \"连平县\",\n\t \"441624\": \"和平县\",\n\t \"441625\": \"东源县\",\n\t \"441626\": \"其它区\",\n\t \"441700\": \"阳江市\",\n\t \"441702\": \"江城区\",\n\t \"441721\": \"阳西县\",\n\t \"441723\": \"阳东县\",\n\t \"441781\": \"阳春市\",\n\t \"441782\": \"其它区\",\n\t \"441800\": \"清远市\",\n\t \"441802\": \"清城区\",\n\t \"441821\": \"佛冈县\",\n\t \"441823\": \"阳山县\",\n\t \"441825\": \"连山壮族瑶族自治县\",\n\t \"441826\": \"连南瑶族自治县\",\n\t \"441827\": \"清新区\",\n\t \"441881\": \"英德市\",\n\t \"441882\": \"连州市\",\n\t \"441883\": \"其它区\",\n\t \"441900\": \"东莞市\",\n\t \"442000\": \"中山市\",\n\t \"442101\": \"东沙群岛\",\n\t \"445100\": \"潮州市\",\n\t \"445102\": \"湘桥区\",\n\t \"445121\": \"潮安区\",\n\t \"445122\": \"饶平县\",\n\t \"445186\": \"其它区\",\n\t \"445200\": \"揭阳市\",\n\t \"445202\": \"榕城区\",\n\t \"445221\": \"揭东区\",\n\t \"445222\": \"揭西县\",\n\t \"445224\": \"惠来县\",\n\t \"445281\": \"普宁市\",\n\t \"445285\": \"其它区\",\n\t \"445300\": \"云浮市\",\n\t \"445302\": \"云城区\",\n\t \"445321\": \"新兴县\",\n\t \"445322\": \"郁南县\",\n\t \"445323\": \"云安县\",\n\t \"445381\": \"罗定市\",\n\t \"445382\": \"其它区\",\n\t \"450000\": \"广西壮族自治区\",\n\t \"450100\": \"南宁市\",\n\t \"450102\": \"兴宁区\",\n\t \"450103\": \"青秀区\",\n\t \"450105\": \"江南区\",\n\t \"450107\": \"西乡塘区\",\n\t \"450108\": \"良庆区\",\n\t \"450109\": \"邕宁区\",\n\t \"450122\": \"武鸣县\",\n\t \"450123\": \"隆安县\",\n\t \"450124\": \"马山县\",\n\t \"450125\": \"上林县\",\n\t \"450126\": \"宾阳县\",\n\t \"450127\": \"横县\",\n\t \"450128\": \"其它区\",\n\t \"450200\": \"柳州市\",\n\t \"450202\": \"城中区\",\n\t \"450203\": \"鱼峰区\",\n\t \"450204\": \"柳南区\",\n\t \"450205\": \"柳北区\",\n\t \"450221\": \"柳江县\",\n\t \"450222\": \"柳城县\",\n\t \"450223\": \"鹿寨县\",\n\t \"450224\": \"融安县\",\n\t \"450225\": \"融水苗族自治县\",\n\t \"450226\": \"三江侗族自治县\",\n\t \"450227\": \"其它区\",\n\t \"450300\": \"桂林市\",\n\t \"450302\": \"秀峰区\",\n\t \"450303\": \"叠彩区\",\n\t \"450304\": \"象山区\",\n\t \"450305\": \"七星区\",\n\t \"450311\": \"雁山区\",\n\t \"450321\": \"阳朔县\",\n\t \"450322\": \"临桂区\",\n\t \"450323\": \"灵川县\",\n\t \"450324\": \"全州县\",\n\t \"450325\": \"兴安县\",\n\t \"450326\": \"永福县\",\n\t \"450327\": \"灌阳县\",\n\t \"450328\": \"龙胜各族自治县\",\n\t \"450329\": \"资源县\",\n\t \"450330\": \"平乐县\",\n\t \"450331\": \"荔浦县\",\n\t \"450332\": \"恭城瑶族自治县\",\n\t \"450333\": \"其它区\",\n\t \"450400\": \"梧州市\",\n\t \"450403\": \"万秀区\",\n\t \"450405\": \"长洲区\",\n\t \"450406\": \"龙圩区\",\n\t \"450421\": \"苍梧县\",\n\t \"450422\": \"藤县\",\n\t \"450423\": \"蒙山县\",\n\t \"450481\": \"岑溪市\",\n\t \"450482\": \"其它区\",\n\t \"450500\": \"北海市\",\n\t \"450502\": \"海城区\",\n\t \"450503\": \"银海区\",\n\t \"450512\": \"铁山港区\",\n\t \"450521\": \"合浦县\",\n\t \"450522\": \"其它区\",\n\t \"450600\": \"防城港市\",\n\t \"450602\": \"港口区\",\n\t \"450603\": \"防城区\",\n\t \"450621\": \"上思县\",\n\t \"450681\": \"东兴市\",\n\t \"450682\": \"其它区\",\n\t \"450700\": \"钦州市\",\n\t \"450702\": \"钦南区\",\n\t \"450703\": \"钦北区\",\n\t \"450721\": \"灵山县\",\n\t \"450722\": \"浦北县\",\n\t \"450723\": \"其它区\",\n\t \"450800\": \"贵港市\",\n\t \"450802\": \"港北区\",\n\t \"450803\": \"港南区\",\n\t \"450804\": \"覃塘区\",\n\t \"450821\": \"平南县\",\n\t \"450881\": \"桂平市\",\n\t \"450882\": \"其它区\",\n\t \"450900\": \"玉林市\",\n\t \"450902\": \"玉州区\",\n\t \"450903\": \"福绵区\",\n\t \"450921\": \"容县\",\n\t \"450922\": \"陆川县\",\n\t \"450923\": \"博白县\",\n\t \"450924\": \"兴业县\",\n\t \"450981\": \"北流市\",\n\t \"450982\": \"其它区\",\n\t \"451000\": \"百色市\",\n\t \"451002\": \"右江区\",\n\t \"451021\": \"田阳县\",\n\t \"451022\": \"田东县\",\n\t \"451023\": \"平果县\",\n\t \"451024\": \"德保县\",\n\t \"451025\": \"靖西县\",\n\t \"451026\": \"那坡县\",\n\t \"451027\": \"凌云县\",\n\t \"451028\": \"乐业县\",\n\t \"451029\": \"田林县\",\n\t \"451030\": \"西林县\",\n\t \"451031\": \"隆林各族自治县\",\n\t \"451032\": \"其它区\",\n\t \"451100\": \"贺州市\",\n\t \"451102\": \"八步区\",\n\t \"451119\": \"平桂管理区\",\n\t \"451121\": \"昭平县\",\n\t \"451122\": \"钟山县\",\n\t \"451123\": \"富川瑶族自治县\",\n\t \"451124\": \"其它区\",\n\t \"451200\": \"河池市\",\n\t \"451202\": \"金城江区\",\n\t \"451221\": \"南丹县\",\n\t \"451222\": \"天峨县\",\n\t \"451223\": \"凤山县\",\n\t \"451224\": \"东兰县\",\n\t \"451225\": \"罗城仫佬族自治县\",\n\t \"451226\": \"环江毛南族自治县\",\n\t \"451227\": \"巴马瑶族自治县\",\n\t \"451228\": \"都安瑶族自治县\",\n\t \"451229\": \"大化瑶族自治县\",\n\t \"451281\": \"宜州市\",\n\t \"451282\": \"其它区\",\n\t \"451300\": \"来宾市\",\n\t \"451302\": \"兴宾区\",\n\t \"451321\": \"忻城县\",\n\t \"451322\": \"象州县\",\n\t \"451323\": \"武宣县\",\n\t \"451324\": \"金秀瑶族自治县\",\n\t \"451381\": \"合山市\",\n\t \"451382\": \"其它区\",\n\t \"451400\": \"崇左市\",\n\t \"451402\": \"江州区\",\n\t \"451421\": \"扶绥县\",\n\t \"451422\": \"宁明县\",\n\t \"451423\": \"龙州县\",\n\t \"451424\": \"大新县\",\n\t \"451425\": \"天等县\",\n\t \"451481\": \"凭祥市\",\n\t \"451482\": \"其它区\",\n\t \"460000\": \"海南省\",\n\t \"460100\": \"海口市\",\n\t \"460105\": \"秀英区\",\n\t \"460106\": \"龙华区\",\n\t \"460107\": \"琼山区\",\n\t \"460108\": \"美兰区\",\n\t \"460109\": \"其它区\",\n\t \"460200\": \"三亚市\",\n\t \"460300\": \"三沙市\",\n\t \"460321\": \"西沙群岛\",\n\t \"460322\": \"南沙群岛\",\n\t \"460323\": \"中沙群岛的岛礁及其海域\",\n\t \"469001\": \"五指山市\",\n\t \"469002\": \"琼海市\",\n\t \"469003\": \"儋州市\",\n\t \"469005\": \"文昌市\",\n\t \"469006\": \"万宁市\",\n\t \"469007\": \"东方市\",\n\t \"469025\": \"定安县\",\n\t \"469026\": \"屯昌县\",\n\t \"469027\": \"澄迈县\",\n\t \"469028\": \"临高县\",\n\t \"469030\": \"白沙黎族自治县\",\n\t \"469031\": \"昌江黎族自治县\",\n\t \"469033\": \"乐东黎族自治县\",\n\t \"469034\": \"陵水黎族自治县\",\n\t \"469035\": \"保亭黎族苗族自治县\",\n\t \"469036\": \"琼中黎族苗族自治县\",\n\t \"471005\": \"其它区\",\n\t \"500000\": \"重庆\",\n\t \"500100\": \"重庆市\",\n\t \"500101\": \"万州区\",\n\t \"500102\": \"涪陵区\",\n\t \"500103\": \"渝中区\",\n\t \"500104\": \"大渡口区\",\n\t \"500105\": \"江北区\",\n\t \"500106\": \"沙坪坝区\",\n\t \"500107\": \"九龙坡区\",\n\t \"500108\": \"南岸区\",\n\t \"500109\": \"北碚区\",\n\t \"500110\": \"万盛区\",\n\t \"500111\": \"双桥区\",\n\t \"500112\": \"渝北区\",\n\t \"500113\": \"巴南区\",\n\t \"500114\": \"黔江区\",\n\t \"500115\": \"长寿区\",\n\t \"500222\": \"綦江区\",\n\t \"500223\": \"潼南县\",\n\t \"500224\": \"铜梁县\",\n\t \"500225\": \"大足区\",\n\t \"500226\": \"荣昌县\",\n\t \"500227\": \"璧山县\",\n\t \"500228\": \"梁平县\",\n\t \"500229\": \"城口县\",\n\t \"500230\": \"丰都县\",\n\t \"500231\": \"垫江县\",\n\t \"500232\": \"武隆县\",\n\t \"500233\": \"忠县\",\n\t \"500234\": \"开县\",\n\t \"500235\": \"云阳县\",\n\t \"500236\": \"奉节县\",\n\t \"500237\": \"巫山县\",\n\t \"500238\": \"巫溪县\",\n\t \"500240\": \"石柱土家族自治县\",\n\t \"500241\": \"秀山土家族苗族自治县\",\n\t \"500242\": \"酉阳土家族苗族自治县\",\n\t \"500243\": \"彭水苗族土家族自治县\",\n\t \"500381\": \"江津区\",\n\t \"500382\": \"合川区\",\n\t \"500383\": \"永川区\",\n\t \"500384\": \"南川区\",\n\t \"500385\": \"其它区\",\n\t \"510000\": \"四川省\",\n\t \"510100\": \"成都市\",\n\t \"510104\": \"锦江区\",\n\t \"510105\": \"青羊区\",\n\t \"510106\": \"金牛区\",\n\t \"510107\": \"武侯区\",\n\t \"510108\": \"成华区\",\n\t \"510112\": \"龙泉驿区\",\n\t \"510113\": \"青白江区\",\n\t \"510114\": \"新都区\",\n\t \"510115\": \"温江区\",\n\t \"510121\": \"金堂县\",\n\t \"510122\": \"双流县\",\n\t \"510124\": \"郫县\",\n\t \"510129\": \"大邑县\",\n\t \"510131\": \"蒲江县\",\n\t \"510132\": \"新津县\",\n\t \"510181\": \"都江堰市\",\n\t \"510182\": \"彭州市\",\n\t \"510183\": \"邛崃市\",\n\t \"510184\": \"崇州市\",\n\t \"510185\": \"其它区\",\n\t \"510300\": \"自贡市\",\n\t \"510302\": \"自流井区\",\n\t \"510303\": \"贡井区\",\n\t \"510304\": \"大安区\",\n\t \"510311\": \"沿滩区\",\n\t \"510321\": \"荣县\",\n\t \"510322\": \"富顺县\",\n\t \"510323\": \"其它区\",\n\t \"510400\": \"攀枝花市\",\n\t \"510402\": \"东区\",\n\t \"510403\": \"西区\",\n\t \"510411\": \"仁和区\",\n\t \"510421\": \"米易县\",\n\t \"510422\": \"盐边县\",\n\t \"510423\": \"其它区\",\n\t \"510500\": \"泸州市\",\n\t \"510502\": \"江阳区\",\n\t \"510503\": \"纳溪区\",\n\t \"510504\": \"龙马潭区\",\n\t \"510521\": \"泸县\",\n\t \"510522\": \"合江县\",\n\t \"510524\": \"叙永县\",\n\t \"510525\": \"古蔺县\",\n\t \"510526\": \"其它区\",\n\t \"510600\": \"德阳市\",\n\t \"510603\": \"旌阳区\",\n\t \"510623\": \"中江县\",\n\t \"510626\": \"罗江县\",\n\t \"510681\": \"广汉市\",\n\t \"510682\": \"什邡市\",\n\t \"510683\": \"绵竹市\",\n\t \"510684\": \"其它区\",\n\t \"510700\": \"绵阳市\",\n\t \"510703\": \"涪城区\",\n\t \"510704\": \"游仙区\",\n\t \"510722\": \"三台县\",\n\t \"510723\": \"盐亭县\",\n\t \"510724\": \"安县\",\n\t \"510725\": \"梓潼县\",\n\t \"510726\": \"北川羌族自治县\",\n\t \"510727\": \"平武县\",\n\t \"510781\": \"江油市\",\n\t \"510782\": \"其它区\",\n\t \"510800\": \"广元市\",\n\t \"510802\": \"利州区\",\n\t \"510811\": \"昭化区\",\n\t \"510812\": \"朝天区\",\n\t \"510821\": \"旺苍县\",\n\t \"510822\": \"青川县\",\n\t \"510823\": \"剑阁县\",\n\t \"510824\": \"苍溪县\",\n\t \"510825\": \"其它区\",\n\t \"510900\": \"遂宁市\",\n\t \"510903\": \"船山区\",\n\t \"510904\": \"安居区\",\n\t \"510921\": \"蓬溪县\",\n\t \"510922\": \"射洪县\",\n\t \"510923\": \"大英县\",\n\t \"510924\": \"其它区\",\n\t \"511000\": \"内江市\",\n\t \"511002\": \"市中区\",\n\t \"511011\": \"东兴区\",\n\t \"511024\": \"威远县\",\n\t \"511025\": \"资中县\",\n\t \"511028\": \"隆昌县\",\n\t \"511029\": \"其它区\",\n\t \"511100\": \"乐山市\",\n\t \"511102\": \"市中区\",\n\t \"511111\": \"沙湾区\",\n\t \"511112\": \"五通桥区\",\n\t \"511113\": \"金口河区\",\n\t \"511123\": \"犍为县\",\n\t \"511124\": \"井研县\",\n\t \"511126\": \"夹江县\",\n\t \"511129\": \"沐川县\",\n\t \"511132\": \"峨边彝族自治县\",\n\t \"511133\": \"马边彝族自治县\",\n\t \"511181\": \"峨眉山市\",\n\t \"511182\": \"其它区\",\n\t \"511300\": \"南充市\",\n\t \"511302\": \"顺庆区\",\n\t \"511303\": \"高坪区\",\n\t \"511304\": \"嘉陵区\",\n\t \"511321\": \"南部县\",\n\t \"511322\": \"营山县\",\n\t \"511323\": \"蓬安县\",\n\t \"511324\": \"仪陇县\",\n\t \"511325\": \"西充县\",\n\t \"511381\": \"阆中市\",\n\t \"511382\": \"其它区\",\n\t \"511400\": \"眉山市\",\n\t \"511402\": \"东坡区\",\n\t \"511421\": \"仁寿县\",\n\t \"511422\": \"彭山县\",\n\t \"511423\": \"洪雅县\",\n\t \"511424\": \"丹棱县\",\n\t \"511425\": \"青神县\",\n\t \"511426\": \"其它区\",\n\t \"511500\": \"宜宾市\",\n\t \"511502\": \"翠屏区\",\n\t \"511521\": \"宜宾县\",\n\t \"511522\": \"南溪区\",\n\t \"511523\": \"江安县\",\n\t \"511524\": \"长宁县\",\n\t \"511525\": \"高县\",\n\t \"511526\": \"珙县\",\n\t \"511527\": \"筠连县\",\n\t \"511528\": \"兴文县\",\n\t \"511529\": \"屏山县\",\n\t \"511530\": \"其它区\",\n\t \"511600\": \"广安市\",\n\t \"511602\": \"广安区\",\n\t \"511603\": \"前锋区\",\n\t \"511621\": \"岳池县\",\n\t \"511622\": \"武胜县\",\n\t \"511623\": \"邻水县\",\n\t \"511681\": \"华蓥市\",\n\t \"511683\": \"其它区\",\n\t \"511700\": \"达州市\",\n\t \"511702\": \"通川区\",\n\t \"511721\": \"达川区\",\n\t \"511722\": \"宣汉县\",\n\t \"511723\": \"开江县\",\n\t \"511724\": \"大竹县\",\n\t \"511725\": \"渠县\",\n\t \"511781\": \"万源市\",\n\t \"511782\": \"其它区\",\n\t \"511800\": \"雅安市\",\n\t \"511802\": \"雨城区\",\n\t \"511821\": \"名山区\",\n\t \"511822\": \"荥经县\",\n\t \"511823\": \"汉源县\",\n\t \"511824\": \"石棉县\",\n\t \"511825\": \"天全县\",\n\t \"511826\": \"芦山县\",\n\t \"511827\": \"宝兴县\",\n\t \"511828\": \"其它区\",\n\t \"511900\": \"巴中市\",\n\t \"511902\": \"巴州区\",\n\t \"511903\": \"恩阳区\",\n\t \"511921\": \"通江县\",\n\t \"511922\": \"南江县\",\n\t \"511923\": \"平昌县\",\n\t \"511924\": \"其它区\",\n\t \"512000\": \"资阳市\",\n\t \"512002\": \"雁江区\",\n\t \"512021\": \"安岳县\",\n\t \"512022\": \"乐至县\",\n\t \"512081\": \"简阳市\",\n\t \"512082\": \"其它区\",\n\t \"513200\": \"阿坝藏族羌族自治州\",\n\t \"513221\": \"汶川县\",\n\t \"513222\": \"理县\",\n\t \"513223\": \"茂县\",\n\t \"513224\": \"松潘县\",\n\t \"513225\": \"九寨沟县\",\n\t \"513226\": \"金川县\",\n\t \"513227\": \"小金县\",\n\t \"513228\": \"黑水县\",\n\t \"513229\": \"马尔康县\",\n\t \"513230\": \"壤塘县\",\n\t \"513231\": \"阿坝县\",\n\t \"513232\": \"若尔盖县\",\n\t \"513233\": \"红原县\",\n\t \"513234\": \"其它区\",\n\t \"513300\": \"甘孜藏族自治州\",\n\t \"513321\": \"康定县\",\n\t \"513322\": \"泸定县\",\n\t \"513323\": \"丹巴县\",\n\t \"513324\": \"九龙县\",\n\t \"513325\": \"雅江县\",\n\t \"513326\": \"道孚县\",\n\t \"513327\": \"炉霍县\",\n\t \"513328\": \"甘孜县\",\n\t \"513329\": \"新龙县\",\n\t \"513330\": \"德格县\",\n\t \"513331\": \"白玉县\",\n\t \"513332\": \"石渠县\",\n\t \"513333\": \"色达县\",\n\t \"513334\": \"理塘县\",\n\t \"513335\": \"巴塘县\",\n\t \"513336\": \"乡城县\",\n\t \"513337\": \"稻城县\",\n\t \"513338\": \"得荣县\",\n\t \"513339\": \"其它区\",\n\t \"513400\": \"凉山彝族自治州\",\n\t \"513401\": \"西昌市\",\n\t \"513422\": \"木里藏族自治县\",\n\t \"513423\": \"盐源县\",\n\t \"513424\": \"德昌县\",\n\t \"513425\": \"会理县\",\n\t \"513426\": \"会东县\",\n\t \"513427\": \"宁南县\",\n\t \"513428\": \"普格县\",\n\t \"513429\": \"布拖县\",\n\t \"513430\": \"金阳县\",\n\t \"513431\": \"昭觉县\",\n\t \"513432\": \"喜德县\",\n\t \"513433\": \"冕宁县\",\n\t \"513434\": \"越西县\",\n\t \"513435\": \"甘洛县\",\n\t \"513436\": \"美姑县\",\n\t \"513437\": \"雷波县\",\n\t \"513438\": \"其它区\",\n\t \"520000\": \"贵州省\",\n\t \"520100\": \"贵阳市\",\n\t \"520102\": \"南明区\",\n\t \"520103\": \"云岩区\",\n\t \"520111\": \"花溪区\",\n\t \"520112\": \"乌当区\",\n\t \"520113\": \"白云区\",\n\t \"520121\": \"开阳县\",\n\t \"520122\": \"息烽县\",\n\t \"520123\": \"修文县\",\n\t \"520151\": \"观山湖区\",\n\t \"520181\": \"清镇市\",\n\t \"520182\": \"其它区\",\n\t \"520200\": \"六盘水市\",\n\t \"520201\": \"钟山区\",\n\t \"520203\": \"六枝特区\",\n\t \"520221\": \"水城县\",\n\t \"520222\": \"盘县\",\n\t \"520223\": \"其它区\",\n\t \"520300\": \"遵义市\",\n\t \"520302\": \"红花岗区\",\n\t \"520303\": \"汇川区\",\n\t \"520321\": \"遵义县\",\n\t \"520322\": \"桐梓县\",\n\t \"520323\": \"绥阳县\",\n\t \"520324\": \"正安县\",\n\t \"520325\": \"道真仡佬族苗族自治县\",\n\t \"520326\": \"务川仡佬族苗族自治县\",\n\t \"520327\": \"凤冈县\",\n\t \"520328\": \"湄潭县\",\n\t \"520329\": \"余庆县\",\n\t \"520330\": \"习水县\",\n\t \"520381\": \"赤水市\",\n\t \"520382\": \"仁怀市\",\n\t \"520383\": \"其它区\",\n\t \"520400\": \"安顺市\",\n\t \"520402\": \"西秀区\",\n\t \"520421\": \"平坝县\",\n\t \"520422\": \"普定县\",\n\t \"520423\": \"镇宁布依族苗族自治县\",\n\t \"520424\": \"关岭布依族苗族自治县\",\n\t \"520425\": \"紫云苗族布依族自治县\",\n\t \"520426\": \"其它区\",\n\t \"522200\": \"铜仁市\",\n\t \"522201\": \"碧江区\",\n\t \"522222\": \"江口县\",\n\t \"522223\": \"玉屏侗族自治县\",\n\t \"522224\": \"石阡县\",\n\t \"522225\": \"思南县\",\n\t \"522226\": \"印江土家族苗族自治县\",\n\t \"522227\": \"德江县\",\n\t \"522228\": \"沿河土家族自治县\",\n\t \"522229\": \"松桃苗族自治县\",\n\t \"522230\": \"万山区\",\n\t \"522231\": \"其它区\",\n\t \"522300\": \"黔西南布依族苗族自治州\",\n\t \"522301\": \"兴义市\",\n\t \"522322\": \"兴仁县\",\n\t \"522323\": \"普安县\",\n\t \"522324\": \"晴隆县\",\n\t \"522325\": \"贞丰县\",\n\t \"522326\": \"望谟县\",\n\t \"522327\": \"册亨县\",\n\t \"522328\": \"安龙县\",\n\t \"522329\": \"其它区\",\n\t \"522400\": \"毕节市\",\n\t \"522401\": \"七星关区\",\n\t \"522422\": \"大方县\",\n\t \"522423\": \"黔西县\",\n\t \"522424\": \"金沙县\",\n\t \"522425\": \"织金县\",\n\t \"522426\": \"纳雍县\",\n\t \"522427\": \"威宁彝族回族苗族自治县\",\n\t \"522428\": \"赫章县\",\n\t \"522429\": \"其它区\",\n\t \"522600\": \"黔东南苗族侗族自治州\",\n\t \"522601\": \"凯里市\",\n\t \"522622\": \"黄平县\",\n\t \"522623\": \"施秉县\",\n\t \"522624\": \"三穗县\",\n\t \"522625\": \"镇远县\",\n\t \"522626\": \"岑巩县\",\n\t \"522627\": \"天柱县\",\n\t \"522628\": \"锦屏县\",\n\t \"522629\": \"剑河县\",\n\t \"522630\": \"台江县\",\n\t \"522631\": \"黎平县\",\n\t \"522632\": \"榕江县\",\n\t \"522633\": \"从江县\",\n\t \"522634\": \"雷山县\",\n\t \"522635\": \"麻江县\",\n\t \"522636\": \"丹寨县\",\n\t \"522637\": \"其它区\",\n\t \"522700\": \"黔南布依族苗族自治州\",\n\t \"522701\": \"都匀市\",\n\t \"522702\": \"福泉市\",\n\t \"522722\": \"荔波县\",\n\t \"522723\": \"贵定县\",\n\t \"522725\": \"瓮安县\",\n\t \"522726\": \"独山县\",\n\t \"522727\": \"平塘县\",\n\t \"522728\": \"罗甸县\",\n\t \"522729\": \"长顺县\",\n\t \"522730\": \"龙里县\",\n\t \"522731\": \"惠水县\",\n\t \"522732\": \"三都水族自治县\",\n\t \"522733\": \"其它区\",\n\t \"530000\": \"云南省\",\n\t \"530100\": \"昆明市\",\n\t \"530102\": \"五华区\",\n\t \"530103\": \"盘龙区\",\n\t \"530111\": \"官渡区\",\n\t \"530112\": \"西山区\",\n\t \"530113\": \"东川区\",\n\t \"530121\": \"呈贡区\",\n\t \"530122\": \"晋宁县\",\n\t \"530124\": \"富民县\",\n\t \"530125\": \"宜良县\",\n\t \"530126\": \"石林彝族自治县\",\n\t \"530127\": \"嵩明县\",\n\t \"530128\": \"禄劝彝族苗族自治县\",\n\t \"530129\": \"寻甸回族彝族自治县\",\n\t \"530181\": \"安宁市\",\n\t \"530182\": \"其它区\",\n\t \"530300\": \"曲靖市\",\n\t \"530302\": \"麒麟区\",\n\t \"530321\": \"马龙县\",\n\t \"530322\": \"陆良县\",\n\t \"530323\": \"师宗县\",\n\t \"530324\": \"罗平县\",\n\t \"530325\": \"富源县\",\n\t \"530326\": \"会泽县\",\n\t \"530328\": \"沾益县\",\n\t \"530381\": \"宣威市\",\n\t \"530382\": \"其它区\",\n\t \"530400\": \"玉溪市\",\n\t \"530402\": \"红塔区\",\n\t \"530421\": \"江川县\",\n\t \"530422\": \"澄江县\",\n\t \"530423\": \"通海县\",\n\t \"530424\": \"华宁县\",\n\t \"530425\": \"易门县\",\n\t \"530426\": \"峨山彝族自治县\",\n\t \"530427\": \"新平彝族傣族自治县\",\n\t \"530428\": \"元江哈尼族彝族傣族自治县\",\n\t \"530429\": \"其它区\",\n\t \"530500\": \"保山市\",\n\t \"530502\": \"隆阳区\",\n\t \"530521\": \"施甸县\",\n\t \"530522\": \"腾冲县\",\n\t \"530523\": \"龙陵县\",\n\t \"530524\": \"昌宁县\",\n\t \"530525\": \"其它区\",\n\t \"530600\": \"昭通市\",\n\t \"530602\": \"昭阳区\",\n\t \"530621\": \"鲁甸县\",\n\t \"530622\": \"巧家县\",\n\t \"530623\": \"盐津县\",\n\t \"530624\": \"大关县\",\n\t \"530625\": \"永善县\",\n\t \"530626\": \"绥江县\",\n\t \"530627\": \"镇雄县\",\n\t \"530628\": \"彝良县\",\n\t \"530629\": \"威信县\",\n\t \"530630\": \"水富县\",\n\t \"530631\": \"其它区\",\n\t \"530700\": \"丽江市\",\n\t \"530702\": \"古城区\",\n\t \"530721\": \"玉龙纳西族自治县\",\n\t \"530722\": \"永胜县\",\n\t \"530723\": \"华坪县\",\n\t \"530724\": \"宁蒗彝族自治县\",\n\t \"530725\": \"其它区\",\n\t \"530800\": \"普洱市\",\n\t \"530802\": \"思茅区\",\n\t \"530821\": \"宁洱哈尼族彝族自治县\",\n\t \"530822\": \"墨江哈尼族自治县\",\n\t \"530823\": \"景东彝族自治县\",\n\t \"530824\": \"景谷傣族彝族自治县\",\n\t \"530825\": \"镇沅彝族哈尼族拉祜族自治县\",\n\t \"530826\": \"江城哈尼族彝族自治县\",\n\t \"530827\": \"孟连傣族拉祜族佤族自治县\",\n\t \"530828\": \"澜沧拉祜族自治县\",\n\t \"530829\": \"西盟佤族自治县\",\n\t \"530830\": \"其它区\",\n\t \"530900\": \"临沧市\",\n\t \"530902\": \"临翔区\",\n\t \"530921\": \"凤庆县\",\n\t \"530922\": \"云县\",\n\t \"530923\": \"永德县\",\n\t \"530924\": \"镇康县\",\n\t \"530925\": \"双江拉祜族佤族布朗族傣族自治县\",\n\t \"530926\": \"耿马傣族佤族自治县\",\n\t \"530927\": \"沧源佤族自治县\",\n\t \"530928\": \"其它区\",\n\t \"532300\": \"楚雄彝族自治州\",\n\t \"532301\": \"楚雄市\",\n\t \"532322\": \"双柏县\",\n\t \"532323\": \"牟定县\",\n\t \"532324\": \"南华县\",\n\t \"532325\": \"姚安县\",\n\t \"532326\": \"大姚县\",\n\t \"532327\": \"永仁县\",\n\t \"532328\": \"元谋县\",\n\t \"532329\": \"武定县\",\n\t \"532331\": \"禄丰县\",\n\t \"532332\": \"其它区\",\n\t \"532500\": \"红河哈尼族彝族自治州\",\n\t \"532501\": \"个旧市\",\n\t \"532502\": \"开远市\",\n\t \"532522\": \"蒙自市\",\n\t \"532523\": \"屏边苗族自治县\",\n\t \"532524\": \"建水县\",\n\t \"532525\": \"石屏县\",\n\t \"532526\": \"弥勒市\",\n\t \"532527\": \"泸西县\",\n\t \"532528\": \"元阳县\",\n\t \"532529\": \"红河县\",\n\t \"532530\": \"金平苗族瑶族傣族自治县\",\n\t \"532531\": \"绿春县\",\n\t \"532532\": \"河口瑶族自治县\",\n\t \"532533\": \"其它区\",\n\t \"532600\": \"文山壮族苗族自治州\",\n\t \"532621\": \"文山市\",\n\t \"532622\": \"砚山县\",\n\t \"532623\": \"西畴县\",\n\t \"532624\": \"麻栗坡县\",\n\t \"532625\": \"马关县\",\n\t \"532626\": \"丘北县\",\n\t \"532627\": \"广南县\",\n\t \"532628\": \"富宁县\",\n\t \"532629\": \"其它区\",\n\t \"532800\": \"西双版纳傣族自治州\",\n\t \"532801\": \"景洪市\",\n\t \"532822\": \"勐海县\",\n\t \"532823\": \"勐腊县\",\n\t \"532824\": \"其它区\",\n\t \"532900\": \"大理白族自治州\",\n\t \"532901\": \"大理市\",\n\t \"532922\": \"漾濞彝族自治县\",\n\t \"532923\": \"祥云县\",\n\t \"532924\": \"宾川县\",\n\t \"532925\": \"弥渡县\",\n\t \"532926\": \"南涧彝族自治县\",\n\t \"532927\": \"巍山彝族回族自治县\",\n\t \"532928\": \"永平县\",\n\t \"532929\": \"云龙县\",\n\t \"532930\": \"洱源县\",\n\t \"532931\": \"剑川县\",\n\t \"532932\": \"鹤庆县\",\n\t \"532933\": \"其它区\",\n\t \"533100\": \"德宏傣族景颇族自治州\",\n\t \"533102\": \"瑞丽市\",\n\t \"533103\": \"芒市\",\n\t \"533122\": \"梁河县\",\n\t \"533123\": \"盈江县\",\n\t \"533124\": \"陇川县\",\n\t \"533125\": \"其它区\",\n\t \"533300\": \"怒江傈僳族自治州\",\n\t \"533321\": \"泸水县\",\n\t \"533323\": \"福贡县\",\n\t \"533324\": \"贡山独龙族怒族自治县\",\n\t \"533325\": \"兰坪白族普米族自治县\",\n\t \"533326\": \"其它区\",\n\t \"533400\": \"迪庆藏族自治州\",\n\t \"533421\": \"香格里拉县\",\n\t \"533422\": \"德钦县\",\n\t \"533423\": \"维西傈僳族自治县\",\n\t \"533424\": \"其它区\",\n\t \"540000\": \"西藏自治区\",\n\t \"540100\": \"拉萨市\",\n\t \"540102\": \"城关区\",\n\t \"540121\": \"林周县\",\n\t \"540122\": \"当雄县\",\n\t \"540123\": \"尼木县\",\n\t \"540124\": \"曲水县\",\n\t \"540125\": \"堆龙德庆县\",\n\t \"540126\": \"达孜县\",\n\t \"540127\": \"墨竹工卡县\",\n\t \"540128\": \"其它区\",\n\t \"542100\": \"昌都地区\",\n\t \"542121\": \"昌都县\",\n\t \"542122\": \"江达县\",\n\t \"542123\": \"贡觉县\",\n\t \"542124\": \"类乌齐县\",\n\t \"542125\": \"丁青县\",\n\t \"542126\": \"察雅县\",\n\t \"542127\": \"八宿县\",\n\t \"542128\": \"左贡县\",\n\t \"542129\": \"芒康县\",\n\t \"542132\": \"洛隆县\",\n\t \"542133\": \"边坝县\",\n\t \"542134\": \"其它区\",\n\t \"542200\": \"山南地区\",\n\t \"542221\": \"乃东县\",\n\t \"542222\": \"扎囊县\",\n\t \"542223\": \"贡嘎县\",\n\t \"542224\": \"桑日县\",\n\t \"542225\": \"琼结县\",\n\t \"542226\": \"曲松县\",\n\t \"542227\": \"措美县\",\n\t \"542228\": \"洛扎县\",\n\t \"542229\": \"加查县\",\n\t \"542231\": \"隆子县\",\n\t \"542232\": \"错那县\",\n\t \"542233\": \"浪卡子县\",\n\t \"542234\": \"其它区\",\n\t \"542300\": \"日喀则地区\",\n\t \"542301\": \"日喀则市\",\n\t \"542322\": \"南木林县\",\n\t \"542323\": \"江孜县\",\n\t \"542324\": \"定日县\",\n\t \"542325\": \"萨迦县\",\n\t \"542326\": \"拉孜县\",\n\t \"542327\": \"昂仁县\",\n\t \"542328\": \"谢通门县\",\n\t \"542329\": \"白朗县\",\n\t \"542330\": \"仁布县\",\n\t \"542331\": \"康马县\",\n\t \"542332\": \"定结县\",\n\t \"542333\": \"仲巴县\",\n\t \"542334\": \"亚东县\",\n\t \"542335\": \"吉隆县\",\n\t \"542336\": \"聂拉木县\",\n\t \"542337\": \"萨嘎县\",\n\t \"542338\": \"岗巴县\",\n\t \"542339\": \"其它区\",\n\t \"542400\": \"那曲地区\",\n\t \"542421\": \"那曲县\",\n\t \"542422\": \"嘉黎县\",\n\t \"542423\": \"比如县\",\n\t \"542424\": \"聂荣县\",\n\t \"542425\": \"安多县\",\n\t \"542426\": \"申扎县\",\n\t \"542427\": \"索县\",\n\t \"542428\": \"班戈县\",\n\t \"542429\": \"巴青县\",\n\t \"542430\": \"尼玛县\",\n\t \"542431\": \"其它区\",\n\t \"542432\": \"双湖县\",\n\t \"542500\": \"阿里地区\",\n\t \"542521\": \"普兰县\",\n\t \"542522\": \"札达县\",\n\t \"542523\": \"噶尔县\",\n\t \"542524\": \"日土县\",\n\t \"542525\": \"革吉县\",\n\t \"542526\": \"改则县\",\n\t \"542527\": \"措勤县\",\n\t \"542528\": \"其它区\",\n\t \"542600\": \"林芝地区\",\n\t \"542621\": \"林芝县\",\n\t \"542622\": \"工布江达县\",\n\t \"542623\": \"米林县\",\n\t \"542624\": \"墨脱县\",\n\t \"542625\": \"波密县\",\n\t \"542626\": \"察隅县\",\n\t \"542627\": \"朗县\",\n\t \"542628\": \"其它区\",\n\t \"610000\": \"陕西省\",\n\t \"610100\": \"西安市\",\n\t \"610102\": \"新城区\",\n\t \"610103\": \"碑林区\",\n\t \"610104\": \"莲湖区\",\n\t \"610111\": \"灞桥区\",\n\t \"610112\": \"未央区\",\n\t \"610113\": \"雁塔区\",\n\t \"610114\": \"阎良区\",\n\t \"610115\": \"临潼区\",\n\t \"610116\": \"长安区\",\n\t \"610122\": \"蓝田县\",\n\t \"610124\": \"周至县\",\n\t \"610125\": \"户县\",\n\t \"610126\": \"高陵县\",\n\t \"610127\": \"其它区\",\n\t \"610200\": \"铜川市\",\n\t \"610202\": \"王益区\",\n\t \"610203\": \"印台区\",\n\t \"610204\": \"耀州区\",\n\t \"610222\": \"宜君县\",\n\t \"610223\": \"其它区\",\n\t \"610300\": \"宝鸡市\",\n\t \"610302\": \"渭滨区\",\n\t \"610303\": \"金台区\",\n\t \"610304\": \"陈仓区\",\n\t \"610322\": \"凤翔县\",\n\t \"610323\": \"岐山县\",\n\t \"610324\": \"扶风县\",\n\t \"610326\": \"眉县\",\n\t \"610327\": \"陇县\",\n\t \"610328\": \"千阳县\",\n\t \"610329\": \"麟游县\",\n\t \"610330\": \"凤县\",\n\t \"610331\": \"太白县\",\n\t \"610332\": \"其它区\",\n\t \"610400\": \"咸阳市\",\n\t \"610402\": \"秦都区\",\n\t \"610403\": \"杨陵区\",\n\t \"610404\": \"渭城区\",\n\t \"610422\": \"三原县\",\n\t \"610423\": \"泾阳县\",\n\t \"610424\": \"乾县\",\n\t \"610425\": \"礼泉县\",\n\t \"610426\": \"永寿县\",\n\t \"610427\": \"彬县\",\n\t \"610428\": \"长武县\",\n\t \"610429\": \"旬邑县\",\n\t \"610430\": \"淳化县\",\n\t \"610431\": \"武功县\",\n\t \"610481\": \"兴平市\",\n\t \"610482\": \"其它区\",\n\t \"610500\": \"渭南市\",\n\t \"610502\": \"临渭区\",\n\t \"610521\": \"华县\",\n\t \"610522\": \"潼关县\",\n\t \"610523\": \"大荔县\",\n\t \"610524\": \"合阳县\",\n\t \"610525\": \"澄城县\",\n\t \"610526\": \"蒲城县\",\n\t \"610527\": \"白水县\",\n\t \"610528\": \"富平县\",\n\t \"610581\": \"韩城市\",\n\t \"610582\": \"华阴市\",\n\t \"610583\": \"其它区\",\n\t \"610600\": \"延安市\",\n\t \"610602\": \"宝塔区\",\n\t \"610621\": \"延长县\",\n\t \"610622\": \"延川县\",\n\t \"610623\": \"子长县\",\n\t \"610624\": \"安塞县\",\n\t \"610625\": \"志丹县\",\n\t \"610626\": \"吴起县\",\n\t \"610627\": \"甘泉县\",\n\t \"610628\": \"富县\",\n\t \"610629\": \"洛川县\",\n\t \"610630\": \"宜川县\",\n\t \"610631\": \"黄龙县\",\n\t \"610632\": \"黄陵县\",\n\t \"610633\": \"其它区\",\n\t \"610700\": \"汉中市\",\n\t \"610702\": \"汉台区\",\n\t \"610721\": \"南郑县\",\n\t \"610722\": \"城固县\",\n\t \"610723\": \"洋县\",\n\t \"610724\": \"西乡县\",\n\t \"610725\": \"勉县\",\n\t \"610726\": \"宁强县\",\n\t \"610727\": \"略阳县\",\n\t \"610728\": \"镇巴县\",\n\t \"610729\": \"留坝县\",\n\t \"610730\": \"佛坪县\",\n\t \"610731\": \"其它区\",\n\t \"610800\": \"榆林市\",\n\t \"610802\": \"榆阳区\",\n\t \"610821\": \"神木县\",\n\t \"610822\": \"府谷县\",\n\t \"610823\": \"横山县\",\n\t \"610824\": \"靖边县\",\n\t \"610825\": \"定边县\",\n\t \"610826\": \"绥德县\",\n\t \"610827\": \"米脂县\",\n\t \"610828\": \"佳县\",\n\t \"610829\": \"吴堡县\",\n\t \"610830\": \"清涧县\",\n\t \"610831\": \"子洲县\",\n\t \"610832\": \"其它区\",\n\t \"610900\": \"安康市\",\n\t \"610902\": \"汉滨区\",\n\t \"610921\": \"汉阴县\",\n\t \"610922\": \"石泉县\",\n\t \"610923\": \"宁陕县\",\n\t \"610924\": \"紫阳县\",\n\t \"610925\": \"岚皋县\",\n\t \"610926\": \"平利县\",\n\t \"610927\": \"镇坪县\",\n\t \"610928\": \"旬阳县\",\n\t \"610929\": \"白河县\",\n\t \"610930\": \"其它区\",\n\t \"611000\": \"商洛市\",\n\t \"611002\": \"商州区\",\n\t \"611021\": \"洛南县\",\n\t \"611022\": \"丹凤县\",\n\t \"611023\": \"商南县\",\n\t \"611024\": \"山阳县\",\n\t \"611025\": \"镇安县\",\n\t \"611026\": \"柞水县\",\n\t \"611027\": \"其它区\",\n\t \"620000\": \"甘肃省\",\n\t \"620100\": \"兰州市\",\n\t \"620102\": \"城关区\",\n\t \"620103\": \"七里河区\",\n\t \"620104\": \"西固区\",\n\t \"620105\": \"安宁区\",\n\t \"620111\": \"红古区\",\n\t \"620121\": \"永登县\",\n\t \"620122\": \"皋兰县\",\n\t \"620123\": \"榆中县\",\n\t \"620124\": \"其它区\",\n\t \"620200\": \"嘉峪关市\",\n\t \"620300\": \"金昌市\",\n\t \"620302\": \"金川区\",\n\t \"620321\": \"永昌县\",\n\t \"620322\": \"其它区\",\n\t \"620400\": \"白银市\",\n\t \"620402\": \"白银区\",\n\t \"620403\": \"平川区\",\n\t \"620421\": \"靖远县\",\n\t \"620422\": \"会宁县\",\n\t \"620423\": \"景泰县\",\n\t \"620424\": \"其它区\",\n\t \"620500\": \"天水市\",\n\t \"620502\": \"秦州区\",\n\t \"620503\": \"麦积区\",\n\t \"620521\": \"清水县\",\n\t \"620522\": \"秦安县\",\n\t \"620523\": \"甘谷县\",\n\t \"620524\": \"武山县\",\n\t \"620525\": \"张家川回族自治县\",\n\t \"620526\": \"其它区\",\n\t \"620600\": \"武威市\",\n\t \"620602\": \"凉州区\",\n\t \"620621\": \"民勤县\",\n\t \"620622\": \"古浪县\",\n\t \"620623\": \"天祝藏族自治县\",\n\t \"620624\": \"其它区\",\n\t \"620700\": \"张掖市\",\n\t \"620702\": \"甘州区\",\n\t \"620721\": \"肃南裕固族自治县\",\n\t \"620722\": \"民乐县\",\n\t \"620723\": \"临泽县\",\n\t \"620724\": \"高台县\",\n\t \"620725\": \"山丹县\",\n\t \"620726\": \"其它区\",\n\t \"620800\": \"平凉市\",\n\t \"620802\": \"崆峒区\",\n\t \"620821\": \"泾川县\",\n\t \"620822\": \"灵台县\",\n\t \"620823\": \"崇信县\",\n\t \"620824\": \"华亭县\",\n\t \"620825\": \"庄浪县\",\n\t \"620826\": \"静宁县\",\n\t \"620827\": \"其它区\",\n\t \"620900\": \"酒泉市\",\n\t \"620902\": \"肃州区\",\n\t \"620921\": \"金塔县\",\n\t \"620922\": \"瓜州县\",\n\t \"620923\": \"肃北蒙古族自治县\",\n\t \"620924\": \"阿克塞哈萨克族自治县\",\n\t \"620981\": \"玉门市\",\n\t \"620982\": \"敦煌市\",\n\t \"620983\": \"其它区\",\n\t \"621000\": \"庆阳市\",\n\t \"621002\": \"西峰区\",\n\t \"621021\": \"庆城县\",\n\t \"621022\": \"环县\",\n\t \"621023\": \"华池县\",\n\t \"621024\": \"合水县\",\n\t \"621025\": \"正宁县\",\n\t \"621026\": \"宁县\",\n\t \"621027\": \"镇原县\",\n\t \"621028\": \"其它区\",\n\t \"621100\": \"定西市\",\n\t \"621102\": \"安定区\",\n\t \"621121\": \"通渭县\",\n\t \"621122\": \"陇西县\",\n\t \"621123\": \"渭源县\",\n\t \"621124\": \"临洮县\",\n\t \"621125\": \"漳县\",\n\t \"621126\": \"岷县\",\n\t \"621127\": \"其它区\",\n\t \"621200\": \"陇南市\",\n\t \"621202\": \"武都区\",\n\t \"621221\": \"成县\",\n\t \"621222\": \"文县\",\n\t \"621223\": \"宕昌县\",\n\t \"621224\": \"康县\",\n\t \"621225\": \"西和县\",\n\t \"621226\": \"礼县\",\n\t \"621227\": \"徽县\",\n\t \"621228\": \"两当县\",\n\t \"621229\": \"其它区\",\n\t \"622900\": \"临夏回族自治州\",\n\t \"622901\": \"临夏市\",\n\t \"622921\": \"临夏县\",\n\t \"622922\": \"康乐县\",\n\t \"622923\": \"永靖县\",\n\t \"622924\": \"广河县\",\n\t \"622925\": \"和政县\",\n\t \"622926\": \"东乡族自治县\",\n\t \"622927\": \"积石山保安族东乡族撒拉族自治县\",\n\t \"622928\": \"其它区\",\n\t \"623000\": \"甘南藏族自治州\",\n\t \"623001\": \"合作市\",\n\t \"623021\": \"临潭县\",\n\t \"623022\": \"卓尼县\",\n\t \"623023\": \"舟曲县\",\n\t \"623024\": \"迭部县\",\n\t \"623025\": \"玛曲县\",\n\t \"623026\": \"碌曲县\",\n\t \"623027\": \"夏河县\",\n\t \"623028\": \"其它区\",\n\t \"630000\": \"青海省\",\n\t \"630100\": \"西宁市\",\n\t \"630102\": \"城东区\",\n\t \"630103\": \"城中区\",\n\t \"630104\": \"城西区\",\n\t \"630105\": \"城北区\",\n\t \"630121\": \"大通回族土族自治县\",\n\t \"630122\": \"湟中县\",\n\t \"630123\": \"湟源县\",\n\t \"630124\": \"其它区\",\n\t \"632100\": \"海东市\",\n\t \"632121\": \"平安县\",\n\t \"632122\": \"民和回族土族自治县\",\n\t \"632123\": \"乐都区\",\n\t \"632126\": \"互助土族自治县\",\n\t \"632127\": \"化隆回族自治县\",\n\t \"632128\": \"循化撒拉族自治县\",\n\t \"632129\": \"其它区\",\n\t \"632200\": \"海北藏族自治州\",\n\t \"632221\": \"门源回族自治县\",\n\t \"632222\": \"祁连县\",\n\t \"632223\": \"海晏县\",\n\t \"632224\": \"刚察县\",\n\t \"632225\": \"其它区\",\n\t \"632300\": \"黄南藏族自治州\",\n\t \"632321\": \"同仁县\",\n\t \"632322\": \"尖扎县\",\n\t \"632323\": \"泽库县\",\n\t \"632324\": \"河南蒙古族自治县\",\n\t \"632325\": \"其它区\",\n\t \"632500\": \"海南藏族自治州\",\n\t \"632521\": \"共和县\",\n\t \"632522\": \"同德县\",\n\t \"632523\": \"贵德县\",\n\t \"632524\": \"兴海县\",\n\t \"632525\": \"贵南县\",\n\t \"632526\": \"其它区\",\n\t \"632600\": \"果洛藏族自治州\",\n\t \"632621\": \"玛沁县\",\n\t \"632622\": \"班玛县\",\n\t \"632623\": \"甘德县\",\n\t \"632624\": \"达日县\",\n\t \"632625\": \"久治县\",\n\t \"632626\": \"玛多县\",\n\t \"632627\": \"其它区\",\n\t \"632700\": \"玉树藏族自治州\",\n\t \"632721\": \"玉树市\",\n\t \"632722\": \"杂多县\",\n\t \"632723\": \"称多县\",\n\t \"632724\": \"治多县\",\n\t \"632725\": \"囊谦县\",\n\t \"632726\": \"曲麻莱县\",\n\t \"632727\": \"其它区\",\n\t \"632800\": \"海西蒙古族藏族自治州\",\n\t \"632801\": \"格尔木市\",\n\t \"632802\": \"德令哈市\",\n\t \"632821\": \"乌兰县\",\n\t \"632822\": \"都兰县\",\n\t \"632823\": \"天峻县\",\n\t \"632824\": \"其它区\",\n\t \"640000\": \"宁夏回族自治区\",\n\t \"640100\": \"银川市\",\n\t \"640104\": \"兴庆区\",\n\t \"640105\": \"西夏区\",\n\t \"640106\": \"金凤区\",\n\t \"640121\": \"永宁县\",\n\t \"640122\": \"贺兰县\",\n\t \"640181\": \"灵武市\",\n\t \"640182\": \"其它区\",\n\t \"640200\": \"石嘴山市\",\n\t \"640202\": \"大武口区\",\n\t \"640205\": \"惠农区\",\n\t \"640221\": \"平罗县\",\n\t \"640222\": \"其它区\",\n\t \"640300\": \"吴忠市\",\n\t \"640302\": \"利通区\",\n\t \"640303\": \"红寺堡区\",\n\t \"640323\": \"盐池县\",\n\t \"640324\": \"同心县\",\n\t \"640381\": \"青铜峡市\",\n\t \"640382\": \"其它区\",\n\t \"640400\": \"固原市\",\n\t \"640402\": \"原州区\",\n\t \"640422\": \"西吉县\",\n\t \"640423\": \"隆德县\",\n\t \"640424\": \"泾源县\",\n\t \"640425\": \"彭阳县\",\n\t \"640426\": \"其它区\",\n\t \"640500\": \"中卫市\",\n\t \"640502\": \"沙坡头区\",\n\t \"640521\": \"中宁县\",\n\t \"640522\": \"海原县\",\n\t \"640523\": \"其它区\",\n\t \"650000\": \"新疆维吾尔自治区\",\n\t \"650100\": \"乌鲁木齐市\",\n\t \"650102\": \"天山区\",\n\t \"650103\": \"沙依巴克区\",\n\t \"650104\": \"新市区\",\n\t \"650105\": \"水磨沟区\",\n\t \"650106\": \"头屯河区\",\n\t \"650107\": \"达坂城区\",\n\t \"650109\": \"米东区\",\n\t \"650121\": \"乌鲁木齐县\",\n\t \"650122\": \"其它区\",\n\t \"650200\": \"克拉玛依市\",\n\t \"650202\": \"独山子区\",\n\t \"650203\": \"克拉玛依区\",\n\t \"650204\": \"白碱滩区\",\n\t \"650205\": \"乌尔禾区\",\n\t \"650206\": \"其它区\",\n\t \"652100\": \"吐鲁番地区\",\n\t \"652101\": \"吐鲁番市\",\n\t \"652122\": \"鄯善县\",\n\t \"652123\": \"托克逊县\",\n\t \"652124\": \"其它区\",\n\t \"652200\": \"哈密地区\",\n\t \"652201\": \"哈密市\",\n\t \"652222\": \"巴里坤哈萨克自治县\",\n\t \"652223\": \"伊吾县\",\n\t \"652224\": \"其它区\",\n\t \"652300\": \"昌吉回族自治州\",\n\t \"652301\": \"昌吉市\",\n\t \"652302\": \"阜康市\",\n\t \"652323\": \"呼图壁县\",\n\t \"652324\": \"玛纳斯县\",\n\t \"652325\": \"奇台县\",\n\t \"652327\": \"吉木萨尔县\",\n\t \"652328\": \"木垒哈萨克自治县\",\n\t \"652329\": \"其它区\",\n\t \"652700\": \"博尔塔拉蒙古自治州\",\n\t \"652701\": \"博乐市\",\n\t \"652702\": \"阿拉山口市\",\n\t \"652722\": \"精河县\",\n\t \"652723\": \"温泉县\",\n\t \"652724\": \"其它区\",\n\t \"652800\": \"巴音郭楞蒙古自治州\",\n\t \"652801\": \"库尔勒市\",\n\t \"652822\": \"轮台县\",\n\t \"652823\": \"尉犁县\",\n\t \"652824\": \"若羌县\",\n\t \"652825\": \"且末县\",\n\t \"652826\": \"焉耆回族自治县\",\n\t \"652827\": \"和静县\",\n\t \"652828\": \"和硕县\",\n\t \"652829\": \"博湖县\",\n\t \"652830\": \"其它区\",\n\t \"652900\": \"阿克苏地区\",\n\t \"652901\": \"阿克苏市\",\n\t \"652922\": \"温宿县\",\n\t \"652923\": \"库车县\",\n\t \"652924\": \"沙雅县\",\n\t \"652925\": \"新和县\",\n\t \"652926\": \"拜城县\",\n\t \"652927\": \"乌什县\",\n\t \"652928\": \"阿瓦提县\",\n\t \"652929\": \"柯坪县\",\n\t \"652930\": \"其它区\",\n\t \"653000\": \"克孜勒苏柯尔克孜自治州\",\n\t \"653001\": \"阿图什市\",\n\t \"653022\": \"阿克陶县\",\n\t \"653023\": \"阿合奇县\",\n\t \"653024\": \"乌恰县\",\n\t \"653025\": \"其它区\",\n\t \"653100\": \"喀什地区\",\n\t \"653101\": \"喀什市\",\n\t \"653121\": \"疏附县\",\n\t \"653122\": \"疏勒县\",\n\t \"653123\": \"英吉沙县\",\n\t \"653124\": \"泽普县\",\n\t \"653125\": \"莎车县\",\n\t \"653126\": \"叶城县\",\n\t \"653127\": \"麦盖提县\",\n\t \"653128\": \"岳普湖县\",\n\t \"653129\": \"伽师县\",\n\t \"653130\": \"巴楚县\",\n\t \"653131\": \"塔什库尔干塔吉克自治县\",\n\t \"653132\": \"其它区\",\n\t \"653200\": \"和田地区\",\n\t \"653201\": \"和田市\",\n\t \"653221\": \"和田县\",\n\t \"653222\": \"墨玉县\",\n\t \"653223\": \"皮山县\",\n\t \"653224\": \"洛浦县\",\n\t \"653225\": \"策勒县\",\n\t \"653226\": \"于田县\",\n\t \"653227\": \"民丰县\",\n\t \"653228\": \"其它区\",\n\t \"654000\": \"伊犁哈萨克自治州\",\n\t \"654002\": \"伊宁市\",\n\t \"654003\": \"奎屯市\",\n\t \"654021\": \"伊宁县\",\n\t \"654022\": \"察布查尔锡伯自治县\",\n\t \"654023\": \"霍城县\",\n\t \"654024\": \"巩留县\",\n\t \"654025\": \"新源县\",\n\t \"654026\": \"昭苏县\",\n\t \"654027\": \"特克斯县\",\n\t \"654028\": \"尼勒克县\",\n\t \"654029\": \"其它区\",\n\t \"654200\": \"塔城地区\",\n\t \"654201\": \"塔城市\",\n\t \"654202\": \"乌苏市\",\n\t \"654221\": \"额敏县\",\n\t \"654223\": \"沙湾县\",\n\t \"654224\": \"托里县\",\n\t \"654225\": \"裕民县\",\n\t \"654226\": \"和布克赛尔蒙古自治县\",\n\t \"654227\": \"其它区\",\n\t \"654300\": \"阿勒泰地区\",\n\t \"654301\": \"阿勒泰市\",\n\t \"654321\": \"布尔津县\",\n\t \"654322\": \"富蕴县\",\n\t \"654323\": \"福海县\",\n\t \"654324\": \"哈巴河县\",\n\t \"654325\": \"青河县\",\n\t \"654326\": \"吉木乃县\",\n\t \"654327\": \"其它区\",\n\t \"659001\": \"石河子市\",\n\t \"659002\": \"阿拉尔市\",\n\t \"659003\": \"图木舒克市\",\n\t \"659004\": \"五家渠市\",\n\t \"710000\": \"台湾\",\n\t \"710100\": \"台北市\",\n\t \"710101\": \"中正区\",\n\t \"710102\": \"大同区\",\n\t \"710103\": \"中山区\",\n\t \"710104\": \"松山区\",\n\t \"710105\": \"大安区\",\n\t \"710106\": \"万华区\",\n\t \"710107\": \"信义区\",\n\t \"710108\": \"士林区\",\n\t \"710109\": \"北投区\",\n\t \"710110\": \"内湖区\",\n\t \"710111\": \"南港区\",\n\t \"710112\": \"文山区\",\n\t \"710113\": \"其它区\",\n\t \"710200\": \"高雄市\",\n\t \"710201\": \"新兴区\",\n\t \"710202\": \"前金区\",\n\t \"710203\": \"芩雅区\",\n\t \"710204\": \"盐埕区\",\n\t \"710205\": \"鼓山区\",\n\t \"710206\": \"旗津区\",\n\t \"710207\": \"前镇区\",\n\t \"710208\": \"三民区\",\n\t \"710209\": \"左营区\",\n\t \"710210\": \"楠梓区\",\n\t \"710211\": \"小港区\",\n\t \"710212\": \"其它区\",\n\t \"710241\": \"苓雅区\",\n\t \"710242\": \"仁武区\",\n\t \"710243\": \"大社区\",\n\t \"710244\": \"冈山区\",\n\t \"710245\": \"路竹区\",\n\t \"710246\": \"阿莲区\",\n\t \"710247\": \"田寮区\",\n\t \"710248\": \"燕巢区\",\n\t \"710249\": \"桥头区\",\n\t \"710250\": \"梓官区\",\n\t \"710251\": \"弥陀区\",\n\t \"710252\": \"永安区\",\n\t \"710253\": \"湖内区\",\n\t \"710254\": \"凤山区\",\n\t \"710255\": \"大寮区\",\n\t \"710256\": \"林园区\",\n\t \"710257\": \"鸟松区\",\n\t \"710258\": \"大树区\",\n\t \"710259\": \"旗山区\",\n\t \"710260\": \"美浓区\",\n\t \"710261\": \"六龟区\",\n\t \"710262\": \"内门区\",\n\t \"710263\": \"杉林区\",\n\t \"710264\": \"甲仙区\",\n\t \"710265\": \"桃源区\",\n\t \"710266\": \"那玛夏区\",\n\t \"710267\": \"茂林区\",\n\t \"710268\": \"茄萣区\",\n\t \"710300\": \"台南市\",\n\t \"710301\": \"中西区\",\n\t \"710302\": \"东区\",\n\t \"710303\": \"南区\",\n\t \"710304\": \"北区\",\n\t \"710305\": \"安平区\",\n\t \"710306\": \"安南区\",\n\t \"710307\": \"其它区\",\n\t \"710339\": \"永康区\",\n\t \"710340\": \"归仁区\",\n\t \"710341\": \"新化区\",\n\t \"710342\": \"左镇区\",\n\t \"710343\": \"玉井区\",\n\t \"710344\": \"楠西区\",\n\t \"710345\": \"南化区\",\n\t \"710346\": \"仁德区\",\n\t \"710347\": \"关庙区\",\n\t \"710348\": \"龙崎区\",\n\t \"710349\": \"官田区\",\n\t \"710350\": \"麻豆区\",\n\t \"710351\": \"佳里区\",\n\t \"710352\": \"西港区\",\n\t \"710353\": \"七股区\",\n\t \"710354\": \"将军区\",\n\t \"710355\": \"学甲区\",\n\t \"710356\": \"北门区\",\n\t \"710357\": \"新营区\",\n\t \"710358\": \"后壁区\",\n\t \"710359\": \"白河区\",\n\t \"710360\": \"东山区\",\n\t \"710361\": \"六甲区\",\n\t \"710362\": \"下营区\",\n\t \"710363\": \"柳营区\",\n\t \"710364\": \"盐水区\",\n\t \"710365\": \"善化区\",\n\t \"710366\": \"大内区\",\n\t \"710367\": \"山上区\",\n\t \"710368\": \"新市区\",\n\t \"710369\": \"安定区\",\n\t \"710400\": \"台中市\",\n\t \"710401\": \"中区\",\n\t \"710402\": \"东区\",\n\t \"710403\": \"南区\",\n\t \"710404\": \"西区\",\n\t \"710405\": \"北区\",\n\t \"710406\": \"北屯区\",\n\t \"710407\": \"西屯区\",\n\t \"710408\": \"南屯区\",\n\t \"710409\": \"其它区\",\n\t \"710431\": \"太平区\",\n\t \"710432\": \"大里区\",\n\t \"710433\": \"雾峰区\",\n\t \"710434\": \"乌日区\",\n\t \"710435\": \"丰原区\",\n\t \"710436\": \"后里区\",\n\t \"710437\": \"石冈区\",\n\t \"710438\": \"东势区\",\n\t \"710439\": \"和平区\",\n\t \"710440\": \"新社区\",\n\t \"710441\": \"潭子区\",\n\t \"710442\": \"大雅区\",\n\t \"710443\": \"神冈区\",\n\t \"710444\": \"大肚区\",\n\t \"710445\": \"沙鹿区\",\n\t \"710446\": \"龙井区\",\n\t \"710447\": \"梧栖区\",\n\t \"710448\": \"清水区\",\n\t \"710449\": \"大甲区\",\n\t \"710450\": \"外埔区\",\n\t \"710451\": \"大安区\",\n\t \"710500\": \"金门县\",\n\t \"710507\": \"金沙镇\",\n\t \"710508\": \"金湖镇\",\n\t \"710509\": \"金宁乡\",\n\t \"710510\": \"金城镇\",\n\t \"710511\": \"烈屿乡\",\n\t \"710512\": \"乌坵乡\",\n\t \"710600\": \"南投县\",\n\t \"710614\": \"南投市\",\n\t \"710615\": \"中寮乡\",\n\t \"710616\": \"草屯镇\",\n\t \"710617\": \"国姓乡\",\n\t \"710618\": \"埔里镇\",\n\t \"710619\": \"仁爱乡\",\n\t \"710620\": \"名间乡\",\n\t \"710621\": \"集集镇\",\n\t \"710622\": \"水里乡\",\n\t \"710623\": \"鱼池乡\",\n\t \"710624\": \"信义乡\",\n\t \"710625\": \"竹山镇\",\n\t \"710626\": \"鹿谷乡\",\n\t \"710700\": \"基隆市\",\n\t \"710701\": \"仁爱区\",\n\t \"710702\": \"信义区\",\n\t \"710703\": \"中正区\",\n\t \"710704\": \"中山区\",\n\t \"710705\": \"安乐区\",\n\t \"710706\": \"暖暖区\",\n\t \"710707\": \"七堵区\",\n\t \"710708\": \"其它区\",\n\t \"710800\": \"新竹市\",\n\t \"710801\": \"东区\",\n\t \"710802\": \"北区\",\n\t \"710803\": \"香山区\",\n\t \"710804\": \"其它区\",\n\t \"710900\": \"嘉义市\",\n\t \"710901\": \"东区\",\n\t \"710902\": \"西区\",\n\t \"710903\": \"其它区\",\n\t \"711100\": \"新北市\",\n\t \"711130\": \"万里区\",\n\t \"711131\": \"金山区\",\n\t \"711132\": \"板桥区\",\n\t \"711133\": \"汐止区\",\n\t \"711134\": \"深坑区\",\n\t \"711135\": \"石碇区\",\n\t \"711136\": \"瑞芳区\",\n\t \"711137\": \"平溪区\",\n\t \"711138\": \"双溪区\",\n\t \"711139\": \"贡寮区\",\n\t \"711140\": \"新店区\",\n\t \"711141\": \"坪林区\",\n\t \"711142\": \"乌来区\",\n\t \"711143\": \"永和区\",\n\t \"711144\": \"中和区\",\n\t \"711145\": \"土城区\",\n\t \"711146\": \"三峡区\",\n\t \"711147\": \"树林区\",\n\t \"711148\": \"莺歌区\",\n\t \"711149\": \"三重区\",\n\t \"711150\": \"新庄区\",\n\t \"711151\": \"泰山区\",\n\t \"711152\": \"林口区\",\n\t \"711153\": \"芦洲区\",\n\t \"711154\": \"五股区\",\n\t \"711155\": \"八里区\",\n\t \"711156\": \"淡水区\",\n\t \"711157\": \"三芝区\",\n\t \"711158\": \"石门区\",\n\t \"711200\": \"宜兰县\",\n\t \"711214\": \"宜兰市\",\n\t \"711215\": \"头城镇\",\n\t \"711216\": \"礁溪乡\",\n\t \"711217\": \"壮围乡\",\n\t \"711218\": \"员山乡\",\n\t \"711219\": \"罗东镇\",\n\t \"711220\": \"三星乡\",\n\t \"711221\": \"大同乡\",\n\t \"711222\": \"五结乡\",\n\t \"711223\": \"冬山乡\",\n\t \"711224\": \"苏澳镇\",\n\t \"711225\": \"南澳乡\",\n\t \"711226\": \"钓鱼台\",\n\t \"711300\": \"新竹县\",\n\t \"711314\": \"竹北市\",\n\t \"711315\": \"湖口乡\",\n\t \"711316\": \"新丰乡\",\n\t \"711317\": \"新埔镇\",\n\t \"711318\": \"关西镇\",\n\t \"711319\": \"芎林乡\",\n\t \"711320\": \"宝山乡\",\n\t \"711321\": \"竹东镇\",\n\t \"711322\": \"五峰乡\",\n\t \"711323\": \"横山乡\",\n\t \"711324\": \"尖石乡\",\n\t \"711325\": \"北埔乡\",\n\t \"711326\": \"峨眉乡\",\n\t \"711400\": \"桃园县\",\n\t \"711414\": \"中坜市\",\n\t \"711415\": \"平镇市\",\n\t \"711416\": \"龙潭乡\",\n\t \"711417\": \"杨梅市\",\n\t \"711418\": \"新屋乡\",\n\t \"711419\": \"观音乡\",\n\t \"711420\": \"桃园市\",\n\t \"711421\": \"龟山乡\",\n\t \"711422\": \"八德市\",\n\t \"711423\": \"大溪镇\",\n\t \"711424\": \"复兴乡\",\n\t \"711425\": \"大园乡\",\n\t \"711426\": \"芦竹乡\",\n\t \"711500\": \"苗栗县\",\n\t \"711519\": \"竹南镇\",\n\t \"711520\": \"头份镇\",\n\t \"711521\": \"三湾乡\",\n\t \"711522\": \"南庄乡\",\n\t \"711523\": \"狮潭乡\",\n\t \"711524\": \"后龙镇\",\n\t \"711525\": \"通霄镇\",\n\t \"711526\": \"苑里镇\",\n\t \"711527\": \"苗栗市\",\n\t \"711528\": \"造桥乡\",\n\t \"711529\": \"头屋乡\",\n\t \"711530\": \"公馆乡\",\n\t \"711531\": \"大湖乡\",\n\t \"711532\": \"泰安乡\",\n\t \"711533\": \"铜锣乡\",\n\t \"711534\": \"三义乡\",\n\t \"711535\": \"西湖乡\",\n\t \"711536\": \"卓兰镇\",\n\t \"711700\": \"彰化县\",\n\t \"711727\": \"彰化市\",\n\t \"711728\": \"芬园乡\",\n\t \"711729\": \"花坛乡\",\n\t \"711730\": \"秀水乡\",\n\t \"711731\": \"鹿港镇\",\n\t \"711732\": \"福兴乡\",\n\t \"711733\": \"线西乡\",\n\t \"711734\": \"和美镇\",\n\t \"711735\": \"伸港乡\",\n\t \"711736\": \"员林镇\",\n\t \"711737\": \"社头乡\",\n\t \"711738\": \"永靖乡\",\n\t \"711739\": \"埔心乡\",\n\t \"711740\": \"溪湖镇\",\n\t \"711741\": \"大村乡\",\n\t \"711742\": \"埔盐乡\",\n\t \"711743\": \"田中镇\",\n\t \"711744\": \"北斗镇\",\n\t \"711745\": \"田尾乡\",\n\t \"711746\": \"埤头乡\",\n\t \"711747\": \"溪州乡\",\n\t \"711748\": \"竹塘乡\",\n\t \"711749\": \"二林镇\",\n\t \"711750\": \"大城乡\",\n\t \"711751\": \"芳苑乡\",\n\t \"711752\": \"二水乡\",\n\t \"711900\": \"嘉义县\",\n\t \"711919\": \"番路乡\",\n\t \"711920\": \"梅山乡\",\n\t \"711921\": \"竹崎乡\",\n\t \"711922\": \"阿里山乡\",\n\t \"711923\": \"中埔乡\",\n\t \"711924\": \"大埔乡\",\n\t \"711925\": \"水上乡\",\n\t \"711926\": \"鹿草乡\",\n\t \"711927\": \"太保市\",\n\t \"711928\": \"朴子市\",\n\t \"711929\": \"东石乡\",\n\t \"711930\": \"六脚乡\",\n\t \"711931\": \"新港乡\",\n\t \"711932\": \"民雄乡\",\n\t \"711933\": \"大林镇\",\n\t \"711934\": \"溪口乡\",\n\t \"711935\": \"义竹乡\",\n\t \"711936\": \"布袋镇\",\n\t \"712100\": \"云林县\",\n\t \"712121\": \"斗南镇\",\n\t \"712122\": \"大埤乡\",\n\t \"712123\": \"虎尾镇\",\n\t \"712124\": \"土库镇\",\n\t \"712125\": \"褒忠乡\",\n\t \"712126\": \"东势乡\",\n\t \"712127\": \"台西乡\",\n\t \"712128\": \"仑背乡\",\n\t \"712129\": \"麦寮乡\",\n\t \"712130\": \"斗六市\",\n\t \"712131\": \"林内乡\",\n\t \"712132\": \"古坑乡\",\n\t \"712133\": \"莿桐乡\",\n\t \"712134\": \"西螺镇\",\n\t \"712135\": \"二仑乡\",\n\t \"712136\": \"北港镇\",\n\t \"712137\": \"水林乡\",\n\t \"712138\": \"口湖乡\",\n\t \"712139\": \"四湖乡\",\n\t \"712140\": \"元长乡\",\n\t \"712400\": \"屏东县\",\n\t \"712434\": \"屏东市\",\n\t \"712435\": \"三地门乡\",\n\t \"712436\": \"雾台乡\",\n\t \"712437\": \"玛家乡\",\n\t \"712438\": \"九如乡\",\n\t \"712439\": \"里港乡\",\n\t \"712440\": \"高树乡\",\n\t \"712441\": \"盐埔乡\",\n\t \"712442\": \"长治乡\",\n\t \"712443\": \"麟洛乡\",\n\t \"712444\": \"竹田乡\",\n\t \"712445\": \"内埔乡\",\n\t \"712446\": \"万丹乡\",\n\t \"712447\": \"潮州镇\",\n\t \"712448\": \"泰武乡\",\n\t \"712449\": \"来义乡\",\n\t \"712450\": \"万峦乡\",\n\t \"712451\": \"崁顶乡\",\n\t \"712452\": \"新埤乡\",\n\t \"712453\": \"南州乡\",\n\t \"712454\": \"林边乡\",\n\t \"712455\": \"东港镇\",\n\t \"712456\": \"琉球乡\",\n\t \"712457\": \"佳冬乡\",\n\t \"712458\": \"新园乡\",\n\t \"712459\": \"枋寮乡\",\n\t \"712460\": \"枋山乡\",\n\t \"712461\": \"春日乡\",\n\t \"712462\": \"狮子乡\",\n\t \"712463\": \"车城乡\",\n\t \"712464\": \"牡丹乡\",\n\t \"712465\": \"恒春镇\",\n\t \"712466\": \"满州乡\",\n\t \"712500\": \"台东县\",\n\t \"712517\": \"台东市\",\n\t \"712518\": \"绿岛乡\",\n\t \"712519\": \"兰屿乡\",\n\t \"712520\": \"延平乡\",\n\t \"712521\": \"卑南乡\",\n\t \"712522\": \"鹿野乡\",\n\t \"712523\": \"关山镇\",\n\t \"712524\": \"海端乡\",\n\t \"712525\": \"池上乡\",\n\t \"712526\": \"东河乡\",\n\t \"712527\": \"成功镇\",\n\t \"712528\": \"长滨乡\",\n\t \"712529\": \"金峰乡\",\n\t \"712530\": \"大武乡\",\n\t \"712531\": \"达仁乡\",\n\t \"712532\": \"太麻里乡\",\n\t \"712600\": \"花莲县\",\n\t \"712615\": \"花莲市\",\n\t \"712616\": \"新城乡\",\n\t \"712617\": \"太鲁阁\",\n\t \"712618\": \"秀林乡\",\n\t \"712619\": \"吉安乡\",\n\t \"712620\": \"寿丰乡\",\n\t \"712621\": \"凤林镇\",\n\t \"712622\": \"光复乡\",\n\t \"712623\": \"丰滨乡\",\n\t \"712624\": \"瑞穗乡\",\n\t \"712625\": \"万荣乡\",\n\t \"712626\": \"玉里镇\",\n\t \"712627\": \"卓溪乡\",\n\t \"712628\": \"富里乡\",\n\t \"712700\": \"澎湖县\",\n\t \"712707\": \"马公市\",\n\t \"712708\": \"西屿乡\",\n\t \"712709\": \"望安乡\",\n\t \"712710\": \"七美乡\",\n\t \"712711\": \"白沙乡\",\n\t \"712712\": \"湖西乡\",\n\t \"712800\": \"连江县\",\n\t \"712805\": \"南竿乡\",\n\t \"712806\": \"北竿乡\",\n\t \"712807\": \"莒光乡\",\n\t \"712808\": \"东引乡\",\n\t \"810000\": \"香港特别行政区\",\n\t \"810100\": \"香港岛\",\n\t \"810101\": \"中西区\",\n\t \"810102\": \"湾仔\",\n\t \"810103\": \"东区\",\n\t \"810104\": \"南区\",\n\t \"810200\": \"九龙\",\n\t \"810201\": \"九龙城区\",\n\t \"810202\": \"油尖旺区\",\n\t \"810203\": \"深水埗区\",\n\t \"810204\": \"黄大仙区\",\n\t \"810205\": \"观塘区\",\n\t \"810300\": \"新界\",\n\t \"810301\": \"北区\",\n\t \"810302\": \"大埔区\",\n\t \"810303\": \"沙田区\",\n\t \"810304\": \"西贡区\",\n\t \"810305\": \"元朗区\",\n\t \"810306\": \"屯门区\",\n\t \"810307\": \"荃湾区\",\n\t \"810308\": \"葵青区\",\n\t \"810309\": \"离岛区\",\n\t \"820000\": \"澳门特别行政区\",\n\t \"820100\": \"澳门半岛\",\n\t \"820200\": \"离岛\",\n\t \"990000\": \"海外\",\n\t \"990100\": \"海外\"\n\t}\n\n\t// id pid/parentId name children\n\tfunction tree(list) {\n\t var mapped = {}\n\t for (var i = 0, item; i < list.length; i++) {\n\t item = list[i]\n\t if (!item || !item.id) continue\n\t mapped[item.id] = item\n\t }\n\n\t var result = []\n\t for (var ii = 0; ii < list.length; ii++) {\n\t item = list[ii]\n\n\t if (!item) continue\n\t /* jshint -W041 */\n\t if (item.pid == undefined && item.parentId == undefined) {\n\t result.push(item)\n\t continue\n\t }\n\t var parent = mapped[item.pid] || mapped[item.parentId]\n\t if (!parent) continue\n\t if (!parent.children) parent.children = []\n\t parent.children.push(item)\n\t }\n\t return result\n\t}\n\n\tvar DICT_FIXED = function() {\n\t var fixed = []\n\t for (var id in DICT) {\n\t var pid = id.slice(2, 6) === '0000' ? undefined :\n\t id.slice(4, 6) == '00' ? (id.slice(0, 2) + '0000') :\n\t id.slice(0, 4) + '00'\n\t fixed.push({\n\t id: id,\n\t pid: pid,\n\t name: DICT[id]\n\t })\n\t }\n\t return tree(fixed)\n\t}()\n\n\tmodule.exports = DICT_FIXED\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Miscellaneous\n\t*/\n\tvar DICT = __webpack_require__(18)\n\tmodule.exports = {\n\t\t// Dice\n\t\td4: function() {\n\t\t\treturn this.natural(1, 4)\n\t\t},\n\t\td6: function() {\n\t\t\treturn this.natural(1, 6)\n\t\t},\n\t\td8: function() {\n\t\t\treturn this.natural(1, 8)\n\t\t},\n\t\td12: function() {\n\t\t\treturn this.natural(1, 12)\n\t\t},\n\t\td20: function() {\n\t\t\treturn this.natural(1, 20)\n\t\t},\n\t\td100: function() {\n\t\t\treturn this.natural(1, 100)\n\t\t},\n\t\t/*\n\t\t 随机生成一个 GUID。\n\n\t\t http://www.broofa.com/2008/09/javascript-uuid-function/\n\t\t [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt)\n\t\t UUIDs (Universally Unique IDentifier)\n\t\t GUIDs (Globally Unique IDentifier)\n\t\t The formal definition of the UUID string representation is provided by the following ABNF [7]:\n\t\t UUID = time-low \"-\" time-mid \"-\"\n\t\t time-high-and-version \"-\"\n\t\t clock-seq-and-reserved\n\t\t clock-seq-low \"-\" node\n\t\t time-low = 4hexOctet\n\t\t time-mid = 2hexOctet\n\t\t time-high-and-version = 2hexOctet\n\t\t clock-seq-and-reserved = hexOctet\n\t\t clock-seq-low = hexOctet\n\t\t node = 6hexOctet\n\t\t hexOctet = hexDigit hexDigit\n\t\t hexDigit =\n\t\t \"0\" / \"1\" / \"2\" / \"3\" / \"4\" / \"5\" / \"6\" / \"7\" / \"8\" / \"9\" /\n\t\t \"a\" / \"b\" / \"c\" / \"d\" / \"e\" / \"f\" /\n\t\t \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\"\n\t\t \n\t\t https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349\n\t\t*/\n\t\tguid: function() {\n\t\t\tvar pool = \"abcdefABCDEF1234567890\",\n\t\t\t\tguid = this.string(pool, 8) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 12);\n\t\t\treturn guid\n\t\t},\n\t\tuuid: function() {\n\t\t\treturn this.guid()\n\t\t},\n\t\t/*\n\t\t 随机生成一个 18 位身份证。\n\n\t\t [身份证](http://baike.baidu.com/view/1697.htm#4)\n\t\t 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1\n\t\t [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html)\n\t\t*/\n\t\tid: function() {\n\t\t\tvar id,\n\t\t\t\tsum = 0,\n\t\t\t\trank = [\n\t\t\t\t\t\"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\", \"1\", \"6\", \"3\", \"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\"\n\t\t\t\t],\n\t\t\t\tlast = [\n\t\t\t\t\t\"1\", \"0\", \"X\", \"9\", \"8\", \"7\", \"6\", \"5\", \"4\", \"3\", \"2\"\n\t\t\t\t]\n\n\t\t\tid = this.pick(DICT).id +\n\t\t\t\tthis.date('yyyyMMdd') +\n\t\t\t\tthis.string('number', 3)\n\n\t\t\tfor (var i = 0; i < id.length; i++) {\n\t\t\t\tsum += id[i] * rank[i];\n\t\t\t}\n\t\t\tid += last[sum % 11];\n\n\t\t\treturn id\n\t\t},\n\n\t\t/*\n\t\t 生成一个全局的自增整数。\n\t\t 类似自增主键(auto increment primary key)。\n\t\t*/\n\t\tincrement: function() {\n\t\t\tvar key = 0\n\t\t\treturn function(step) {\n\t\t\t\treturn key += (+step || 1) // step?\n\t\t\t}\n\t\t}(),\n\t\tinc: function(step) {\n\t\t\treturn this.increment(step)\n\t\t}\n\t}\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Parser = __webpack_require__(21)\n\tvar Handler = __webpack_require__(22)\n\tmodule.exports = {\n\t\tParser: Parser,\n\t\tHandler: Handler\n\t}\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\n\t// https://github.com/nuysoft/regexp\n\t// forked from https://github.com/ForbesLindesay/regexp\n\n\tfunction parse(n) {\n\t if (\"string\" != typeof n) {\n\t var l = new TypeError(\"The regexp to parse must be represented as a string.\");\n\t throw l;\n\t }\n\t return index = 1, cgs = {}, parser.parse(n);\n\t}\n\n\tfunction Token(n) {\n\t this.type = n, this.offset = Token.offset(), this.text = Token.text();\n\t}\n\n\tfunction Alternate(n, l) {\n\t Token.call(this, \"alternate\"), this.left = n, this.right = l;\n\t}\n\n\tfunction Match(n) {\n\t Token.call(this, \"match\"), this.body = n.filter(Boolean);\n\t}\n\n\tfunction Group(n, l) {\n\t Token.call(this, n), this.body = l;\n\t}\n\n\tfunction CaptureGroup(n) {\n\t Group.call(this, \"capture-group\"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), \n\t this.body = n;\n\t}\n\n\tfunction Quantified(n, l) {\n\t Token.call(this, \"quantified\"), this.body = n, this.quantifier = l;\n\t}\n\n\tfunction Quantifier(n, l) {\n\t Token.call(this, \"quantifier\"), this.min = n, this.max = l, this.greedy = !0;\n\t}\n\n\tfunction CharSet(n, l) {\n\t Token.call(this, \"charset\"), this.invert = n, this.body = l;\n\t}\n\n\tfunction CharacterRange(n, l) {\n\t Token.call(this, \"range\"), this.start = n, this.end = l;\n\t}\n\n\tfunction Literal(n) {\n\t Token.call(this, \"literal\"), this.body = n, this.escaped = this.body != this.text;\n\t}\n\n\tfunction Unicode(n) {\n\t Token.call(this, \"unicode\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction Hex(n) {\n\t Token.call(this, \"hex\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction Octal(n) {\n\t Token.call(this, \"octal\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction BackReference(n) {\n\t Token.call(this, \"back-reference\"), this.code = n.toUpperCase();\n\t}\n\n\tfunction ControlCharacter(n) {\n\t Token.call(this, \"control-character\"), this.code = n.toUpperCase();\n\t}\n\n\tvar parser = function() {\n\t function n(n, l) {\n\t function u() {\n\t this.constructor = n;\n\t }\n\t u.prototype = l.prototype, n.prototype = new u();\n\t }\n\t function l(n, l, u, t, r) {\n\t function e(n, l) {\n\t function u(n) {\n\t function l(n) {\n\t return n.charCodeAt(0).toString(16).toUpperCase();\n\t }\n\t return n.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\x08/g, \"\\\\b\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\f/g, \"\\\\f\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(n) {\n\t return \"\\\\x0\" + l(n);\n\t }).replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(n) {\n\t return \"\\\\x\" + l(n);\n\t }).replace(/[\\u0180-\\u0FFF]/g, function(n) {\n\t return \"\\\\u0\" + l(n);\n\t }).replace(/[\\u1080-\\uFFFF]/g, function(n) {\n\t return \"\\\\u\" + l(n);\n\t });\n\t }\n\t var t, r;\n\t switch (n.length) {\n\t case 0:\n\t t = \"end of input\";\n\t break;\n\n\t case 1:\n\t t = n[0];\n\t break;\n\n\t default:\n\t t = n.slice(0, -1).join(\", \") + \" or \" + n[n.length - 1];\n\t }\n\t return r = l ? '\"' + u(l) + '\"' : \"end of input\", \"Expected \" + t + \" but \" + r + \" found.\";\n\t }\n\t this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, \n\t this.name = \"SyntaxError\", this.message = e(n, l);\n\t }\n\t function u(n) {\n\t function u() {\n\t return n.substring(Lt, qt);\n\t }\n\t function t() {\n\t return Lt;\n\t }\n\t function r(l) {\n\t function u(l, u, t) {\n\t var r, e;\n\t for (r = u; t > r; r++) e = n.charAt(r), \"\\n\" === e ? (l.seenCR || l.line++, l.column = 1, \n\t l.seenCR = !1) : \"\\r\" === e || \"\\u2028\" === e || \"\\u2029\" === e ? (l.line++, l.column = 1, \n\t l.seenCR = !0) : (l.column++, l.seenCR = !1);\n\t }\n\t return Mt !== l && (Mt > l && (Mt = 0, Dt = {\n\t line: 1,\n\t column: 1,\n\t seenCR: !1\n\t }), u(Dt, Mt, l), Mt = l), Dt;\n\t }\n\t function e(n) {\n\t Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n));\n\t }\n\t function o(n) {\n\t var l = 0;\n\t for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++;\n\t }\n\t function c() {\n\t var l, u, t, r, o;\n\t return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, \n\t qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], \n\t t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, \n\t u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, \n\t l = il), l;\n\t }\n\t function i() {\n\t var n, l, u, t, r;\n\t if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), \n\t Wt--, null === t ? u = al : (qt = u, u = il), null !== u) {\n\t for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), \n\t null === r && (r = a());\n\t null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), \n\t null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il);\n\t } else qt = n, n = il; else qt = n, n = il;\n\t return n;\n\t }\n\t function a() {\n\t var n;\n\t return n = x(), null === n && (n = Q(), null === n && (n = B())), n;\n\t }\n\t function f() {\n\t var l, u;\n\t return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), \n\t null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function s() {\n\t var l, u;\n\t return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), \n\t null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function h() {\n\t var n, l, u;\n\t return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), \n\t null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n;\n\t }\n\t function d() {\n\t var n, l, u;\n\t return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, \n\t l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, \n\t n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n;\n\t }\n\t function p() {\n\t var n;\n\t return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), \n\t null === n && (n = g(), null === n && (n = b()))))), n;\n\t }\n\t function v() {\n\t var l, u, t, r, o, c;\n\t return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, \n\t 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, \n\t qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, \n\t l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function w() {\n\t var l, u, t, r;\n\t return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, \n\t 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t }\n\t function A() {\n\t var l, u, t, r;\n\t return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, \n\t 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t }\n\t function C() {\n\t var l, u;\n\t return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), \n\t null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function g() {\n\t var l, u;\n\t return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), \n\t null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function b() {\n\t var l, u;\n\t return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), \n\t null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function k() {\n\t var l;\n\t return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), \n\t l;\n\t }\n\t function T() {\n\t var l, u, t;\n\t if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, \n\t 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), \n\t qt++) : (t = null, 0 === Wt && e(Il)); else u = il;\n\t return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, \n\t l;\n\t }\n\t function x() {\n\t var l, u, t, r;\n\t return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), \n\t null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), \n\t null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), \n\t null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t }\n\t function y() {\n\t var n, l;\n\t return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, \n\t n = l) : n = l, n;\n\t }\n\t function m() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), \n\t null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function R() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), \n\t null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function F() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), \n\t null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function Q() {\n\t var l, u, t, r, o;\n\t if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), \n\t null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), \n\t null === t && (t = al), null !== t) {\n\t for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), \n\t null === o && (o = U());\n\t null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), \n\t null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il);\n\t } else qt = l, l = il; else qt = l, l = il;\n\t return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l;\n\t }\n\t function S() {\n\t var l, u, t, r;\n\t return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, \n\t 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, \n\t l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, \n\t null === l && (u = null, 0 === Wt && e(du)), l;\n\t }\n\t function U() {\n\t var n, l;\n\t return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), \n\t n;\n\t }\n\t function E() {\n\t var l, u;\n\t return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), \n\t null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function G() {\n\t var n;\n\t return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), \n\t null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), \n\t null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), \n\t null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), \n\t null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n;\n\t }\n\t function B() {\n\t var n;\n\t return n = j(), null === n && (n = q(), null === n && (n = $())), n;\n\t }\n\t function j() {\n\t var l, u;\n\t return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), \n\t null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function $() {\n\t var l, u;\n\t return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, \n\t 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, \n\t Wt--, null === l && (u = null, 0 === Wt && e(yu)), l;\n\t }\n\t function q() {\n\t var n;\n\t return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), \n\t null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), \n\t null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), \n\t null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), \n\t null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), \n\t n;\n\t }\n\t function L() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n\t null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function M() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n\t null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function D() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), \n\t null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function H() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), \n\t null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function O() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), \n\t null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function W() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), \n\t null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function z() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), \n\t null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function I() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), \n\t null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function J() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), \n\t null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function K() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), \n\t null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function N() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), \n\t null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function P() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), \n\t null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function V() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), \n\t null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function X() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), \n\t null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function Y() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), \n\t null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n\t null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function Z() {\n\t var l, u, t;\n\t return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n\t null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), \n\t null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function _() {\n\t var l, u, t, r;\n\t if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n\t null !== u) {\n\t if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), \n\t null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t qt++) : (r = null, 0 === Wt && e(mt)); else t = il;\n\t null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il);\n\t } else qt = l, l = il;\n\t return l;\n\t }\n\t function nl() {\n\t var l, u, t, r;\n\t if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), \n\t null !== u) {\n\t if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n\t null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n\t null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il);\n\t } else qt = l, l = il;\n\t return l;\n\t }\n\t function ll() {\n\t var l, u, t, r;\n\t if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), \n\t null !== u) {\n\t if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n\t null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n\t null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il);\n\t } else qt = l, l = il;\n\t return l;\n\t }\n\t function ul() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n\t null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function tl() {\n\t var l, u, t;\n\t return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n\t null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n\t null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = {\n\t regexp: c\n\t }, cl = c, il = null, al = \"\", fl = \"|\", sl = '\"|\"', hl = function(n, l) {\n\t return l ? new Alternate(n, l[1]) : n;\n\t }, dl = function(n, l, u) {\n\t return new Match([ n ].concat(l).concat([ u ]));\n\t }, pl = \"^\", vl = '\"^\"', wl = function() {\n\t return new Token(\"start\");\n\t }, Al = \"$\", Cl = '\"$\"', gl = function() {\n\t return new Token(\"end\");\n\t }, bl = function(n, l) {\n\t return new Quantified(n, l);\n\t }, kl = \"Quantifier\", Tl = function(n, l) {\n\t return l && (n.greedy = !1), n;\n\t }, xl = \"{\", yl = '\"{\"', ml = \",\", Rl = '\",\"', Fl = \"}\", Ql = '\"}\"', Sl = function(n, l) {\n\t return new Quantifier(n, l);\n\t }, Ul = \",}\", El = '\",}\"', Gl = function(n) {\n\t return new Quantifier(n, 1/0);\n\t }, Bl = function(n) {\n\t return new Quantifier(n, n);\n\t }, jl = \"+\", $l = '\"+\"', ql = function() {\n\t return new Quantifier(1, 1/0);\n\t }, Ll = \"*\", Ml = '\"*\"', Dl = function() {\n\t return new Quantifier(0, 1/0);\n\t }, Hl = \"?\", Ol = '\"?\"', Wl = function() {\n\t return new Quantifier(0, 1);\n\t }, zl = /^[0-9]/, Il = \"[0-9]\", Jl = function(n) {\n\t return +n.join(\"\");\n\t }, Kl = \"(\", Nl = '\"(\"', Pl = \")\", Vl = '\")\"', Xl = function(n) {\n\t return n;\n\t }, Yl = function(n) {\n\t return new CaptureGroup(n);\n\t }, Zl = \"?:\", _l = '\"?:\"', nu = function(n) {\n\t return new Group(\"non-capture-group\", n);\n\t }, lu = \"?=\", uu = '\"?=\"', tu = function(n) {\n\t return new Group(\"positive-lookahead\", n);\n\t }, ru = \"?!\", eu = '\"?!\"', ou = function(n) {\n\t return new Group(\"negative-lookahead\", n);\n\t }, cu = \"CharacterSet\", iu = \"[\", au = '\"[\"', fu = \"]\", su = '\"]\"', hu = function(n, l) {\n\t return new CharSet(!!n, l);\n\t }, du = \"CharacterRange\", pu = \"-\", vu = '\"-\"', wu = function(n, l) {\n\t return new CharacterRange(n, l);\n\t }, Au = \"Character\", Cu = /^[^\\\\\\]]/, gu = \"[^\\\\\\\\\\\\]]\", bu = function(n) {\n\t return new Literal(n);\n\t }, ku = \".\", Tu = '\".\"', xu = function() {\n\t return new Token(\"any-character\");\n\t }, yu = \"Literal\", mu = /^[^|\\\\\\/.[()?+*$\\^]/, Ru = \"[^|\\\\\\\\\\\\/.[()?+*$\\\\^]\", Fu = \"\\\\b\", Qu = '\"\\\\\\\\b\"', Su = function() {\n\t return new Token(\"backspace\");\n\t }, Uu = function() {\n\t return new Token(\"word-boundary\");\n\t }, Eu = \"\\\\B\", Gu = '\"\\\\\\\\B\"', Bu = function() {\n\t return new Token(\"non-word-boundary\");\n\t }, ju = \"\\\\d\", $u = '\"\\\\\\\\d\"', qu = function() {\n\t return new Token(\"digit\");\n\t }, Lu = \"\\\\D\", Mu = '\"\\\\\\\\D\"', Du = function() {\n\t return new Token(\"non-digit\");\n\t }, Hu = \"\\\\f\", Ou = '\"\\\\\\\\f\"', Wu = function() {\n\t return new Token(\"form-feed\");\n\t }, zu = \"\\\\n\", Iu = '\"\\\\\\\\n\"', Ju = function() {\n\t return new Token(\"line-feed\");\n\t }, Ku = \"\\\\r\", Nu = '\"\\\\\\\\r\"', Pu = function() {\n\t return new Token(\"carriage-return\");\n\t }, Vu = \"\\\\s\", Xu = '\"\\\\\\\\s\"', Yu = function() {\n\t return new Token(\"white-space\");\n\t }, Zu = \"\\\\S\", _u = '\"\\\\\\\\S\"', nt = function() {\n\t return new Token(\"non-white-space\");\n\t }, lt = \"\\\\t\", ut = '\"\\\\\\\\t\"', tt = function() {\n\t return new Token(\"tab\");\n\t }, rt = \"\\\\v\", et = '\"\\\\\\\\v\"', ot = function() {\n\t return new Token(\"vertical-tab\");\n\t }, ct = \"\\\\w\", it = '\"\\\\\\\\w\"', at = function() {\n\t return new Token(\"word\");\n\t }, ft = \"\\\\W\", st = '\"\\\\\\\\W\"', ht = function() {\n\t return new Token(\"non-word\");\n\t }, dt = \"\\\\c\", pt = '\"\\\\\\\\c\"', vt = \"any character\", wt = function(n) {\n\t return new ControlCharacter(n);\n\t }, At = \"\\\\\", Ct = '\"\\\\\\\\\"', gt = /^[1-9]/, bt = \"[1-9]\", kt = function(n) {\n\t return new BackReference(n);\n\t }, Tt = \"\\\\0\", xt = '\"\\\\\\\\0\"', yt = /^[0-7]/, mt = \"[0-7]\", Rt = function(n) {\n\t return new Octal(n.join(\"\"));\n\t }, Ft = \"\\\\x\", Qt = '\"\\\\\\\\x\"', St = /^[0-9a-fA-F]/, Ut = \"[0-9a-fA-F]\", Et = function(n) {\n\t return new Hex(n.join(\"\"));\n\t }, Gt = \"\\\\u\", Bt = '\"\\\\\\\\u\"', jt = function(n) {\n\t return new Unicode(n.join(\"\"));\n\t }, $t = function() {\n\t return new Token(\"null-character\");\n\t }, qt = 0, Lt = 0, Mt = 0, Dt = {\n\t line: 1,\n\t column: 1,\n\t seenCR: !1\n\t }, Ht = 0, Ot = [], Wt = 0;\n\t if (\"startRule\" in el) {\n\t if (!(el.startRule in ol)) throw new Error(\"Can't start parsing from rule \\\"\" + el.startRule + '\".');\n\t cl = ol[el.startRule];\n\t }\n\t if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl;\n\t throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column);\n\t }\n\t return n(l, Error), {\n\t SyntaxError: l,\n\t parse: u\n\t };\n\t}(), index = 1, cgs = {};\n\n\tmodule.exports = parser\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## RegExp Handler\n\n\t https://github.com/ForbesLindesay/regexp\n\t https://github.com/dmajda/pegjs\n\t http://www.regexper.com/\n\n\t 每个节点的结构\n\t {\n\t type: '',\n\t offset: number,\n\t text: '',\n\t body: {},\n\t escaped: true/false\n\t }\n\n\t type 可选值\n\t alternate | 选择\n\t match 匹配\n\t capture-group () 捕获组\n\t non-capture-group (?:...) 非捕获组\n\t positive-lookahead (?=p) 零宽正向先行断言\n\t negative-lookahead (?!p) 零宽负向先行断言\n\t quantified a* 重复节点\n\t quantifier * 量词\n\t charset [] 字符集\n\t range {m, n} 范围\n\t literal a 直接量字符\n\t unicode \\uxxxx Unicode\n\t hex \\x 十六进制\n\t octal 八进制\n\t back-reference \\n 反向引用\n\t control-character \\cX 控制字符\n\n\t // Token\n\t start ^ 开头\n\t end $ 结尾\n\t any-character . 任意字符\n\t backspace [\\b] 退格直接量\n\t word-boundary \\b 单词边界\n\t non-word-boundary \\B 非单词边界\n\t digit \\d ASCII 数字,[0-9]\n\t non-digit \\D 非 ASCII 数字,[^0-9]\n\t form-feed \\f 换页符\n\t line-feed \\n 换行符\n\t carriage-return \\r 回车符\n\t white-space \\s 空白符\n\t non-white-space \\S 非空白符\n\t tab \\t 制表符\n\t vertical-tab \\v 垂直制表符\n\t word \\w ASCII 字符,[a-zA-Z0-9]\n\t non-word \\W 非 ASCII 字符,[^a-zA-Z0-9]\n\t null-character \\o NUL 字符\n\t */\n\n\tvar Util = __webpack_require__(3)\n\tvar Random = __webpack_require__(5)\n\t /*\n\t \n\t */\n\tvar Handler = {\n\t extend: Util.extend\n\t}\n\n\t// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart\n\t/*var ASCII_CONTROL_CODE_CHART = {\n\t '@': ['\\u0000'],\n\t A: ['\\u0001'],\n\t B: ['\\u0002'],\n\t C: ['\\u0003'],\n\t D: ['\\u0004'],\n\t E: ['\\u0005'],\n\t F: ['\\u0006'],\n\t G: ['\\u0007', '\\a'],\n\t H: ['\\u0008', '\\b'],\n\t I: ['\\u0009', '\\t'],\n\t J: ['\\u000A', '\\n'],\n\t K: ['\\u000B', '\\v'],\n\t L: ['\\u000C', '\\f'],\n\t M: ['\\u000D', '\\r'],\n\t N: ['\\u000E'],\n\t O: ['\\u000F'],\n\t P: ['\\u0010'],\n\t Q: ['\\u0011'],\n\t R: ['\\u0012'],\n\t S: ['\\u0013'],\n\t T: ['\\u0014'],\n\t U: ['\\u0015'],\n\t V: ['\\u0016'],\n\t W: ['\\u0017'],\n\t X: ['\\u0018'],\n\t Y: ['\\u0019'],\n\t Z: ['\\u001A'],\n\t '[': ['\\u001B', '\\e'],\n\t '\\\\': ['\\u001C'],\n\t ']': ['\\u001D'],\n\t '^': ['\\u001E'],\n\t '_': ['\\u001F']\n\t}*/\n\n\t// ASCII printable code chart\n\t// var LOWER = 'abcdefghijklmnopqrstuvwxyz'\n\t// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\t// var NUMBER = '0123456789'\n\t// var SYMBOL = ' !\"#$%&\\'()*+,-./' + ':;<=>?@' + '[\\\\]^_`' + '{|}~'\n\tvar LOWER = ascii(97, 122)\n\tvar UPPER = ascii(65, 90)\n\tvar NUMBER = ascii(48, 57)\n\tvar OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126) // 排除 95 _ ascii(91, 94) + ascii(96, 96)\n\tvar PRINTABLE = ascii(32, 126)\n\tvar SPACE = ' \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029'\n\tvar CHARACTER_CLASSES = {\n\t '\\\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95)\n\t '\\\\W': OTHER.replace('_', ''),\n\t '\\\\s': SPACE,\n\t '\\\\S': function() {\n\t var result = PRINTABLE\n\t for (var i = 0; i < SPACE.length; i++) {\n\t result = result.replace(SPACE[i], '')\n\t }\n\t return result\n\t }(),\n\t '\\\\d': NUMBER,\n\t '\\\\D': LOWER + UPPER + OTHER\n\t}\n\n\tfunction ascii(from, to) {\n\t var result = ''\n\t for (var i = from; i <= to; i++) {\n\t result += String.fromCharCode(i)\n\t }\n\t return result\n\t}\n\n\t// var ast = RegExpParser.parse(regexp.source)\n\tHandler.gen = function(node, result, cache) {\n\t cache = cache || {\n\t guid: 1\n\t }\n\t return Handler[node.type] ? Handler[node.type](node, result, cache) :\n\t Handler.token(node, result, cache)\n\t}\n\n\tHandler.extend({\n\t /* jshint unused:false */\n\t token: function(node, result, cache) {\n\t switch (node.type) {\n\t case 'start':\n\t case 'end':\n\t return ''\n\t case 'any-character':\n\t return Random.character()\n\t case 'backspace':\n\t return ''\n\t case 'word-boundary': // TODO\n\t return ''\n\t case 'non-word-boundary': // TODO\n\t break\n\t case 'digit':\n\t return Random.pick(\n\t NUMBER.split('')\n\t )\n\t case 'non-digit':\n\t return Random.pick(\n\t (LOWER + UPPER + OTHER).split('')\n\t )\n\t case 'form-feed':\n\t break\n\t case 'line-feed':\n\t return node.body || node.text\n\t case 'carriage-return':\n\t break\n\t case 'white-space':\n\t return Random.pick(\n\t SPACE.split('')\n\t )\n\t case 'non-white-space':\n\t return Random.pick(\n\t (LOWER + UPPER + NUMBER).split('')\n\t )\n\t case 'tab':\n\t break\n\t case 'vertical-tab':\n\t break\n\t case 'word': // \\w [a-zA-Z0-9]\n\t return Random.pick(\n\t (LOWER + UPPER + NUMBER).split('')\n\t )\n\t case 'non-word': // \\W [^a-zA-Z0-9]\n\t return Random.pick(\n\t OTHER.replace('_', '').split('')\n\t )\n\t case 'null-character':\n\t break\n\t }\n\t return node.body || node.text\n\t },\n\t /*\n\t {\n\t type: 'alternate',\n\t offset: 0,\n\t text: '',\n\t left: {\n\t boyd: []\n\t },\n\t right: {\n\t boyd: []\n\t }\n\t }\n\t */\n\t alternate: function(node, result, cache) {\n\t // node.left/right {}\n\t return this.gen(\n\t Random.boolean() ? node.left : node.right,\n\t result,\n\t cache\n\t )\n\t },\n\t /*\n\t {\n\t type: 'match',\n\t offset: 0,\n\t text: '',\n\t body: []\n\t }\n\t */\n\t match: function(node, result, cache) {\n\t result = ''\n\t // node.body []\n\t for (var i = 0; i < node.body.length; i++) {\n\t result += this.gen(node.body[i], result, cache)\n\t }\n\t return result\n\t },\n\t // ()\n\t 'capture-group': function(node, result, cache) {\n\t // node.body {}\n\t result = this.gen(node.body, result, cache)\n\t cache[cache.guid++] = result\n\t return result\n\t },\n\t // (?:...)\n\t 'non-capture-group': function(node, result, cache) {\n\t // node.body {}\n\t return this.gen(node.body, result, cache)\n\t },\n\t // (?=p)\n\t 'positive-lookahead': function(node, result, cache) {\n\t // node.body\n\t return this.gen(node.body, result, cache)\n\t },\n\t // (?!p)\n\t 'negative-lookahead': function(node, result, cache) {\n\t // node.body\n\t return ''\n\t },\n\t /*\n\t {\n\t type: 'quantified',\n\t offset: 3,\n\t text: 'c*',\n\t body: {\n\t type: 'literal',\n\t offset: 3,\n\t text: 'c',\n\t body: 'c',\n\t escaped: false\n\t },\n\t quantifier: {\n\t type: 'quantifier',\n\t offset: 4,\n\t text: '*',\n\t min: 0,\n\t max: Infinity,\n\t greedy: true\n\t }\n\t }\n\t */\n\t quantified: function(node, result, cache) {\n\t result = ''\n\t // node.quantifier {}\n\t var count = this.quantifier(node.quantifier);\n\t // node.body {}\n\t for (var i = 0; i < count; i++) {\n\t result += this.gen(node.body, result, cache)\n\t }\n\t return result\n\t },\n\t /*\n\t quantifier: {\n\t type: 'quantifier',\n\t offset: 4,\n\t text: '*',\n\t min: 0,\n\t max: Infinity,\n\t greedy: true\n\t }\n\t */\n\t quantifier: function(node, result, cache) {\n\t var min = Math.max(node.min, 0)\n\t var max = isFinite(node.max) ? node.max :\n\t min + Random.integer(3, 7)\n\t return Random.integer(min, max)\n\t },\n\t /*\n\t \n\t */\n\t charset: function(node, result, cache) {\n\t // node.invert\n\t if (node.invert) return this['invert-charset'](node, result, cache)\n\n\t // node.body []\n\t var literal = Random.pick(node.body)\n\t return this.gen(literal, result, cache)\n\t },\n\t 'invert-charset': function(node, result, cache) {\n\t var pool = PRINTABLE\n\t for (var i = 0, item; i < node.body.length; i++) {\n\t item = node.body[i]\n\t switch (item.type) {\n\t case 'literal':\n\t pool = pool.replace(item.body, '')\n\t break\n\t case 'range':\n\t var min = this.gen(item.start, result, cache).charCodeAt()\n\t var max = this.gen(item.end, result, cache).charCodeAt()\n\t for (var ii = min; ii <= max; ii++) {\n\t pool = pool.replace(String.fromCharCode(ii), '')\n\t }\n\t /* falls through */\n\t default:\n\t var characters = CHARACTER_CLASSES[item.text]\n\t if (characters) {\n\t for (var iii = 0; iii <= characters.length; iii++) {\n\t pool = pool.replace(characters[iii], '')\n\t }\n\t }\n\t }\n\t }\n\t return Random.pick(pool.split(''))\n\t },\n\t range: function(node, result, cache) {\n\t // node.start, node.end\n\t var min = this.gen(node.start, result, cache).charCodeAt()\n\t var max = this.gen(node.end, result, cache).charCodeAt()\n\t return String.fromCharCode(\n\t Random.integer(min, max)\n\t )\n\t },\n\t literal: function(node, result, cache) {\n\t return node.escaped ? node.body : node.text\n\t },\n\t // Unicode \\u\n\t unicode: function(node, result, cache) {\n\t return String.fromCharCode(\n\t parseInt(node.code, 16)\n\t )\n\t },\n\t // 十六进制 \\xFF\n\t hex: function(node, result, cache) {\n\t return String.fromCharCode(\n\t parseInt(node.code, 16)\n\t )\n\t },\n\t // 八进制 \\0\n\t octal: function(node, result, cache) {\n\t return String.fromCharCode(\n\t parseInt(node.code, 8)\n\t )\n\t },\n\t // 反向引用\n\t 'back-reference': function(node, result, cache) {\n\t return cache[node.code] || ''\n\t },\n\t /*\n\t http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n\t */\n\t CONTROL_CHARACTER_MAP: function() {\n\t var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\\\ ] ^ _'.split(' ')\n\t var CONTROL_CHARACTER_UNICODE = '\\u0000 \\u0001 \\u0002 \\u0003 \\u0004 \\u0005 \\u0006 \\u0007 \\u0008 \\u0009 \\u000A \\u000B \\u000C \\u000D \\u000E \\u000F \\u0010 \\u0011 \\u0012 \\u0013 \\u0014 \\u0015 \\u0016 \\u0017 \\u0018 \\u0019 \\u001A \\u001B \\u001C \\u001D \\u001E \\u001F'.split(' ')\n\t var map = {}\n\t for (var i = 0; i < CONTROL_CHARACTER.length; i++) {\n\t map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]\n\t }\n\t return map\n\t }(),\n\t 'control-character': function(node, result, cache) {\n\t return this.CONTROL_CHARACTER_MAP[node.code]\n\t }\n\t})\n\n\tmodule.exports = Handler\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(24)\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## toJSONSchema\n\n\t 把 Mock.js 风格的数据模板转换成 JSON Schema。\n\n\t > [JSON Schema](http://json-schema.org/)\n\t */\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar Parser = __webpack_require__(4)\n\n\tfunction toJSONSchema(template, name, path /* Internal Use Only */ ) {\n\t // type rule properties items\n\t path = path || []\n\t var result = {\n\t name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name,\n\t template: template,\n\t type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] }\n\t rule: Parser.parse(name)\n\t }\n\t result.path = path.slice(0)\n\t result.path.push(name === undefined ? 'ROOT' : result.name)\n\n\t switch (result.type) {\n\t case 'array':\n\t result.items = []\n\t Util.each(template, function(value, index) {\n\t result.items.push(\n\t toJSONSchema(value, index, result.path)\n\t )\n\t })\n\t break\n\t case 'object':\n\t result.properties = []\n\t Util.each(template, function(value, name) {\n\t result.properties.push(\n\t toJSONSchema(value, name, result.path)\n\t )\n\t })\n\t break\n\t }\n\n\t return result\n\n\t}\n\n\tmodule.exports = toJSONSchema\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(26)\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## valid(template, data)\n\n\t 校验真实数据 data 是否与数据模板 template 匹配。\n\t \n\t 实现思路:\n\t 1. 解析规则。\n\t 先把数据模板 template 解析为更方便机器解析的 JSON-Schame\n\t name 属性名 \n\t type 属性值类型\n\t template 属性值模板\n\t properties 对象属性数组\n\t items 数组元素数组\n\t rule 属性值生成规则\n\t 2. 递归验证规则。\n\t 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。\n\n\t 提示信息 \n\t https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties\n\t [JSON-Schama validator](http://json-schema-validator.herokuapp.com/)\n\t [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/)\n\t*/\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar toJSONSchema = __webpack_require__(23)\n\n\tfunction valid(template, data) {\n\t var schema = toJSONSchema(template)\n\t var result = Diff.diff(schema, data)\n\t for (var i = 0; i < result.length; i++) {\n\t // console.log(template, data)\n\t // console.warn(Assert.message(result[i]))\n\t }\n\t return result\n\t}\n\n\t/*\n\t ## name\n\t 有生成规则:比较解析后的 name\n\t 无生成规则:直接比较\n\t ## type\n\t 无类型转换:直接比较\n\t 有类型转换:先试着解析 template,然后再检查?\n\t ## value vs. template\n\t 基本类型\n\t 无生成规则:直接比较\n\t 有生成规则:\n\t number\n\t min-max.dmin-dmax\n\t min-max.dcount\n\t count.dmin-dmax\n\t count.dcount\n\t +step\n\t 整数部分\n\t 小数部分\n\t boolean \n\t string \n\t min-max\n\t count\n\t ## properties\n\t 对象\n\t 有生成规则:检测期望的属性个数,继续递归\n\t 无生成规则:检测全部的属性个数,继续递归\n\t ## items\n\t 数组\n\t 有生成规则:\n\t `'name|1': [{}, {} ...]` 其中之一,继续递归\n\t `'name|+1': [{}, {} ...]` 顺序检测,继续递归\n\t `'name|min-max': [{}, {} ...]` 检测个数,继续递归\n\t `'name|count': [{}, {} ...]` 检测个数,继续递归\n\t 无生成规则:检测全部的元素个数,继续递归\n\t*/\n\tvar Diff = {\n\t diff: function diff(schema, data, name /* Internal Use Only */ ) {\n\t var result = []\n\n\t // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测\n\t if (\n\t this.name(schema, data, name, result) &&\n\t this.type(schema, data, name, result)\n\t ) {\n\t this.value(schema, data, name, result)\n\t this.properties(schema, data, name, result)\n\t this.items(schema, data, name, result)\n\t }\n\n\t return result\n\t },\n\t /* jshint unused:false */\n\t name: function(schema, data, name, result) {\n\t var length = result.length\n\n\t Assert.equal('name', schema.path, name + '', schema.name + '', result)\n\n\t return result.length === length\n\t },\n\t type: function(schema, data, name, result) {\n\t var length = result.length\n\n\t switch (schema.type) {\n\t case 'string':\n\t // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值\n\t if (schema.template.match(Constant.RE_PLACEHOLDER)) return true\n\t break\n\t case 'array':\n\t if (schema.rule.parameters) {\n\t // name|count: array\n\t if (schema.rule.min !== undefined && schema.rule.max === undefined) {\n\t // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致\n\t if (schema.rule.count === 1) return true\n\t }\n\t // 跳过 name|+inc: array\n\t if (schema.rule.parameters[2]) return true\n\t }\n\t break\n\t case 'function':\n\t // 跳过 `'name': function`,因为函数可以返回任何类型的值。\n\t return true\n\t }\n\n\t Assert.equal('type', schema.path, Util.type(data), schema.type, result)\n\n\t return result.length === length\n\t },\n\t value: function(schema, data, name, result) {\n\t var length = result.length\n\n\t var rule = schema.rule\n\t var templateType = schema.type\n\t if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true\n\n\t // 无生成规则\n\t if (!rule.parameters) {\n\t switch (templateType) {\n\t case 'regexp':\n\t Assert.match('value', schema.path, data, schema.template, result)\n\t return result.length === length\n\t case 'string':\n\t // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致\n\t if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length\n\t break\n\t }\n\t Assert.equal('value', schema.path, data, schema.template, result)\n\t return result.length === length\n\t }\n\n\t // 有生成规则\n\t var actualRepeatCount\n\t switch (templateType) {\n\t case 'number':\n\t var parts = (data + '').split('.')\n\t parts[0] = +parts[0]\n\n\t // 整数部分\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result)\n\t // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})')\n\t Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name)\n\t }\n\n\t // 小数部分\n\t if (rule.decimal) {\n\t // |dmin-dmax\n\t if (rule.dmin !== undefined && rule.dmax !== undefined) {\n\t Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result)\n\t Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result)\n\t }\n\t // |dcount\n\t if (rule.dmin !== undefined && rule.dmax === undefined) {\n\t Assert.equal('value', schema.path, parts[1].length, rule.dmin, result)\n\t }\n\t }\n\n\t break\n\n\t case 'boolean':\n\t break\n\n\t case 'string':\n\t // 'aaa'.match(/a/g)\n\t actualRepeatCount = data.match(new RegExp(schema.template, 'g'))\n\t actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t }\n\n\t break\n\n\t case 'regexp':\n\t actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\\^|\\$$/g, ''), 'g'))\n\t actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t }\n\t break\n\t }\n\n\t return result.length === length\n\t },\n\t properties: function(schema, data, name, result) {\n\t var length = result.length\n\n\t var rule = schema.rule\n\t var keys = Util.keys(data)\n\t if (!schema.properties) return\n\n\t // 无生成规则\n\t if (!schema.rule.parameters) {\n\t Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result)\n\t } else {\n\t // 有生成规则\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result)\n\t Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t // |1, |>1\n\t if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result)\n\t }\n\t }\n\n\t if (result.length !== length) return false\n\n\t for (var i = 0; i < keys.length; i++) {\n\t result.push.apply(\n\t result,\n\t this.diff(\n\t function() {\n\t var property\n\t Util.each(schema.properties, function(item /*, index*/ ) {\n\t if (item.name === keys[i]) property = item\n\t })\n\t return property || schema.properties[i]\n\t }(),\n\t data[keys[i]],\n\t keys[i]\n\t )\n\t )\n\t }\n\n\t return result.length === length\n\t },\n\t items: function(schema, data, name, result) {\n\t var length = result.length\n\n\t if (!schema.items) return\n\n\t var rule = schema.rule\n\n\t // 无生成规则\n\t if (!schema.rule.parameters) {\n\t Assert.equal('items length', schema.path, data.length, schema.items.length, result)\n\t } else {\n\t // 有生成规则\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result,\n\t '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements')\n\t Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result,\n\t '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements')\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t // |1, |>1\n\t if (rule.count === 1) return result.length === length\n\t else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result)\n\t }\n\t // |+inc\n\t if (rule.parameters[2]) return result.length === length\n\t }\n\n\t if (result.length !== length) return false\n\n\t for (var i = 0; i < data.length; i++) {\n\t result.push.apply(\n\t result,\n\t this.diff(\n\t schema.items[i % schema.items.length],\n\t data[i],\n\t i % schema.items.length\n\t )\n\t )\n\t }\n\n\t return result.length === length\n\t }\n\t}\n\n\t/*\n\t 完善、友好的提示信息\n\t \n\t Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to\n\t 路径 验证类型 描述 \n\n\t Expect path.name is less than or equal to expected, but path.name is actual.\n\n\t Expect path.name is less than or equal to expected, but path.name is actual.\n\t Expect path.name is greater than or equal to expected, but path.name is actual.\n\n\t*/\n\tvar Assert = {\n\t message: function(item) {\n\t return (item.message ||\n\t '[{utype}] Expect {path}\\'{ltype} {action} {expected}, but is {actual}')\n\t .replace('{utype}', item.type.toUpperCase())\n\t .replace('{ltype}', item.type.toLowerCase())\n\t .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path)\n\t .replace('{action}', item.action)\n\t .replace('{expected}', item.expected)\n\t .replace('{actual}', item.actual)\n\t },\n\t equal: function(type, path, actual, expected, result, message) {\n\t if (actual === expected) return true\n\t switch (type) {\n\t case 'type':\n\t // 正则模板 === 字符串最终值\n\t if (expected === 'regexp' && actual === 'string') return true\n\t break\n\t }\n\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t // actual matches expected\n\t match: function(type, path, actual, expected, result, message) {\n\t if (expected.test(actual)) return true\n\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'matches',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t notEqual: function(type, path, actual, expected, result, message) {\n\t if (actual !== expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is not equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t greaterThan: function(type, path, actual, expected, result, message) {\n\t if (actual > expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is greater than',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t lessThan: function(type, path, actual, expected, result, message) {\n\t if (actual < expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is less to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t greaterThanOrEqualTo: function(type, path, actual, expected, result, message) {\n\t if (actual >= expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is greater than or equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t lessThanOrEqualTo: function(type, path, actual, expected, result, message) {\n\t if (actual <= expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is less than or equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t }\n\t}\n\n\tvalid.Diff = Diff\n\tvalid.Assert = Assert\n\n\tmodule.exports = valid\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(28)\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global window, document, location, Event, setTimeout */\n\t/*\n\t ## MockXMLHttpRequest\n\n\t 期望的功能:\n\t 1. 完整地覆盖原生 XHR 的行为\n\t 2. 完整地模拟原生 XHR 的行为\n\t 3. 在发起请求时,自动检测是否需要拦截\n\t 4. 如果不必拦截,则执行原生 XHR 的行为\n\t 5. 如果需要拦截,则执行虚拟 XHR 的行为\n\t 6. 兼容 XMLHttpRequest 和 ActiveXObject\n\t new window.XMLHttpRequest()\n\t new window.ActiveXObject(\"Microsoft.XMLHTTP\")\n\n\t 关键方法的逻辑:\n\t * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。\n\t * open 此时可以取到 URL,可以决定是否进行拦截。\n\t * send 此时已经确定了请求方式。\n\n\t 规范:\n\t http://xhr.spec.whatwg.org/\n\t http://www.w3.org/TR/XMLHttpRequest2/\n\n\t 参考实现:\n\t https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js\n\t https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js\n\t https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js\n\t https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js\n\t https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js\n\n\t **需不需要全面重写 XMLHttpRequest?**\n\t http://xhr.spec.whatwg.org/#interface-xmlhttprequest\n\t 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。\n\t 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。\n\n\t // Event handlers\n\t onloadstart loadstart\n\t onprogress progress\n\t onabort abort\n\t onerror error\n\t onload load\n\t ontimeout timeout\n\t onloadend loadend\n\t onreadystatechange readystatechange\n\t */\n\n\tvar Util = __webpack_require__(3)\n\n\t// 备份原生 XMLHttpRequest\n\twindow._XMLHttpRequest = window.XMLHttpRequest\n\twindow._ActiveXObject = window.ActiveXObject\n\n\t/*\n\t PhantomJS\n\t TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event(\"readystatechange\")')\n\n\t https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18\n\t https://github.com/ariya/phantomjs/issues/11289\n\t*/\n\ttry {\n\t new window.Event('custom')\n\t} catch (exception) {\n\t window.Event = function(type, bubbles, cancelable, detail) {\n\t var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent'\n\t event.initCustomEvent(type, bubbles, cancelable, detail)\n\t return event\n\t }\n\t}\n\n\tvar XHR_STATES = {\n\t // The object has been constructed.\n\t UNSENT: 0,\n\t // The open() method has been successfully invoked.\n\t OPENED: 1,\n\t // All redirects (if any) have been followed and all HTTP headers of the response have been received.\n\t HEADERS_RECEIVED: 2,\n\t // The response's body is being received.\n\t LOADING: 3,\n\t // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects).\n\t DONE: 4\n\t}\n\n\tvar XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ')\n\tvar XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ')\n\tvar XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ')\n\n\t// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32\n\tvar HTTP_STATUS_CODES = {\n\t 100: \"Continue\",\n\t 101: \"Switching Protocols\",\n\t 200: \"OK\",\n\t 201: \"Created\",\n\t 202: \"Accepted\",\n\t 203: \"Non-Authoritative Information\",\n\t 204: \"No Content\",\n\t 205: \"Reset Content\",\n\t 206: \"Partial Content\",\n\t 300: \"Multiple Choice\",\n\t 301: \"Moved Permanently\",\n\t 302: \"Found\",\n\t 303: \"See Other\",\n\t 304: \"Not Modified\",\n\t 305: \"Use Proxy\",\n\t 307: \"Temporary Redirect\",\n\t 400: \"Bad Request\",\n\t 401: \"Unauthorized\",\n\t 402: \"Payment Required\",\n\t 403: \"Forbidden\",\n\t 404: \"Not Found\",\n\t 405: \"Method Not Allowed\",\n\t 406: \"Not Acceptable\",\n\t 407: \"Proxy Authentication Required\",\n\t 408: \"Request Timeout\",\n\t 409: \"Conflict\",\n\t 410: \"Gone\",\n\t 411: \"Length Required\",\n\t 412: \"Precondition Failed\",\n\t 413: \"Request Entity Too Large\",\n\t 414: \"Request-URI Too Long\",\n\t 415: \"Unsupported Media Type\",\n\t 416: \"Requested Range Not Satisfiable\",\n\t 417: \"Expectation Failed\",\n\t 422: \"Unprocessable Entity\",\n\t 500: \"Internal Server Error\",\n\t 501: \"Not Implemented\",\n\t 502: \"Bad Gateway\",\n\t 503: \"Service Unavailable\",\n\t 504: \"Gateway Timeout\",\n\t 505: \"HTTP Version Not Supported\"\n\t}\n\n\t/*\n\t MockXMLHttpRequest\n\t*/\n\n\tfunction MockXMLHttpRequest() {\n\t // 初始化 custom 对象,用于存储自定义属性\n\t this.custom = {\n\t events: {},\n\t requestHeaders: {},\n\t responseHeaders: {}\n\t }\n\t}\n\n\tMockXMLHttpRequest._settings = {\n\t timeout: '10-100',\n\t /*\n\t timeout: 50,\n\t timeout: '10-100',\n\t */\n\t}\n\n\tMockXMLHttpRequest.setup = function(settings) {\n\t Util.extend(MockXMLHttpRequest._settings, settings)\n\t return MockXMLHttpRequest._settings\n\t}\n\n\tUtil.extend(MockXMLHttpRequest, XHR_STATES)\n\tUtil.extend(MockXMLHttpRequest.prototype, XHR_STATES)\n\n\t// 标记当前对象为 MockXMLHttpRequest\n\tMockXMLHttpRequest.prototype.mock = true\n\n\t// 是否拦截 Ajax 请求\n\tMockXMLHttpRequest.prototype.match = false\n\n\t// 初始化 Request 相关的属性和方法\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t // https://xhr.spec.whatwg.org/#the-open()-method\n\t // Sets the request method, request URL, and synchronous flag.\n\t open: function(method, url, async, username, password) {\n\t var that = this\n\n\t Util.extend(this.custom, {\n\t method: method,\n\t url: url,\n\t async: typeof async === 'boolean' ? async : true,\n\t username: username,\n\t password: password,\n\t options: {\n\t url: url,\n\t type: method\n\t }\n\t })\n\n\t this.custom.timeout = function(timeout) {\n\t if (typeof timeout === 'number') return timeout\n\t if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10)\n\t if (typeof timeout === 'string' && ~timeout.indexOf('-')) {\n\t var tmp = timeout.split('-')\n\t var min = parseInt(tmp[0], 10)\n\t var max = parseInt(tmp[1], 10)\n\t return Math.round(Math.random() * (max - min)) + min\n\t }\n\t }(MockXMLHttpRequest._settings.timeout)\n\n\t // 查找与请求参数匹配的数据模板\n\t var item = find(this.custom.options)\n\n\t function handle(event) {\n\t // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest\n\t for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) {\n\t try {\n\t that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]\n\t } catch (e) {}\n\t }\n\t // 触发 MockXMLHttpRequest 上的同名事件\n\t that.dispatchEvent(new Event(event.type /*, false, false, that*/ ))\n\t }\n\n\t // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。\n\t if (!item) {\n\t // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件\n\t var xhr = createNativeXMLHttpRequest()\n\t this.custom.xhr = xhr\n\n\t // 初始化所有事件,用于监听原生 XHR 对象的事件\n\t for (var i = 0; i < XHR_EVENTS.length; i++) {\n\t xhr.addEventListener(XHR_EVENTS[i], handle)\n\t }\n\n\t // xhr.open()\n\t if (username) xhr.open(method, url, async, username, password)\n\t else xhr.open(method, url, async)\n\n\t // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest\n\t for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) {\n\t try {\n\t xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]\n\t } catch (e) {}\n\t }\n\n\t return\n\t }\n\n\t // 找到了匹配的数据模板,开始拦截 XHR 请求\n\t this.match = true\n\t this.custom.template = item\n\t this.readyState = MockXMLHttpRequest.OPENED\n\t this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ ))\n\t },\n\t // https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n\t // Combines a header in author request headers.\n\t setRequestHeader: function(name, value) {\n\t // 原生 XHR\n\t if (!this.match) {\n\t this.custom.xhr.setRequestHeader(name, value)\n\t return\n\t }\n\n\t // 拦截 XHR\n\t var requestHeaders = this.custom.requestHeaders\n\t if (requestHeaders[name]) requestHeaders[name] += ',' + value\n\t else requestHeaders[name] = value\n\t },\n\t timeout: 0,\n\t withCredentials: false,\n\t upload: {},\n\t // https://xhr.spec.whatwg.org/#the-send()-method\n\t // Initiates the request.\n\t send: function send(data) {\n\t var that = this\n\t this.custom.options.body = data\n\n\t // 原生 XHR\n\t if (!this.match) {\n\t this.custom.xhr.send(data)\n\t return\n\t }\n\n\t // 拦截 XHR\n\n\t // X-Requested-With header\n\t this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest')\n\n\t // loadstart The fetch initiates.\n\t this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ ))\n\n\t if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步\n\t else done() // 同步\n\n\t function done() {\n\t that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED\n\t that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\t that.readyState = MockXMLHttpRequest.LOADING\n\t that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\n\t that.status = 200\n\t that.statusText = HTTP_STATUS_CODES[200]\n\n\t // fix #92 #93 by @qddegtya\n\t that.response = that.responseText = JSON.stringify(\n\t convert(that.custom.template, that.custom.options),\n\t null, 4\n\t )\n\n\t that.readyState = MockXMLHttpRequest.DONE\n\t that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\t that.dispatchEvent(new Event('load' /*, false, false, that*/ ));\n\t that.dispatchEvent(new Event('loadend' /*, false, false, that*/ ));\n\t }\n\t },\n\t // https://xhr.spec.whatwg.org/#the-abort()-method\n\t // Cancels any network activity.\n\t abort: function abort() {\n\t // 原生 XHR\n\t if (!this.match) {\n\t this.custom.xhr.abort()\n\t return\n\t }\n\n\t // 拦截 XHR\n\t this.readyState = MockXMLHttpRequest.UNSENT\n\t this.dispatchEvent(new Event('abort', false, false, this))\n\t this.dispatchEvent(new Event('error', false, false, this))\n\t }\n\t})\n\n\t// 初始化 Response 相关的属性和方法\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t responseURL: '',\n\t status: MockXMLHttpRequest.UNSENT,\n\t statusText: '',\n\t // https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n\t getResponseHeader: function(name) {\n\t // 原生 XHR\n\t if (!this.match) {\n\t return this.custom.xhr.getResponseHeader(name)\n\t }\n\n\t // 拦截 XHR\n\t return this.custom.responseHeaders[name.toLowerCase()]\n\t },\n\t // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n\t // http://www.utf8-chartable.de/\n\t getAllResponseHeaders: function() {\n\t // 原生 XHR\n\t if (!this.match) {\n\t return this.custom.xhr.getAllResponseHeaders()\n\t }\n\n\t // 拦截 XHR\n\t var responseHeaders = this.custom.responseHeaders\n\t var headers = ''\n\t for (var h in responseHeaders) {\n\t if (!responseHeaders.hasOwnProperty(h)) continue\n\t headers += h + ': ' + responseHeaders[h] + '\\r\\n'\n\t }\n\t return headers\n\t },\n\t overrideMimeType: function( /*mime*/ ) {},\n\t responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json'\n\t response: null,\n\t responseText: '',\n\t responseXML: null\n\t})\n\n\t// EventTarget\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t addEventListener: function addEventListener(type, handle) {\n\t var events = this.custom.events\n\t if (!events[type]) events[type] = []\n\t events[type].push(handle)\n\t },\n\t removeEventListener: function removeEventListener(type, handle) {\n\t var handles = this.custom.events[type] || []\n\t for (var i = 0; i < handles.length; i++) {\n\t if (handles[i] === handle) {\n\t handles.splice(i--, 1)\n\t }\n\t }\n\t },\n\t dispatchEvent: function dispatchEvent(event) {\n\t var handles = this.custom.events[event.type] || []\n\t for (var i = 0; i < handles.length; i++) {\n\t handles[i].call(this, event)\n\t }\n\n\t var ontype = 'on' + event.type\n\t if (this[ontype]) this[ontype](event)\n\t }\n\t})\n\n\t// Inspired by jQuery\n\tfunction createNativeXMLHttpRequest() {\n\t var isLocal = function() {\n\t var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/\n\t var rurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/\n\t var ajaxLocation = location.href\n\t var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []\n\t return rlocalProtocol.test(ajaxLocParts[1])\n\t }()\n\n\t return window.ActiveXObject ?\n\t (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR()\n\n\t function createStandardXHR() {\n\t try {\n\t return new window._XMLHttpRequest();\n\t } catch (e) {}\n\t }\n\n\t function createActiveXHR() {\n\t try {\n\t return new window._ActiveXObject(\"Microsoft.XMLHTTP\");\n\t } catch (e) {}\n\t }\n\t}\n\n\n\t// 查找与请求参数匹配的数据模板:URL,Type\n\tfunction find(options) {\n\n\t for (var sUrlType in MockXMLHttpRequest.Mock._mocked) {\n\t var item = MockXMLHttpRequest.Mock._mocked[sUrlType]\n\t if (\n\t (!item.rurl || match(item.rurl, options.url)) &&\n\t (!item.rtype || match(item.rtype, options.type.toLowerCase()))\n\t ) {\n\t // console.log('[mock]', options.url, '>', item.rurl)\n\t return item\n\t }\n\t }\n\n\t function match(expected, actual) {\n\t if (Util.type(expected) === 'string') {\n\t return expected === actual\n\t }\n\t if (Util.type(expected) === 'regexp') {\n\t return expected.test(actual)\n\t }\n\t }\n\n\t}\n\n\t// 数据模板 => 响应数据\n\tfunction convert(item, options) {\n\t return Util.isFunction(item.template) ?\n\t item.template(options) : MockXMLHttpRequest.Mock.mock(item.template)\n\t}\n\n\tmodule.exports = MockXMLHttpRequest\n\n/***/ })\n/******/ ])\n});\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX21vY2tqc0AxLjEuMEBtb2NranMvZGlzdC9tb2NrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19tb2NranNAMS4xLjBAbW9ja2pzL2Rpc3QvbW9jay5qcz8wM2ExIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIk1vY2tcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiTW9ja1wiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9LFxuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZVxuLyoqKioqKi8gXHRcdH07XG5cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG5cblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0LyogZ2xvYmFsIHJlcXVpcmUsIG1vZHVsZSwgd2luZG93ICovXG5cdHZhciBIYW5kbGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVxuXHR2YXIgVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMylcblx0dmFyIFJhbmRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNSlcblx0dmFyIFJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMClcblx0dmFyIHRvSlNPTlNjaGVtYSA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpXG5cdHZhciB2YWxpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpXG5cblx0dmFyIFhIUlxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIFhIUiA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cblx0LyohXG5cdCAgICBNb2NrIC0g5qih5ouf6K+35rGCICYg5qih5ouf5pWw5o2uXG5cdCAgICBodHRwczovL2dpdGh1Yi5jb20vbnV5c29mdC9Nb2NrXG5cdCAgICDloqjmmbogbW96aGkuZ3l5QHRhb2Jhby5jb20gbnV5c29mdEBnbWFpbC5jb21cblx0Ki9cblx0dmFyIE1vY2sgPSB7XG5cdCAgICBIYW5kbGVyOiBIYW5kbGVyLFxuXHQgICAgUmFuZG9tOiBSYW5kb20sXG5cdCAgICBVdGlsOiBVdGlsLFxuXHQgICAgWEhSOiBYSFIsXG5cdCAgICBSRTogUkUsXG5cdCAgICB0b0pTT05TY2hlbWE6IHRvSlNPTlNjaGVtYSxcblx0ICAgIHZhbGlkOiB2YWxpZCxcblx0ICAgIGhlcmVkb2M6IFV0aWwuaGVyZWRvYyxcblx0ICAgIHNldHVwOiBmdW5jdGlvbihzZXR0aW5ncykge1xuXHQgICAgICAgIHJldHVybiBYSFIuc2V0dXAoc2V0dGluZ3MpXG5cdCAgICB9LFxuXHQgICAgX21vY2tlZDoge31cblx0fVxuXG5cdE1vY2sudmVyc2lvbiA9ICcxLjAuMS1iZXRhMydcblxuXHQvLyDpgb/lhY3lvqrnjq/kvp3otZZcblx0aWYgKFhIUikgWEhSLk1vY2sgPSBNb2NrXG5cblx0Lypcblx0ICAgICogTW9jay5tb2NrKCB0ZW1wbGF0ZSApXG5cdCAgICAqIE1vY2subW9jayggZnVuY3Rpb24oKSApXG5cdCAgICAqIE1vY2subW9jayggcnVybCwgdGVtcGxhdGUgKVxuXHQgICAgKiBNb2NrLm1vY2soIHJ1cmwsIGZ1bmN0aW9uKG9wdGlvbnMpIClcblx0ICAgICogTW9jay5tb2NrKCBydXJsLCBydHlwZSwgdGVtcGxhdGUgKVxuXHQgICAgKiBNb2NrLm1vY2soIHJ1cmwsIHJ0eXBlLCBmdW5jdGlvbihvcHRpb25zKSApXG5cblx0ICAgIOagueaNruaVsOaNruaooeadv+eUn+aIkOaooeaLn+aVsOaNruOAglxuXHQqL1xuXHRNb2NrLm1vY2sgPSBmdW5jdGlvbihydXJsLCBydHlwZSwgdGVtcGxhdGUpIHtcblx0ICAgIC8vIE1vY2subW9jayh0ZW1wbGF0ZSlcblx0ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgcmV0dXJuIEhhbmRsZXIuZ2VuKHJ1cmwpXG5cdCAgICB9XG5cdCAgICAvLyBNb2NrLm1vY2socnVybCwgdGVtcGxhdGUpXG5cdCAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHQgICAgICAgIHRlbXBsYXRlID0gcnR5cGVcblx0ICAgICAgICBydHlwZSA9IHVuZGVmaW5lZFxuXHQgICAgfVxuXHQgICAgLy8g5oum5oiqIFhIUlxuXHQgICAgaWYgKFhIUikgd2luZG93LlhNTEh0dHBSZXF1ZXN0ID0gWEhSXG5cdCAgICBNb2NrLl9tb2NrZWRbcnVybCArIChydHlwZSB8fCAnJyldID0ge1xuXHQgICAgICAgIHJ1cmw6IHJ1cmwsXG5cdCAgICAgICAgcnR5cGU6IHJ0eXBlLFxuXHQgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIE1vY2tcblx0fVxuXG5cdG1vZHVsZS5leHBvcnRzID0gTW9ja1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBcblx0ICAgICMjIEhhbmRsZXJcblxuXHQgICAg5aSE55CG5pWw5o2u5qih5p2/44CCXG5cdCAgICBcblx0ICAgICogSGFuZGxlci5nZW4oIHRlbXBsYXRlLCBuYW1lPywgY29udGV4dD8gKVxuXG5cdCAgICAgICAg5YWl5Y+j5pa55rOV44CCXG5cblx0ICAgICogRGF0YSBUZW1wbGF0ZSBEZWZpbml0aW9uLCBEVERcblx0ICAgICAgICBcblx0ICAgICAgICDlpITnkIbmlbDmja7mqKHmnb/lrprkuYnjgIJcblxuXHQgICAgICAgICogSGFuZGxlci5hcnJheSggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLm9iamVjdCggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLm51bWJlciggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLmJvb2xlYW4oIG9wdGlvbnMgKVxuXHQgICAgICAgICogSGFuZGxlci5zdHJpbmcoIG9wdGlvbnMgKVxuXHQgICAgICAgICogSGFuZGxlci5mdW5jdGlvbiggb3B0aW9ucyApXG5cdCAgICAgICAgKiBIYW5kbGVyLnJlZ2V4cCggb3B0aW9ucyApXG5cdCAgICAgICAgXG5cdCAgICAgICAg5aSE55CG6Lev5b6E77yI55u45a+55ZKM57ud5a+577yJ44CCXG5cblx0ICAgICAgICAqIEhhbmRsZXIuZ2V0VmFsdWVCeUtleVBhdGgoIGtleSwgb3B0aW9ucyApXG5cblx0ICAgICogRGF0YSBQbGFjZWhvbGRlciBEZWZpbml0aW9uLCBEUERcblxuXHQgICAgICAgIOWkhOeQhuaVsOaNruWNoOS9jeespuWumuS5iVxuXG5cdCAgICAgICAgKiBIYW5kbGVyLnBsYWNlaG9sZGVyKCBwbGFjZWhvbGRlciwgY29udGV4dCwgdGVtcGxhdGVDb250ZXh0LCBvcHRpb25zIClcblxuXHQqL1xuXG5cdHZhciBDb25zdGFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMilcblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cdHZhciBQYXJzZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpXG5cdHZhciBSYW5kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpXG5cdHZhciBSRSA9IF9fd2VicGFja19yZXF1aXJlX18oMjApXG5cblx0dmFyIEhhbmRsZXIgPSB7XG5cdCAgICBleHRlbmQ6IFV0aWwuZXh0ZW5kXG5cdH1cblxuXHQvKlxuXHQgICAgdGVtcGxhdGUgICAgICAgIOWxnuaAp+WAvO+8iOWNs+aVsOaNruaooeadv++8iVxuXHQgICAgbmFtZSAgICAgICAgICAgIOWxnuaAp+WQjVxuXHQgICAgY29udGV4dCAgICAgICAgIOaVsOaNruS4iuS4i+aWh++8jOeUn+aIkOWQjueahOaVsOaNrlxuXHQgICAgdGVtcGxhdGVDb250ZXh0IOaooeadv+S4iuS4i+aWh++8jFxuXG5cdCAgICBIYW5kbGUuZ2VuKHRlbXBsYXRlLCBuYW1lLCBvcHRpb25zKVxuXHQgICAgY29udGV4dFxuXHQgICAgICAgIGN1cnJlbnRDb250ZXh0LCB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0LCBcblx0ICAgICAgICBwYXRoLCB0ZW1wbGF0ZVBhdGhcblx0ICAgICAgICByb290LCB0ZW1wbGF0ZVJvb3Rcblx0Ki9cblx0SGFuZGxlci5nZW4gPSBmdW5jdGlvbih0ZW1wbGF0ZSwgbmFtZSwgY29udGV4dCkge1xuXHQgICAgLyoganNoaW50IC1XMDQxICovXG5cdCAgICBuYW1lID0gbmFtZSA9PSB1bmRlZmluZWQgPyAnJyA6IChuYW1lICsgJycpXG5cblx0ICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IHt9XG5cdCAgICBjb250ZXh0ID0ge1xuXHQgICAgICAgICAgICAvLyDlvZPliY3orr/pl67ot6/lvoTvvIzlj6rmnInlsZ7mgKflkI3vvIzkuI3ljIXmi6znlJ/miJDop4TliJlcblx0ICAgICAgICAgICAgcGF0aDogY29udGV4dC5wYXRoIHx8IFtDb25zdGFudC5HVUlEXSxcblx0ICAgICAgICAgICAgdGVtcGxhdGVQYXRoOiBjb250ZXh0LnRlbXBsYXRlUGF0aCB8fCBbQ29uc3RhbnQuR1VJRCsrXSxcblx0ICAgICAgICAgICAgLy8g5pyA57uI5bGe5oCn5YC855qE5LiK5LiL5paHXG5cdCAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiBjb250ZXh0LmN1cnJlbnRDb250ZXh0LFxuXHQgICAgICAgICAgICAvLyDlsZ7mgKflgLzmqKHmnb/nmoTkuIrkuIvmlodcblx0ICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogY29udGV4dC50ZW1wbGF0ZUN1cnJlbnRDb250ZXh0IHx8IHRlbXBsYXRlLFxuXHQgICAgICAgICAgICAvLyDmnIDnu4jlgLznmoTmoLlcblx0ICAgICAgICAgICAgcm9vdDogY29udGV4dC5yb290IHx8IGNvbnRleHQuY3VycmVudENvbnRleHQsXG5cdCAgICAgICAgICAgIC8vIOaooeadv+eahOaguVxuXHQgICAgICAgICAgICB0ZW1wbGF0ZVJvb3Q6IGNvbnRleHQudGVtcGxhdGVSb290IHx8IGNvbnRleHQudGVtcGxhdGVDdXJyZW50Q29udGV4dCB8fCB0ZW1wbGF0ZVxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBjb25zb2xlLmxvZygncGF0aDonLCBjb250ZXh0LnBhdGguam9pbignLicpLCB0ZW1wbGF0ZSlcblxuXHQgICAgdmFyIHJ1bGUgPSBQYXJzZXIucGFyc2UobmFtZSlcblx0ICAgIHZhciB0eXBlID0gVXRpbC50eXBlKHRlbXBsYXRlKVxuXHQgICAgdmFyIGRhdGFcblxuXHQgICAgaWYgKEhhbmRsZXJbdHlwZV0pIHtcblx0ICAgICAgICBkYXRhID0gSGFuZGxlclt0eXBlXSh7XG5cdCAgICAgICAgICAgIC8vIOWxnuaAp+WAvOexu+Wei1xuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICAvLyDlsZ7mgKflgLzmqKHmnb9cblx0ICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuXHQgICAgICAgICAgICAvLyDlsZ7mgKflkI0gKyDnlJ/miJDop4TliJlcblx0ICAgICAgICAgICAgbmFtZTogbmFtZSxcblx0ICAgICAgICAgICAgLy8g5bGe5oCn5ZCNXG5cdCAgICAgICAgICAgIHBhcnNlZE5hbWU6IG5hbWUgPyBuYW1lLnJlcGxhY2UoQ29uc3RhbnQuUkVfS0VZLCAnJDEnKSA6IG5hbWUsXG5cblx0ICAgICAgICAgICAgLy8g6Kej5p6Q5ZCO55qE55Sf5oiQ6KeE5YiZXG5cdCAgICAgICAgICAgIHJ1bGU6IHJ1bGUsXG5cdCAgICAgICAgICAgIC8vIOebuOWFs+S4iuS4i+aWh1xuXHQgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XG5cdCAgICAgICAgfSlcblxuXHQgICAgICAgIGlmICghY29udGV4dC5yb290KSBjb250ZXh0LnJvb3QgPSBkYXRhXG5cdCAgICAgICAgcmV0dXJuIGRhdGFcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHRlbXBsYXRlXG5cdH1cblxuXHRIYW5kbGVyLmV4dGVuZCh7XG5cdCAgICBhcnJheTogZnVuY3Rpb24ob3B0aW9ucykge1xuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXSxcblx0ICAgICAgICAgICAgaSwgaWk7XG5cblx0ICAgICAgICAvLyAnbmFtZXwxJzogW11cblx0ICAgICAgICAvLyAnbmFtZXxjb3VudCc6IFtdXG5cdCAgICAgICAgLy8gJ25hbWV8bWluLW1heCc6IFtdXG5cdCAgICAgICAgaWYgKG9wdGlvbnMudGVtcGxhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzdWx0XG5cblx0ICAgICAgICAvLyAnYXJyJzogW3sgJ2VtYWlsJzogJ0BFTUFJTCcgfSwgeyAnZW1haWwnOiAnQEVNQUlMJyB9XVxuXHQgICAgICAgIGlmICghb3B0aW9ucy5ydWxlLnBhcmFtZXRlcnMpIHtcblx0ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9wdGlvbnMudGVtcGxhdGUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnB1c2goaSlcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChpKVxuXHQgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG5cdCAgICAgICAgICAgICAgICAgICAgSGFuZGxlci5nZW4ob3B0aW9ucy50ZW1wbGF0ZVtpXSwgaSwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBvcHRpb25zLmNvbnRleHQucGF0aCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVQYXRoOiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0OiBvcHRpb25zLnRlbXBsYXRlLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICByb290OiBvcHRpb25zLmNvbnRleHQucm9vdCB8fCByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUm9vdDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUm9vdCB8fCBvcHRpb25zLnRlbXBsYXRlXG5cdCAgICAgICAgICAgICAgICAgICAgfSlcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnBvcCgpXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLnBvcCgpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyAnbWV0aG9kfDEnOiBbJ0dFVCcsICdQT1NUJywgJ0hFQUQnLCAnREVMRVRFJ11cblx0ICAgICAgICAgICAgaWYgKG9wdGlvbnMucnVsZS5taW4gPT09IDEgJiYgb3B0aW9ucy5ydWxlLm1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBmaXggIzE3XG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wdXNoKG9wdGlvbnMubmFtZSlcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChvcHRpb25zLm5hbWUpXG5cdCAgICAgICAgICAgICAgICByZXN1bHQgPSBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICBIYW5kbGVyLmdlbihvcHRpb25zLnRlbXBsYXRlLCB1bmRlZmluZWQsIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5jb250ZXh0LnBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbnRleHQ6IHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogb3B0aW9ucy50ZW1wbGF0ZSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcm9vdDogb3B0aW9ucy5jb250ZXh0LnJvb3QgfHwgcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJvb3Q6IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVJvb3QgfHwgb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgICAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wb3AoKVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aC5wb3AoKVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gJ2RhdGF8KzEnOiBbe30sIHt9XVxuXHQgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucnVsZS5wYXJhbWV0ZXJzWzJdKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZS5fX29yZGVyX2luZGV4ID0gb3B0aW9ucy50ZW1wbGF0ZS5fX29yZGVyX2luZGV4IHx8IDBcblxuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnB1c2gob3B0aW9ucy5uYW1lKVxuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChvcHRpb25zLm5hbWUpXG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSGFuZGxlci5nZW4ob3B0aW9ucy50ZW1wbGF0ZSwgdW5kZWZpbmVkLCB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMuY29udGV4dC5wYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ3VycmVudENvbnRleHQ6IG9wdGlvbnMudGVtcGxhdGUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q6IG9wdGlvbnMuY29udGV4dC5yb290IHx8IHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSb290OiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVSb290IHx8IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgICAgICAgICB9KVtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZS5fX29yZGVyX2luZGV4ICUgb3B0aW9ucy50ZW1wbGF0ZS5sZW5ndGhcblx0ICAgICAgICAgICAgICAgICAgICBdXG5cblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRlbXBsYXRlLl9fb3JkZXJfaW5kZXggKz0gK29wdGlvbnMucnVsZS5wYXJhbWV0ZXJzWzJdXG5cblx0ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wb3AoKVxuXHQgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucG9wKClcblxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAnZGF0YXwxLTEwJzogW3t9XVxuXHQgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnJ1bGUuY291bnQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGF0YXwxLTEwJzogW3t9LCB7fV1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgb3B0aW9ucy50ZW1wbGF0ZS5sZW5ndGg7IGlpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC5wYXRoLnB1c2gocmVzdWx0Lmxlbmd0aClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChpaSlcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXIuZ2VuKG9wdGlvbnMudGVtcGxhdGVbaWldLCByZXN1bHQubGVuZ3RoLCB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMuY29udGV4dC5wYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ3VycmVudENvbnRleHQ6IG9wdGlvbnMudGVtcGxhdGUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q6IG9wdGlvbnMuY29udGV4dC5yb290IHx8IHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSb290OiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVSb290IHx8IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0XG5cdCAgICB9LFxuXHQgICAgb2JqZWN0OiBmdW5jdGlvbihvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IHt9LFxuXHQgICAgICAgICAgICBrZXlzLCBmbktleXMsIGtleSwgcGFyc2VkS2V5LCBpbmMsIGk7XG5cblx0ICAgICAgICAvLyAnb2JqfG1pbi1tYXgnOiB7fVxuXHQgICAgICAgIC8qIGpzaGludCAtVzA0MSAqL1xuXHQgICAgICAgIGlmIChvcHRpb25zLnJ1bGUubWluICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICBrZXlzID0gVXRpbC5rZXlzKG9wdGlvbnMudGVtcGxhdGUpXG5cdCAgICAgICAgICAgIGtleXMgPSBSYW5kb20uc2h1ZmZsZShrZXlzKVxuXHQgICAgICAgICAgICBrZXlzID0ga2V5cy5zbGljZSgwLCBvcHRpb25zLnJ1bGUuY291bnQpXG5cdCAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBrZXkgPSBrZXlzW2ldXG5cdCAgICAgICAgICAgICAgICBwYXJzZWRLZXkgPSBrZXkucmVwbGFjZShDb25zdGFudC5SRV9LRVksICckMScpXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wdXNoKHBhcnNlZEtleSlcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucHVzaChrZXkpXG5cdCAgICAgICAgICAgICAgICByZXN1bHRbcGFyc2VkS2V5XSA9IEhhbmRsZXIuZ2VuKG9wdGlvbnMudGVtcGxhdGVba2V5XSwga2V5LCB7XG5cdCAgICAgICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5jb250ZXh0LnBhdGgsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVQYXRoOiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogb3B0aW9ucy50ZW1wbGF0ZSxcblx0ICAgICAgICAgICAgICAgICAgICByb290OiBvcHRpb25zLmNvbnRleHQucm9vdCB8fCByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSb290OiBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVSb290IHx8IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQucGF0aC5wb3AoKVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aC5wb3AoKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyAnb2JqJzoge31cblx0ICAgICAgICAgICAga2V5cyA9IFtdXG5cdCAgICAgICAgICAgIGZuS2V5cyA9IFtdIC8vICMyNSDmlLnlj5jkuobpnZ7lh73mlbDlsZ7mgKfnmoTpobrluo/vvIzmn6Xmib7otbfmnaXkuI3mlrnkvr9cblx0ICAgICAgICAgICAgZm9yIChrZXkgaW4gb3B0aW9ucy50ZW1wbGF0ZSkge1xuXHQgICAgICAgICAgICAgICAgKHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlW2tleV0gPT09ICdmdW5jdGlvbicgPyBmbktleXMgOiBrZXlzKS5wdXNoKGtleSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZm5LZXlzKVxuXG5cdCAgICAgICAgICAgIC8qXG5cdCAgICAgICAgICAgICAgICDkvJrmlLnlj5jpnZ7lh73mlbDlsZ7mgKfnmoTpobrluo9cblx0ICAgICAgICAgICAgICAgIGtleXMgPSBVdGlsLmtleXMob3B0aW9ucy50ZW1wbGF0ZSlcblx0ICAgICAgICAgICAgICAgIGtleXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGFmbiA9IHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlW2FdID09PSAnZnVuY3Rpb24nXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGJmbiA9IHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlW2JdID09PSAnZnVuY3Rpb24nXG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKGFmbiA9PT0gYmZuKSByZXR1cm4gMFxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChhZm4gJiYgIWJmbikgcmV0dXJuIDFcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoIWFmbiAmJiBiZm4pIHJldHVybiAtMVxuXHQgICAgICAgICAgICAgICAgfSlcblx0ICAgICAgICAgICAgKi9cblxuXHQgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAga2V5ID0ga2V5c1tpXVxuXHQgICAgICAgICAgICAgICAgcGFyc2VkS2V5ID0ga2V5LnJlcGxhY2UoQ29uc3RhbnQuUkVfS0VZLCAnJDEnKVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGgucHVzaChwYXJzZWRLZXkpXG5cdCAgICAgICAgICAgICAgICBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLnB1c2goa2V5KVxuXHQgICAgICAgICAgICAgICAgcmVzdWx0W3BhcnNlZEtleV0gPSBIYW5kbGVyLmdlbihvcHRpb25zLnRlbXBsYXRlW2tleV0sIGtleSwge1xuXHQgICAgICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMuY29udGV4dC5wYXRoLFxuXHQgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUGF0aCxcblx0ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ3VycmVudENvbnRleHQ6IG9wdGlvbnMudGVtcGxhdGUsXG5cdCAgICAgICAgICAgICAgICAgICAgcm9vdDogb3B0aW9ucy5jb250ZXh0LnJvb3QgfHwgcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUm9vdDogb3B0aW9ucy5jb250ZXh0LnRlbXBsYXRlUm9vdCB8fCBvcHRpb25zLnRlbXBsYXRlXG5cdCAgICAgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVBhdGgucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICAvLyAnaWR8KzEnOiAxXG5cdCAgICAgICAgICAgICAgICBpbmMgPSBrZXkubWF0Y2goQ29uc3RhbnQuUkVfS0VZKVxuXHQgICAgICAgICAgICAgICAgaWYgKGluYyAmJiBpbmNbMl0gJiYgVXRpbC50eXBlKG9wdGlvbnMudGVtcGxhdGVba2V5XSkgPT09ICdudW1iZXInKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZVtrZXldICs9IHBhcnNlSW50KGluY1syXSwgMTApXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIG51bWJlcjogZnVuY3Rpb24ob3B0aW9ucykge1xuXHQgICAgICAgIHZhciByZXN1bHQsIHBhcnRzO1xuXHQgICAgICAgIGlmIChvcHRpb25zLnJ1bGUuZGVjaW1hbCkgeyAvLyBmbG9hdFxuXHQgICAgICAgICAgICBvcHRpb25zLnRlbXBsYXRlICs9ICcnXG5cdCAgICAgICAgICAgIHBhcnRzID0gb3B0aW9ucy50ZW1wbGF0ZS5zcGxpdCgnLicpXG5cdCAgICAgICAgICAgICAgICAvLyAnZmxvYXQxfC4xLTEwJzogMTAsXG5cdCAgICAgICAgICAgICAgICAvLyAnZmxvYXQyfDEtMTAwLjEtMTAnOiAxLFxuXHQgICAgICAgICAgICAgICAgLy8gJ2Zsb2F0M3w5OTkuMS0xMCc6IDEsXG5cdCAgICAgICAgICAgICAgICAvLyAnZmxvYXQ0fC4zLTEwJzogMTIzLjEyMyxcblx0ICAgICAgICAgICAgcGFydHNbMF0gPSBvcHRpb25zLnJ1bGUucmFuZ2UgPyBvcHRpb25zLnJ1bGUuY291bnQgOiBwYXJ0c1swXVxuXHQgICAgICAgICAgICBwYXJ0c1sxXSA9IChwYXJ0c1sxXSB8fCAnJykuc2xpY2UoMCwgb3B0aW9ucy5ydWxlLmRjb3VudClcblx0ICAgICAgICAgICAgd2hpbGUgKHBhcnRzWzFdLmxlbmd0aCA8IG9wdGlvbnMucnVsZS5kY291bnQpIHtcblx0ICAgICAgICAgICAgICAgIHBhcnRzWzFdICs9IChcblx0ICAgICAgICAgICAgICAgICAgICAvLyDmnIDlkI7kuIDkvY3kuI3og73kuLogMO+8muWmguaenOacgOWQjuS4gOS9jeS4uiAw77yM5Lya6KKrIEpTIOW8leaTjuW/veeVpeaOieOAglxuXHQgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXS5sZW5ndGggPCBvcHRpb25zLnJ1bGUuZGNvdW50IC0gMSkgPyBSYW5kb20uY2hhcmFjdGVyKCdudW1iZXInKSA6IFJhbmRvbS5jaGFyYWN0ZXIoJzEyMzQ1Njc4OScpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGbG9hdChwYXJ0cy5qb2luKCcuJyksIDEwKVxuXHQgICAgICAgIH0gZWxzZSB7IC8vIGludGVnZXJcblx0ICAgICAgICAgICAgLy8gJ2dyYWRlMXwxLTEwMCc6IDEsXG5cdCAgICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbnMucnVsZS5yYW5nZSAmJiAhb3B0aW9ucy5ydWxlLnBhcmFtZXRlcnNbMl0gPyBvcHRpb25zLnJ1bGUuY291bnQgOiBvcHRpb25zLnRlbXBsYXRlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICBib29sZWFuOiBmdW5jdGlvbihvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIHJlc3VsdDtcblx0ICAgICAgICAvLyAncHJvcHxtdWx0aXBsZSc6IGZhbHNlLCDlvZPliY3lgLzmmK/nm7jlj43lgLznmoTmpoLnjoflgI3mlbBcblx0ICAgICAgICAvLyAncHJvcHxwcm9iYWJpbGl0eS1wcm9iYWJpbGl0eSc6IGZhbHNlLCDlvZPliY3lgLzkuI7nm7jlj43lgLznmoTmpoLnjodcblx0ICAgICAgICByZXN1bHQgPSBvcHRpb25zLnJ1bGUucGFyYW1ldGVycyA/IFJhbmRvbS5ib29sKG9wdGlvbnMucnVsZS5taW4sIG9wdGlvbnMucnVsZS5tYXgsIG9wdGlvbnMudGVtcGxhdGUpIDogb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICBzdHJpbmc6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gJycsXG5cdCAgICAgICAgICAgIGksIHBsYWNlaG9sZGVycywgcGgsIHBoZWQ7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMudGVtcGxhdGUubGVuZ3RoKSB7XG5cblx0ICAgICAgICAgICAgLy8gICdmb28nOiAn4piFJyxcblx0ICAgICAgICAgICAgLyoganNoaW50IC1XMDQxICovXG5cdCAgICAgICAgICAgIGlmIChvcHRpb25zLnJ1bGUuY291bnQgPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICByZXN1bHQgKz0gb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gJ3N0YXJ8MS01JzogJ+KYhScsXG5cdCAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcHRpb25zLnJ1bGUuY291bnQ7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG9wdGlvbnMudGVtcGxhdGVcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyAnZW1haWx8MS0xMCc6ICdARU1BSUwsICcsXG5cdCAgICAgICAgICAgIHBsYWNlaG9sZGVycyA9IHJlc3VsdC5tYXRjaChDb25zdGFudC5SRV9QTEFDRUhPTERFUikgfHwgW10gLy8gQS1aXzAtOSA+IFxcd19cblx0ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBsYWNlaG9sZGVycy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgcGggPSBwbGFjZWhvbGRlcnNbaV1cblxuXHQgICAgICAgICAgICAgICAgLy8g6YGH5Yiw6L2s5LmJ5pac5p2g77yM5LiN6ZyA6KaB6Kej5p6Q5Y2g5L2N56ymXG5cdCAgICAgICAgICAgICAgICBpZiAoL15cXFxcLy50ZXN0KHBoKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVycy5zcGxpY2UoaS0tLCAxKVxuXHQgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHBoZWQgPSBIYW5kbGVyLnBsYWNlaG9sZGVyKHBoLCBvcHRpb25zLmNvbnRleHQuY3VycmVudENvbnRleHQsIG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZUN1cnJlbnRDb250ZXh0LCBvcHRpb25zKVxuXG5cdCAgICAgICAgICAgICAgICAvLyDlj6rmnInkuIDkuKrljaDkvY3nrKbvvIzlubbkuJTmsqHmnInlhbbku5blrZfnrKZcblx0ICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlcnMubGVuZ3RoID09PSAxICYmIHBoID09PSByZXN1bHQgJiYgdHlwZW9mIHBoZWQgIT09IHR5cGVvZiByZXN1bHQpIHsgLy8gXG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGhlZFxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbC5pc051bWVyaWMocGhlZCkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGbG9hdChwaGVkLCAxMClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChwaGVkKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwaGVkID09PSAndHJ1ZScgPyB0cnVlIDpcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoZWQgPT09ICdmYWxzZScgPyBmYWxzZSA6XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGVkIC8vIOW3sue7j+aYr+W4g+WwlOWAvFxuXHQgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHBoLCBwaGVkKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyAnQVNDSUl8MS0xMCc6ICcnLFxuXHQgICAgICAgICAgICAvLyAnQVNDSUknOiAnJyxcblx0ICAgICAgICAgICAgcmVzdWx0ID0gb3B0aW9ucy5ydWxlLnJhbmdlID8gUmFuZG9tLnN0cmluZyhvcHRpb25zLnJ1bGUuY291bnQpIDogb3B0aW9ucy50ZW1wbGF0ZVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0XG5cdCAgICB9LFxuXHQgICAgJ2Z1bmN0aW9uJzogZnVuY3Rpb24ob3B0aW9ucykge1xuXHQgICAgICAgIC8vICggY29udGV4dCwgb3B0aW9ucyApXG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnMudGVtcGxhdGUuY2FsbChvcHRpb25zLmNvbnRleHQuY3VycmVudENvbnRleHQsIG9wdGlvbnMpXG5cdCAgICB9LFxuXHQgICAgJ3JlZ2V4cCc6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgc291cmNlID0gJydcblxuXHQgICAgICAgIC8vICduYW1lJzogL3JlZ2V4cC8sXG5cdCAgICAgICAgLyoganNoaW50IC1XMDQxICovXG5cdCAgICAgICAgaWYgKG9wdGlvbnMucnVsZS5jb3VudCA9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgc291cmNlICs9IG9wdGlvbnMudGVtcGxhdGUuc291cmNlIC8vIHJlZ2V4cC5zb3VyY2Vcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyAnbmFtZXwxLTUnOiAvcmVnZXhwLyxcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMucnVsZS5jb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHNvdXJjZSArPSBvcHRpb25zLnRlbXBsYXRlLnNvdXJjZVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBSRS5IYW5kbGVyLmdlbihcblx0ICAgICAgICAgICAgUkUuUGFyc2VyLnBhcnNlKFxuXHQgICAgICAgICAgICAgICAgc291cmNlXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICApXG5cdCAgICB9XG5cdH0pXG5cblx0SGFuZGxlci5leHRlbmQoe1xuXHQgICAgX2FsbDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdmFyIHJlID0ge307XG5cdCAgICAgICAgZm9yICh2YXIga2V5IGluIFJhbmRvbSkgcmVba2V5LnRvTG93ZXJDYXNlKCldID0ga2V5XG5cdCAgICAgICAgcmV0dXJuIHJlXG5cdCAgICB9LFxuXHQgICAgLy8g5aSE55CG5Y2g5L2N56ym77yM6L2s5o2i5Li65pyA57uI5YC8XG5cdCAgICBwbGFjZWhvbGRlcjogZnVuY3Rpb24ocGxhY2Vob2xkZXIsIG9iaiwgdGVtcGxhdGVDb250ZXh0LCBvcHRpb25zKSB7XG5cdCAgICAgICAgLy8gY29uc29sZS5sb2cob3B0aW9ucy5jb250ZXh0LnBhdGgpXG5cdCAgICAgICAgLy8gMSBrZXksIDIgcGFyYW1zXG5cdCAgICAgICAgQ29uc3RhbnQuUkVfUExBQ0VIT0xERVIuZXhlYygnJylcblx0ICAgICAgICB2YXIgcGFydHMgPSBDb25zdGFudC5SRV9QTEFDRUhPTERFUi5leGVjKHBsYWNlaG9sZGVyKSxcblx0ICAgICAgICAgICAga2V5ID0gcGFydHMgJiYgcGFydHNbMV0sXG5cdCAgICAgICAgICAgIGxrZXkgPSBrZXkgJiYga2V5LnRvTG93ZXJDYXNlKCksXG5cdCAgICAgICAgICAgIG9rZXkgPSB0aGlzLl9hbGwoKVtsa2V5XSxcblx0ICAgICAgICAgICAgcGFyYW1zID0gcGFydHMgJiYgcGFydHNbMl0gfHwgJydcblx0ICAgICAgICB2YXIgcGF0aFBhcnRzID0gdGhpcy5zcGxpdFBhdGhUb0FycmF5KGtleSlcblxuXHQgICAgICAgIC8vIOino+aekOWNoOS9jeespueahOWPguaVsFxuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgIC8vIDEuIOWwneivleS/neaMgeWPguaVsOeahOexu+Wei1xuXHQgICAgICAgICAgICAvKlxuXHQgICAgICAgICAgICAgICAgIzI0IFtXaW5kb3cgRmlyZWZveCAzMC4wIOW8leeUqCDljaDkvY3nrKYg5oqb6ZSZXShodHRwczovL2dpdGh1Yi5jb20vbnV5c29mdC9Nb2NrL2lzc3Vlcy8yNClcblx0ICAgICAgICAgICAgICAgIFtCWDkwNTY6IOWQhOa1j+iniOWZqOS4iyB3aW5kb3cuZXZhbCDmlrnms5XnmoTmiafooYzkuIrkuIvmloflrZjlnKjlt67lvIJdKGh0dHA6Ly93d3cudzNoZWxwLm9yZy96aC1jbi9jYXVzZXMvQlg5MDU2KVxuXHQgICAgICAgICAgICAgICAg5bqU6K+l5bGe5LqOIFdpbmRvdyBGaXJlZm94IDMwLjAg55qEIEJVR1xuXHQgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICAvKiBqc2hpbnQgLVcwNjEgKi9cblx0ICAgICAgICAgICAgcGFyYW1zID0gZXZhbCgnKGZ1bmN0aW9uKCl7IHJldHVybiBbXS5zcGxpY2UuY2FsbChhcmd1bWVudHMsIDAgKSB9KSgnICsgcGFyYW1zICsgJyknKVxuXHQgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG5cdCAgICAgICAgICAgIC8vIDIuIOWmguaenOWksei0pe+8jOWPquiDveino+aekOS4uuWtl+espuS4slxuXHQgICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKGVycm9yKVxuXHQgICAgICAgICAgICAvLyBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikgcGFyYW1zID0gcGFydHNbMl0uc3BsaXQoLyxcXHMqLyk7XG5cdCAgICAgICAgICAgIC8vIGVsc2UgdGhyb3cgZXJyb3Jcblx0ICAgICAgICAgICAgcGFyYW1zID0gcGFydHNbMl0uc3BsaXQoLyxcXHMqLylcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDljaDkvY3nrKbkvJjlhYjlvJXnlKjmlbDmja7mqKHmnb/kuK3nmoTlsZ7mgKdcblx0ICAgICAgICBpZiAob2JqICYmIChrZXkgaW4gb2JqKSkgcmV0dXJuIG9ialtrZXldXG5cblx0ICAgICAgICAvLyBAaW5kZXggQGtleVxuXHQgICAgICAgIC8vIGlmIChDb25zdGFudC5SRV9JTkRFWC50ZXN0KGtleSkpIHJldHVybiArb3B0aW9ucy5uYW1lXG5cdCAgICAgICAgLy8gaWYgKENvbnN0YW50LlJFX0tFWS50ZXN0KGtleSkpIHJldHVybiBvcHRpb25zLm5hbWVcblxuXHQgICAgICAgIC8vIOe7neWvuei3r+W+hCBvciDnm7jlr7not6/lvoRcblx0ICAgICAgICBpZiAoXG5cdCAgICAgICAgICAgIGtleS5jaGFyQXQoMCkgPT09ICcvJyB8fFxuXHQgICAgICAgICAgICBwYXRoUGFydHMubGVuZ3RoID4gMVxuXHQgICAgICAgICkgcmV0dXJuIHRoaXMuZ2V0VmFsdWVCeUtleVBhdGgoa2V5LCBvcHRpb25zKVxuXG5cdCAgICAgICAgLy8g6YCS5b2S5byV55So5pWw5o2u5qih5p2/5Lit55qE5bGe5oCnXG5cdCAgICAgICAgaWYgKHRlbXBsYXRlQ29udGV4dCAmJlxuXHQgICAgICAgICAgICAodHlwZW9mIHRlbXBsYXRlQ29udGV4dCA9PT0gJ29iamVjdCcpICYmXG5cdCAgICAgICAgICAgIChrZXkgaW4gdGVtcGxhdGVDb250ZXh0KSAmJlxuXHQgICAgICAgICAgICAocGxhY2Vob2xkZXIgIT09IHRlbXBsYXRlQ29udGV4dFtrZXldKSAvLyBmaXggIzE1IOmBv+WFjeiHquW3seS+nei1luiHquW3sVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICAvLyDlhYjorqHnrpfooqvlvJXnlKjnmoTlsZ7mgKflgLxcblx0ICAgICAgICAgICAgdGVtcGxhdGVDb250ZXh0W2tleV0gPSBIYW5kbGVyLmdlbih0ZW1wbGF0ZUNvbnRleHRba2V5XSwga2V5LCB7XG5cdCAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogb2JqLFxuXHQgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogdGVtcGxhdGVDb250ZXh0XG5cdCAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUNvbnRleHRba2V5XVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIOWmguaenOacquaJvuWIsO+8jOWImeWOn+agt+i/lOWbnlxuXHQgICAgICAgIGlmICghKGtleSBpbiBSYW5kb20pICYmICEobGtleSBpbiBSYW5kb20pICYmICEob2tleSBpbiBSYW5kb20pKSByZXR1cm4gcGxhY2Vob2xkZXJcblxuXHQgICAgICAgIC8vIOmAkuW9kuino+aekOWPguaVsOS4reeahOWNoOS9jeesplxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIENvbnN0YW50LlJFX1BMQUNFSE9MREVSLmV4ZWMoJycpXG5cdCAgICAgICAgICAgIGlmIChDb25zdGFudC5SRV9QTEFDRUhPTERFUi50ZXN0KHBhcmFtc1tpXSkpIHtcblx0ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEhhbmRsZXIucGxhY2Vob2xkZXIocGFyYW1zW2ldLCBvYmosIHRlbXBsYXRlQ29udGV4dCwgb3B0aW9ucylcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBoYW5kbGUgPSBSYW5kb21ba2V5XSB8fCBSYW5kb21bbGtleV0gfHwgUmFuZG9tW29rZXldXG5cdCAgICAgICAgc3dpdGNoIChVdGlsLnR5cGUoaGFuZGxlKSkge1xuXHQgICAgICAgICAgICBjYXNlICdhcnJheSc6XG5cdCAgICAgICAgICAgICAgICAvLyDoh6rliqjku47mlbDnu4TkuK3lj5bkuIDkuKrvvIzkvovlpoIgQGFyZWFzXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLnBpY2soaGFuZGxlKVxuXHQgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG5cdCAgICAgICAgICAgICAgICAvLyDmiafooYzljaDkvY3nrKbmlrnms5XvvIjlpKflpJrmlbDmg4XlhrXvvIlcblx0ICAgICAgICAgICAgICAgIGhhbmRsZS5vcHRpb25zID0gb3B0aW9uc1xuXHQgICAgICAgICAgICAgICAgdmFyIHJlID0gaGFuZGxlLmFwcGx5KFJhbmRvbSwgcGFyYW1zKVxuXHQgICAgICAgICAgICAgICAgaWYgKHJlID09PSB1bmRlZmluZWQpIHJlID0gJycgLy8g5Zug5Li65piv5Zyo5a2X56ym5Liy5Lit77yM5omA5Lul6buY6K6k5Li656m65a2X56ym5Liy44CCXG5cdCAgICAgICAgICAgICAgICBkZWxldGUgaGFuZGxlLm9wdGlvbnNcblx0ICAgICAgICAgICAgICAgIHJldHVybiByZVxuXHQgICAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBnZXRWYWx1ZUJ5S2V5UGF0aDogZnVuY3Rpb24oa2V5LCBvcHRpb25zKSB7XG5cdCAgICAgICAgdmFyIG9yaWdpbmFsS2V5ID0ga2V5XG5cdCAgICAgICAgdmFyIGtleVBhdGhQYXJ0cyA9IHRoaXMuc3BsaXRQYXRoVG9BcnJheShrZXkpXG5cdCAgICAgICAgdmFyIGFic29sdXRlUGF0aFBhcnRzID0gW11cblxuXHQgICAgICAgIC8vIOe7neWvuei3r+W+hFxuXHQgICAgICAgIGlmIChrZXkuY2hhckF0KDApID09PSAnLycpIHtcblx0ICAgICAgICAgICAgYWJzb2x1dGVQYXRoUGFydHMgPSBbb3B0aW9ucy5jb250ZXh0LnBhdGhbMF1dLmNvbmNhdChcblx0ICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsaXplUGF0aChrZXlQYXRoUGFydHMpXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAvLyDnm7jlr7not6/lvoRcblx0ICAgICAgICAgICAgaWYgKGtleVBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgICAgICAgICBhYnNvbHV0ZVBhdGhQYXJ0cyA9IG9wdGlvbnMuY29udGV4dC5wYXRoLnNsaWNlKDApXG5cdCAgICAgICAgICAgICAgICBhYnNvbHV0ZVBhdGhQYXJ0cy5wb3AoKVxuXHQgICAgICAgICAgICAgICAgYWJzb2x1dGVQYXRoUGFydHMgPSB0aGlzLm5vcm1hbGl6ZVBhdGgoXG5cdCAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVQYXRoUGFydHMuY29uY2F0KGtleVBhdGhQYXJ0cylcblx0ICAgICAgICAgICAgICAgIClcblxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAga2V5ID0ga2V5UGF0aFBhcnRzW2tleVBhdGhQYXJ0cy5sZW5ndGggLSAxXVxuXHQgICAgICAgICAgICB2YXIgY3VycmVudENvbnRleHQgPSBvcHRpb25zLmNvbnRleHQucm9vdFxuXHQgICAgICAgICAgICB2YXIgdGVtcGxhdGVDdXJyZW50Q29udGV4dCA9IG9wdGlvbnMuY29udGV4dC50ZW1wbGF0ZVJvb3Rcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhYnNvbHV0ZVBhdGhQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0ID0gY3VycmVudENvbnRleHRbYWJzb2x1dGVQYXRoUGFydHNbaV1dXG5cdCAgICAgICAgICAgICAgICB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0ID0gdGVtcGxhdGVDdXJyZW50Q29udGV4dFthYnNvbHV0ZVBhdGhQYXJ0c1tpXV1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyDlvJXnlKjnmoTlgLzlt7Lnu4/orqHnrpflpb1cblx0ICAgICAgICAgICAgaWYgKGN1cnJlbnRDb250ZXh0ICYmIChrZXkgaW4gY3VycmVudENvbnRleHQpKSByZXR1cm4gY3VycmVudENvbnRleHRba2V5XVxuXHQgICAgXG5cdCAgICAgICAgICAgIC8vIOWwmuacquiuoeeul++8jOmAkuW9kuW8leeUqOaVsOaNruaooeadv+S4reeahOWxnuaAp1xuXHQgICAgICAgICAgICBpZiAodGVtcGxhdGVDdXJyZW50Q29udGV4dCAmJlxuXHQgICAgICAgICAgICAgICAgKHR5cGVvZiB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0ID09PSAnb2JqZWN0JykgJiZcblx0ICAgICAgICAgICAgICAgIChrZXkgaW4gdGVtcGxhdGVDdXJyZW50Q29udGV4dCkgJiZcblx0ICAgICAgICAgICAgICAgIChvcmlnaW5hbEtleSAhPT0gdGVtcGxhdGVDdXJyZW50Q29udGV4dFtrZXldKSAvLyBmaXggIzE1IOmBv+WFjeiHquW3seS+nei1luiHquW3sVxuXHQgICAgICAgICAgICApIHtcblx0ICAgICAgICAgICAgICAgIC8vIOWFiOiuoeeul+iiq+W8leeUqOeahOWxnuaAp+WAvFxuXHQgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dFtrZXldID0gSGFuZGxlci5nZW4odGVtcGxhdGVDdXJyZW50Q29udGV4dFtrZXldLCBrZXksIHtcblx0ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogY3VycmVudENvbnRleHQsXG5cdCAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDdXJyZW50Q29udGV4dDogdGVtcGxhdGVDdXJyZW50Q29udGV4dFxuXHQgICAgICAgICAgICAgICAgfSlcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUN1cnJlbnRDb250ZXh0W2tleV1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gY2F0Y2goZXJyKSB7IH1cblxuXHQgICAgICAgIHJldHVybiAnQCcgKyBrZXlQYXRoUGFydHMuam9pbignLycpXG5cdCAgICB9LFxuXHQgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2tpc3N5dGVhbS9raXNzeS9ibG9iL21hc3Rlci9zcmMvcGF0aC9zcmMvcGF0aC5qc1xuXHQgICAgbm9ybWFsaXplUGF0aDogZnVuY3Rpb24ocGF0aFBhcnRzKSB7XG5cdCAgICAgICAgdmFyIG5ld1BhdGhQYXJ0cyA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoUGFydHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgc3dpdGNoIChwYXRoUGFydHNbaV0pIHtcblx0ICAgICAgICAgICAgICAgIGNhc2UgJy4uJzpcblx0ICAgICAgICAgICAgICAgICAgICBuZXdQYXRoUGFydHMucG9wKClcblx0ICAgICAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnLic6XG5cdCAgICAgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICAgICAgbmV3UGF0aFBhcnRzLnB1c2gocGF0aFBhcnRzW2ldKVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBuZXdQYXRoUGFydHNcblx0ICAgIH0sXG5cdCAgICBzcGxpdFBhdGhUb0FycmF5OiBmdW5jdGlvbihwYXRoKSB7XG5cdCAgICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuXHQgICAgICAgIGlmICghcGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIHBhcnRzID0gcGFydHMuc2xpY2UoMCwgLTEpXG5cdCAgICAgICAgaWYgKCFwYXJ0c1swXSkgcGFydHMgPSBwYXJ0cy5zbGljZSgxKVxuXHQgICAgICAgIHJldHVybiBwYXJ0cztcblx0ICAgIH1cblx0fSlcblxuXHRtb2R1bGUuZXhwb3J0cyA9IEhhbmRsZXJcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lypcblx0ICAgICMjIENvbnN0YW50XG5cblx0ICAgIOW4uOmHj+mbhuWQiOOAglxuXHQgKi9cblx0Lypcblx0ICAgIFJFX0tFWVxuXHQgICAgICAgICduYW1lfG1pbi1tYXgnOiB2YWx1ZVxuXHQgICAgICAgICduYW1lfGNvdW50JzogdmFsdWVcblx0ICAgICAgICAnbmFtZXxtaW4tbWF4LmRtaW4tZG1heCc6IHZhbHVlXG5cdCAgICAgICAgJ25hbWV8bWluLW1heC5kY291bnQnOiB2YWx1ZVxuXHQgICAgICAgICduYW1lfGNvdW50LmRtaW4tZG1heCc6IHZhbHVlXG5cdCAgICAgICAgJ25hbWV8Y291bnQuZGNvdW50JzogdmFsdWVcblx0ICAgICAgICAnbmFtZXwrc3RlcCc6IHZhbHVlXG5cblx0ICAgICAgICAxIG5hbWUsIDIgc3RlcCwgMyByYW5nZSBbIG1pbiwgbWF4IF0sIDQgZHJhbmdlIFsgZG1pbiwgZG1heCBdXG5cblx0ICAgIFJFX1BMQUNFSE9MREVSXG5cdCAgICAgICAgcGxhY2Vob2xkZXIoKilcblxuXHQgICAgW+ato+WImeafpeeci+W3peWFt10oaHR0cDovL3d3dy5yZWdleHBlci5jb20vKVxuXG5cdCAgICAjMjYg55Sf5oiQ6KeE5YiZIOaUr+aMgSDotJ/mlbDvvIzkvovlpoIgbnVtYmVyfC0xMDAtMTAwXG5cdCovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgR1VJRDogMSxcblx0ICAgIFJFX0tFWTogLyguKylcXHwoPzpcXCsoXFxkKyl8KFtcXCtcXC1dP1xcZCstP1tcXCtcXC1dP1xcZCopPyg/OlxcLihcXGQrLT9cXGQqKSk/KS8sXG5cdCAgICBSRV9SQU5HRTogLyhbXFwrXFwtXT9cXGQrKS0/KFtcXCtcXC1dP1xcZCspPy8sXG5cdCAgICBSRV9QTEFDRUhPTERFUjogL1xcXFwqQChbXkAjJSYoKVxcP1xcc10rKSg/OlxcKCguKj8pXFwpKT8vZ1xuXHQgICAgLy8gL1xcXFwqQChbXkAjJSYoKVxcP1xcc1xcL1xcLl0rKSg/OlxcKCguKj8pXFwpKT8vZ1xuXHQgICAgLy8gUkVfSU5ERVg6IC9eaW5kZXgkLyxcblx0ICAgIC8vIFJFX0tFWTogL15rZXkkL1xuXHR9XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBVdGlsaXRpZXNcblx0Ki9cblx0dmFyIFV0aWwgPSB7fVxuXG5cdFV0aWwuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKCkge1xuXHQgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSxcblx0ICAgICAgICBpID0gMSxcblx0ICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHQgICAgICAgIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY2xvbmVcblxuXHQgICAgaWYgKGxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIHRhcmdldCA9IHRoaXNcblx0ICAgICAgICBpID0gMFxuXHQgICAgfVxuXG5cdCAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1tpXVxuXHQgICAgICAgIGlmICghb3B0aW9ucykgY29udGludWVcblxuXHQgICAgICAgIGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG5cdCAgICAgICAgICAgIHNyYyA9IHRhcmdldFtuYW1lXVxuXHQgICAgICAgICAgICBjb3B5ID0gb3B0aW9uc1tuYW1lXVxuXG5cdCAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGNvcHkpIGNvbnRpbnVlXG5cdCAgICAgICAgICAgIGlmIChjb3B5ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG5cblx0ICAgICAgICAgICAgaWYgKFV0aWwuaXNBcnJheShjb3B5KSB8fCBVdGlsLmlzT2JqZWN0KGNvcHkpKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KGNvcHkpKSBjbG9uZSA9IHNyYyAmJiBVdGlsLmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdXG5cdCAgICAgICAgICAgICAgICBpZiAoVXRpbC5pc09iamVjdChjb3B5KSkgY2xvbmUgPSBzcmMgJiYgVXRpbC5pc09iamVjdChzcmMpID8gc3JjIDoge31cblxuXHQgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gVXRpbC5leHRlbmQoY2xvbmUsIGNvcHkpXG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBjb3B5XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiB0YXJnZXRcblx0fVxuXG5cdFV0aWwuZWFjaCA9IGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuXHQgICAgdmFyIGksIGtleVxuXHQgICAgaWYgKHRoaXMudHlwZShvYmopID09PSAnbnVtYmVyJykge1xuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYmo7IGkrKykge1xuXHQgICAgICAgICAgICBpdGVyYXRvcihpLCBpKVxuXHQgICAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHtcblx0ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKSA9PT0gZmFsc2UpIGJyZWFrXG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcblx0ICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKSA9PT0gZmFsc2UpIGJyZWFrXG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9XG5cblx0VXRpbC50eXBlID0gZnVuY3Rpb24gdHlwZShvYmopIHtcblx0ICAgIHJldHVybiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSA/IFN0cmluZyhvYmopIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2goL1xcW29iamVjdCAoXFx3KylcXF0vKVsxXS50b0xvd2VyQ2FzZSgpXG5cdH1cblxuXHRVdGlsLmVhY2goJ1N0cmluZyBPYmplY3QgQXJyYXkgUmVnRXhwIEZ1bmN0aW9uJy5zcGxpdCgnICcpLCBmdW5jdGlvbih2YWx1ZSkge1xuXHQgICAgVXRpbFsnaXMnICsgdmFsdWVdID0gZnVuY3Rpb24ob2JqKSB7XG5cdCAgICAgICAgcmV0dXJuIFV0aWwudHlwZShvYmopID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpXG5cdCAgICB9XG5cdH0pXG5cblx0VXRpbC5pc09iamVjdE9yQXJyYXkgPSBmdW5jdGlvbih2YWx1ZSkge1xuXHQgICAgcmV0dXJuIFV0aWwuaXNPYmplY3QodmFsdWUpIHx8IFV0aWwuaXNBcnJheSh2YWx1ZSlcblx0fVxuXG5cdFV0aWwuaXNOdW1lcmljID0gZnVuY3Rpb24odmFsdWUpIHtcblx0ICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpICYmIGlzRmluaXRlKHZhbHVlKVxuXHR9XG5cblx0VXRpbC5rZXlzID0gZnVuY3Rpb24ob2JqKSB7XG5cdCAgICB2YXIga2V5cyA9IFtdO1xuXHQgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuXHQgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkga2V5cy5wdXNoKGtleSlcblx0ICAgIH1cblx0ICAgIHJldHVybiBrZXlzO1xuXHR9XG5cdFV0aWwudmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG5cdCAgICB2YXIgdmFsdWVzID0gW107XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG5cdCAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB2YWx1ZXMucHVzaChvYmpba2V5XSlcblx0ICAgIH1cblx0ICAgIHJldHVybiB2YWx1ZXM7XG5cdH1cblxuXHQvKlxuXHQgICAgIyMjIE1vY2suaGVyZWRvYyhmbilcblxuXHQgICAgKiBNb2NrLmhlcmVkb2MoZm4pXG5cblx0ICAgIOS7peebtOinguOAgeWuieWFqOeahOaWueW8j+S5puWGme+8iOWkmuihjO+8iUhUTUwg5qih5p2/44CCXG5cblx0ICAgICoq5L2/55So56S65L6LKirlpoLkuIvmiYDnpLrvvJpcblxuXHQgICAgICAgIHZhciB0cGwgPSBNb2NrLmhlcmVkb2MoZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIC8qIVxuXHQgICAgICAgIHt7ZW1haWx9fXt7YWdlfX1cblx0ICAgICAgICA8IS0tIE1vY2sgeyBcblx0ICAgICAgICAgICAgZW1haWw6ICdARU1BSUwnLFxuXHQgICAgICAgICAgICBhZ2U6ICdASU5UKDEsMTAwKSdcblx0ICAgICAgICB9IC0tPlxuXHQgICAgICAgICAgICAqXFwvXG5cdCAgICAgICAgfSlcblx0ICAgIFxuXHQgICAgKirnm7jlhbPpmIXor7sqKlxuXHQgICAgKiBbQ3JlYXRpbmcgbXVsdGlsaW5lIHN0cmluZ3MgaW4gSmF2YVNjcmlwdF0oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84MDUxMDcvY3JlYXRpbmctbXVsdGlsaW5lLXN0cmluZ3MtaW4tamF2YXNjcmlwdCnjgIFcblx0Ki9cblx0VXRpbC5oZXJlZG9jID0gZnVuY3Rpb24gaGVyZWRvYyhmbikge1xuXHQgICAgLy8gMS4g56e76Zmk6LW35aeL55qEIGZ1bmN0aW9uKCl7IC8qIVxuXHQgICAgLy8gMi4g56e76Zmk5pyr5bC+55qEICovIH1cblx0ICAgIC8vIDMuIOenu+mZpOi1t+Wni+WSjOacq+WwvueahOepuuagvFxuXHQgICAgcmV0dXJuIGZuLnRvU3RyaW5nKClcblx0ICAgICAgICAucmVwbGFjZSgvXlteXFwvXStcXC9cXCohPy8sICcnKVxuXHQgICAgICAgIC5yZXBsYWNlKC9cXCpcXC9bXlxcL10rJC8sICcnKVxuXHQgICAgICAgIC5yZXBsYWNlKC9eW1xcc1xceEEwXSsvLCAnJykucmVwbGFjZSgvW1xcc1xceEEwXSskLywgJycpIC8vIC50cmltKClcblx0fVxuXG5cdFV0aWwubm9vcCA9IGZ1bmN0aW9uKCkge31cblxuXHRtb2R1bGUuZXhwb3J0cyA9IFV0aWxcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0XHQjIyBQYXJzZXJcblxuXHRcdOino+aekOaVsOaNruaooeadv++8iOWxnuaAp+WQjemDqOWIhu+8ieOAglxuXG5cdFx0KiBQYXJzZXIucGFyc2UoIG5hbWUgKVxuXHRcdFx0XG5cdFx0XHRgYGBqc29uXG5cdFx0XHR7XG5cdFx0XHRcdHBhcmFtZXRlcnM6IFsgbmFtZSwgaW5jLCByYW5nZSwgZGVjaW1hbCBdLFxuXHRcdFx0XHRybmFnZTogWyBtaW4gLCBtYXggXSxcblxuXHRcdFx0XHRtaW46IG1pbixcblx0XHRcdFx0bWF4OiBtYXgsXG5cdFx0XHRcdGNvdW50IDogY291bnQsXG5cblx0XHRcdFx0ZGVjaW1hbDogZGVjaW1hbCxcblx0XHRcdFx0ZG1pbjogZG1pbixcblx0XHRcdFx0ZG1heDogZG1heCxcblx0XHRcdFx0ZGNvdW50OiBkY291bnRcblx0XHRcdH1cblx0XHRcdGBgYFxuXHQgKi9cblxuXHR2YXIgQ29uc3RhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXG5cdHZhciBSYW5kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpXG5cblx0LyoganNoaW50IC1XMDQxICovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHRcdHBhcnNlOiBmdW5jdGlvbihuYW1lKSB7XG5cdFx0XHRuYW1lID0gbmFtZSA9PSB1bmRlZmluZWQgPyAnJyA6IChuYW1lICsgJycpXG5cblx0XHRcdHZhciBwYXJhbWV0ZXJzID0gKG5hbWUgfHwgJycpLm1hdGNoKENvbnN0YW50LlJFX0tFWSlcblxuXHRcdFx0dmFyIHJhbmdlID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzWzNdICYmIHBhcmFtZXRlcnNbM10ubWF0Y2goQ29uc3RhbnQuUkVfUkFOR0UpXG5cdFx0XHR2YXIgbWluID0gcmFuZ2UgJiYgcmFuZ2VbMV0gJiYgcGFyc2VJbnQocmFuZ2VbMV0sIDEwKSAvLyB8fCAxXG5cdFx0XHR2YXIgbWF4ID0gcmFuZ2UgJiYgcmFuZ2VbMl0gJiYgcGFyc2VJbnQocmFuZ2VbMl0sIDEwKSAvLyB8fCAxXG5cdFx0XHRcdC8vIHJlcGVhdCB8fCBtaW4tbWF4IHx8IDFcblx0XHRcdFx0Ly8gdmFyIGNvdW50ID0gcmFuZ2UgPyAhcmFuZ2VbMl0gJiYgcGFyc2VJbnQocmFuZ2VbMV0sIDEwKSB8fCBSYW5kb20uaW50ZWdlcihtaW4sIG1heCkgOiAxXG5cdFx0XHR2YXIgY291bnQgPSByYW5nZSA/ICFyYW5nZVsyXSA/IHBhcnNlSW50KHJhbmdlWzFdLCAxMCkgOiBSYW5kb20uaW50ZWdlcihtaW4sIG1heCkgOiB1bmRlZmluZWRcblxuXHRcdFx0dmFyIGRlY2ltYWwgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnNbNF0gJiYgcGFyYW1ldGVyc1s0XS5tYXRjaChDb25zdGFudC5SRV9SQU5HRSlcblx0XHRcdHZhciBkbWluID0gZGVjaW1hbCAmJiBkZWNpbWFsWzFdICYmIHBhcnNlSW50KGRlY2ltYWxbMV0sIDEwKSAvLyB8fCAwLFxuXHRcdFx0dmFyIGRtYXggPSBkZWNpbWFsICYmIGRlY2ltYWxbMl0gJiYgcGFyc2VJbnQoZGVjaW1hbFsyXSwgMTApIC8vIHx8IDAsXG5cdFx0XHRcdC8vIGludCB8fCBkbWluLWRtYXggfHwgMFxuXHRcdFx0dmFyIGRjb3VudCA9IGRlY2ltYWwgPyAhZGVjaW1hbFsyXSAmJiBwYXJzZUludChkZWNpbWFsWzFdLCAxMCkgfHwgUmFuZG9tLmludGVnZXIoZG1pbiwgZG1heCkgOiB1bmRlZmluZWRcblxuXHRcdFx0dmFyIHJlc3VsdCA9IHtcblx0XHRcdFx0Ly8gMSBuYW1lLCAyIGluYywgMyByYW5nZSwgNCBkZWNpbWFsXG5cdFx0XHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG5cdFx0XHRcdC8vIDEgbWluLCAyIG1heFxuXHRcdFx0XHRyYW5nZTogcmFuZ2UsXG5cdFx0XHRcdG1pbjogbWluLFxuXHRcdFx0XHRtYXg6IG1heCxcblx0XHRcdFx0Ly8gbWluLW1heFxuXHRcdFx0XHRjb3VudDogY291bnQsXG5cdFx0XHRcdC8vIOaYr+WQpuaciSBkZWNpbWFsXG5cdFx0XHRcdGRlY2ltYWw6IGRlY2ltYWwsXG5cdFx0XHRcdGRtaW46IGRtaW4sXG5cdFx0XHRcdGRtYXg6IGRtYXgsXG5cdFx0XHRcdC8vIGRtaW4tZGltYXhcblx0XHRcdFx0ZGNvdW50OiBkY291bnRcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgciBpbiByZXN1bHQpIHtcblx0XHRcdFx0aWYgKHJlc3VsdFtyXSAhPSB1bmRlZmluZWQpIHJldHVybiByZXN1bHRcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHt9XG5cdFx0fVxuXHR9XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qXG5cdCAgICAjIyBNb2NrLlJhbmRvbVxuXHQgICAgXG5cdCAgICDlt6XlhbfnsbvvvIznlKjkuo7nlJ/miJDlkITnp43pmo/mnLrmlbDmja7jgIJcblx0Ki9cblxuXHR2YXIgVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMylcblxuXHR2YXIgUmFuZG9tID0ge1xuXHQgICAgZXh0ZW5kOiBVdGlsLmV4dGVuZFxuXHR9XG5cblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDYpKVxuXHRSYW5kb20uZXh0ZW5kKF9fd2VicGFja19yZXF1aXJlX18oNykpXG5cdFJhbmRvbS5leHRlbmQoX193ZWJwYWNrX3JlcXVpcmVfXyg4KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSlcblx0UmFuZG9tLmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSlcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFJhbmRvbVxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKlxuXHQgICAgIyMgQmFzaWNzXG5cdCovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py655qE5biD5bCU5YC844CCXG5cdCAgICBib29sZWFuOiBmdW5jdGlvbihtaW4sIG1heCwgY3VyKSB7XG5cdCAgICAgICAgaWYgKGN1ciAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgIG1pbiA9IHR5cGVvZiBtaW4gIT09ICd1bmRlZmluZWQnICYmICFpc05hTihtaW4pID8gcGFyc2VJbnQobWluLCAxMCkgOiAxXG5cdCAgICAgICAgICAgIG1heCA9IHR5cGVvZiBtYXggIT09ICd1bmRlZmluZWQnICYmICFpc05hTihtYXgpID8gcGFyc2VJbnQobWF4LCAxMCkgOiAxXG5cdCAgICAgICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpID4gMS4wIC8gKG1pbiArIG1heCkgKiBtaW4gPyAhY3VyIDogY3VyXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgPj0gMC41XG5cdCAgICB9LFxuXHQgICAgYm9vbDogZnVuY3Rpb24obWluLCBtYXgsIGN1cikge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmJvb2xlYW4obWluLCBtYXgsIGN1cilcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57kuIDkuKrpmo/mnLrnmoToh6rnhLbmlbDvvIjlpKfkuo7nrYnkuo4gMCDnmoTmlbTmlbDvvInjgIJcblx0ICAgIG5hdHVyYWw6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgbWluID0gdHlwZW9mIG1pbiAhPT0gJ3VuZGVmaW5lZCcgPyBwYXJzZUludChtaW4sIDEwKSA6IDBcblx0ICAgICAgICBtYXggPSB0eXBlb2YgbWF4ICE9PSAndW5kZWZpbmVkJyA/IHBhcnNlSW50KG1heCwgMTApIDogOTAwNzE5OTI1NDc0MDk5MiAvLyAyXjUzXG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pblxuXHQgICAgfSxcblx0ICAgIC8vIOi/lOWbnuS4gOS4qumaj+acuueahOaVtOaVsOOAglxuXHQgICAgaW50ZWdlcjogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICBtaW4gPSB0eXBlb2YgbWluICE9PSAndW5kZWZpbmVkJyA/IHBhcnNlSW50KG1pbiwgMTApIDogLTkwMDcxOTkyNTQ3NDA5OTJcblx0ICAgICAgICBtYXggPSB0eXBlb2YgbWF4ICE9PSAndW5kZWZpbmVkJyA/IHBhcnNlSW50KG1heCwgMTApIDogOTAwNzE5OTI1NDc0MDk5MiAvLyAyXjUzXG5cdCAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pblxuXHQgICAgfSxcblx0ICAgIGludDogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5pbnRlZ2VyKG1pbiwgbWF4KVxuXHQgICAgfSxcblx0ICAgIC8vIOi/lOWbnuS4gOS4qumaj+acuueahOa1rueCueaVsOOAglxuXHQgICAgZmxvYXQ6IGZ1bmN0aW9uKG1pbiwgbWF4LCBkbWluLCBkbWF4KSB7XG5cdCAgICAgICAgZG1pbiA9IGRtaW4gPT09IHVuZGVmaW5lZCA/IDAgOiBkbWluXG5cdCAgICAgICAgZG1pbiA9IE1hdGgubWF4KE1hdGgubWluKGRtaW4sIDE3KSwgMClcblx0ICAgICAgICBkbWF4ID0gZG1heCA9PT0gdW5kZWZpbmVkID8gMTcgOiBkbWF4XG5cdCAgICAgICAgZG1heCA9IE1hdGgubWF4KE1hdGgubWluKGRtYXgsIDE3KSwgMClcblx0ICAgICAgICB2YXIgcmV0ID0gdGhpcy5pbnRlZ2VyKG1pbiwgbWF4KSArICcuJztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgZGNvdW50ID0gdGhpcy5uYXR1cmFsKGRtaW4sIGRtYXgpOyBpIDwgZGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgcmV0ICs9IChcblx0ICAgICAgICAgICAgICAgIC8vIOacgOWQjuS4gOS9jeS4jeiDveS4uiAw77ya5aaC5p6c5pyA5ZCO5LiA5L2N5Li6IDDvvIzkvJrooqsgSlMg5byV5pOO5b+955Wl5o6J44CCXG5cdCAgICAgICAgICAgICAgICAoaSA8IGRjb3VudCAtIDEpID8gdGhpcy5jaGFyYWN0ZXIoJ251bWJlcicpIDogdGhpcy5jaGFyYWN0ZXIoJzEyMzQ1Njc4OScpXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocmV0LCAxMClcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57kuIDkuKrpmo/mnLrlrZfnrKbjgIJcblx0ICAgIGNoYXJhY3RlcjogZnVuY3Rpb24ocG9vbCkge1xuXHQgICAgICAgIHZhciBwb29scyA9IHtcblx0ICAgICAgICAgICAgbG93ZXI6ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG5cdCAgICAgICAgICAgIHVwcGVyOiAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonLFxuXHQgICAgICAgICAgICBudW1iZXI6ICcwMTIzNDU2Nzg5Jyxcblx0ICAgICAgICAgICAgc3ltYm9sOiAnIUAjJCVeJiooKVtdJ1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwb29scy5hbHBoYSA9IHBvb2xzLmxvd2VyICsgcG9vbHMudXBwZXJcblx0ICAgICAgICBwb29sc1sndW5kZWZpbmVkJ10gPSBwb29scy5sb3dlciArIHBvb2xzLnVwcGVyICsgcG9vbHMubnVtYmVyICsgcG9vbHMuc3ltYm9sXG5cblx0ICAgICAgICBwb29sID0gcG9vbHNbKCcnICsgcG9vbCkudG9Mb3dlckNhc2UoKV0gfHwgcG9vbFxuXHQgICAgICAgIHJldHVybiBwb29sLmNoYXJBdCh0aGlzLm5hdHVyYWwoMCwgcG9vbC5sZW5ndGggLSAxKSlcblx0ICAgIH0sXG5cdCAgICBjaGFyOiBmdW5jdGlvbihwb29sKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyKHBvb2wpXG5cdCAgICB9LFxuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py65a2X56ym5Liy44CCXG5cdCAgICBzdHJpbmc6IGZ1bmN0aW9uKHBvb2wsIG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlblxuXHQgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICBjYXNlIDA6IC8vICgpXG5cdCAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLm5hdHVyYWwoMywgNylcblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgMTogLy8gKCBsZW5ndGggKVxuXHQgICAgICAgICAgICAgICAgbGVuID0gcG9vbFxuXHQgICAgICAgICAgICAgICAgcG9vbCA9IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAyOlxuXHQgICAgICAgICAgICAgICAgLy8gKCBwb29sLCBsZW5ndGggKVxuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gbWluXG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vICggbWluLCBtYXggKVxuXHQgICAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMubmF0dXJhbChwb29sLCBtaW4pXG5cdCAgICAgICAgICAgICAgICAgICAgcG9vbCA9IHVuZGVmaW5lZFxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAzOlxuXHQgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5uYXR1cmFsKG1pbiwgbWF4KVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgdGV4dCA9ICcnXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICB0ZXh0ICs9IHRoaXMuY2hhcmFjdGVyKHBvb2wpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIHRleHRcblx0ICAgIH0sXG5cdCAgICBzdHI6IGZ1bmN0aW9uKCAvKnBvb2wsIG1pbiwgbWF4Ki8gKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57kuIDkuKrmlbTlnovmlbDnu4TjgIJcblx0ICAgIHJhbmdlOiBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuXHQgICAgICAgIC8vIHJhbmdlKCBzdG9wIClcblx0ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSAxKSB7XG5cdCAgICAgICAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuXHQgICAgICAgICAgICBzdGFydCA9IDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIC8vIHJhbmdlKCBzdGFydCwgc3RvcCApXG5cdCAgICAgICAgc3RlcCA9IGFyZ3VtZW50c1syXSB8fCAxO1xuXG5cdCAgICAgICAgc3RhcnQgPSArc3RhcnRcblx0ICAgICAgICBzdG9wID0gK3N0b3Bcblx0ICAgICAgICBzdGVwID0gK3N0ZXBcblxuXHQgICAgICAgIHZhciBsZW4gPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG5cdCAgICAgICAgdmFyIGlkeCA9IDA7XG5cdCAgICAgICAgdmFyIHJhbmdlID0gbmV3IEFycmF5KGxlbik7XG5cblx0ICAgICAgICB3aGlsZSAoaWR4IDwgbGVuKSB7XG5cdCAgICAgICAgICAgIHJhbmdlW2lkeCsrXSA9IHN0YXJ0O1xuXHQgICAgICAgICAgICBzdGFydCArPSBzdGVwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiByYW5nZTtcblx0ICAgIH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKlxuXHQgICAgIyMgRGF0ZVxuXHQqL1xuXHR2YXIgcGF0dGVybkxldHRlcnMgPSB7XG5cdCAgICB5eXl5OiAnZ2V0RnVsbFllYXInLFxuXHQgICAgeXk6IGZ1bmN0aW9uKGRhdGUpIHtcblx0ICAgICAgICByZXR1cm4gKCcnICsgZGF0ZS5nZXRGdWxsWWVhcigpKS5zbGljZSgyKVxuXHQgICAgfSxcblx0ICAgIHk6ICd5eScsXG5cblx0ICAgIE1NOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgdmFyIG0gPSBkYXRlLmdldE1vbnRoKCkgKyAxXG5cdCAgICAgICAgcmV0dXJuIG0gPCAxMCA/ICcwJyArIG0gOiBtXG5cdCAgICB9LFxuXHQgICAgTTogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxXG5cdCAgICB9LFxuXG5cdCAgICBkZDogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHZhciBkID0gZGF0ZS5nZXREYXRlKClcblx0ICAgICAgICByZXR1cm4gZCA8IDEwID8gJzAnICsgZCA6IGRcblx0ICAgIH0sXG5cdCAgICBkOiAnZ2V0RGF0ZScsXG5cblx0ICAgIEhIOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKClcblx0ICAgICAgICByZXR1cm4gaCA8IDEwID8gJzAnICsgaCA6IGhcblx0ICAgIH0sXG5cdCAgICBIOiAnZ2V0SG91cnMnLFxuXHQgICAgaGg6IGZ1bmN0aW9uKGRhdGUpIHtcblx0ICAgICAgICB2YXIgaCA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyXG5cdCAgICAgICAgcmV0dXJuIGggPCAxMCA/ICcwJyArIGggOiBoXG5cdCAgICB9LFxuXHQgICAgaDogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHJldHVybiBkYXRlLmdldEhvdXJzKCkgJSAxMlxuXHQgICAgfSxcblxuXHQgICAgbW06IGZ1bmN0aW9uKGRhdGUpIHtcblx0ICAgICAgICB2YXIgbSA9IGRhdGUuZ2V0TWludXRlcygpXG5cdCAgICAgICAgcmV0dXJuIG0gPCAxMCA/ICcwJyArIG0gOiBtXG5cdCAgICB9LFxuXHQgICAgbTogJ2dldE1pbnV0ZXMnLFxuXG5cdCAgICBzczogZnVuY3Rpb24oZGF0ZSkge1xuXHQgICAgICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKClcblx0ICAgICAgICByZXR1cm4gcyA8IDEwID8gJzAnICsgcyA6IHNcblx0ICAgIH0sXG5cdCAgICBzOiAnZ2V0U2Vjb25kcycsXG5cblx0ICAgIFNTOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgdmFyIG1zID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKVxuXHQgICAgICAgIHJldHVybiBtcyA8IDEwICYmICcwMCcgKyBtcyB8fCBtcyA8IDEwMCAmJiAnMCcgKyBtcyB8fCBtc1xuXHQgICAgfSxcblx0ICAgIFM6ICdnZXRNaWxsaXNlY29uZHMnLFxuXG5cdCAgICBBOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ0FNJyA6ICdQTSdcblx0ICAgIH0sXG5cdCAgICBhOiBmdW5jdGlvbihkYXRlKSB7XG5cdCAgICAgICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ2FtJyA6ICdwbSdcblx0ICAgIH0sXG5cdCAgICBUOiAnZ2V0VGltZSdcblx0fVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICAgIC8vIOaXpeacn+WNoOS9jeespumbhuWQiOOAglxuXHQgICAgX3BhdHRlcm5MZXR0ZXJzOiBwYXR0ZXJuTGV0dGVycyxcblx0ICAgIC8vIOaXpeacn+WNoOS9jeespuato+WImeOAglxuXHQgICAgX3Jmb3JtYXQ6IG5ldyBSZWdFeHAoKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciByZSA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSBpbiBwYXR0ZXJuTGV0dGVycykgcmUucHVzaChpKVxuXHQgICAgICAgIHJldHVybiAnKCcgKyByZS5qb2luKCd8JykgKyAnKSdcblx0ICAgIH0pKCksICdnJyksXG5cdCAgICAvLyDmoLzlvI/ljJbml6XmnJ/jgIJcblx0ICAgIF9mb3JtYXREYXRlOiBmdW5jdGlvbihkYXRlLCBmb3JtYXQpIHtcblx0ICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UodGhpcy5fcmZvcm1hdCwgZnVuY3Rpb24gY3JlYXROZXdTdWJTdHJpbmcoJDAsIGZsYWcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXR0ZXJuTGV0dGVyc1tmbGFnXSA9PT0gJ2Z1bmN0aW9uJyA/IHBhdHRlcm5MZXR0ZXJzW2ZsYWddKGRhdGUpIDpcblx0ICAgICAgICAgICAgICAgIHBhdHRlcm5MZXR0ZXJzW2ZsYWddIGluIHBhdHRlcm5MZXR0ZXJzID8gY3JlYXROZXdTdWJTdHJpbmcoJDAsIHBhdHRlcm5MZXR0ZXJzW2ZsYWddKSA6XG5cdCAgICAgICAgICAgICAgICBkYXRlW3BhdHRlcm5MZXR0ZXJzW2ZsYWddXSgpXG5cdCAgICAgICAgfSlcblx0ICAgIH0sXG5cdCAgICAvLyDnlJ/miJDkuIDkuKrpmo/mnLrnmoQgRGF0ZSDlr7nosaHjgIJcblx0ICAgIF9yYW5kb21EYXRlOiBmdW5jdGlvbihtaW4sIG1heCkgeyAvLyBtaW4sIG1heFxuXHQgICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkID8gbmV3IERhdGUoMCkgOiBtaW5cblx0ICAgICAgICBtYXggPSBtYXggPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKCkgOiBtYXhcblx0ICAgICAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yYW5kb20oKSAqIChtYXguZ2V0VGltZSgpIC0gbWluLmdldFRpbWUoKSkpXG5cdCAgICB9LFxuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py655qE5pel5pyf5a2X56ym5Liy44CCXG5cdCAgICBkYXRlOiBmdW5jdGlvbihmb3JtYXQpIHtcblx0ICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJ3l5eXktTU0tZGQnXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdERhdGUodGhpcy5fcmFuZG9tRGF0ZSgpLCBmb3JtYXQpXG5cdCAgICB9LFxuXHQgICAgLy8g6L+U5Zue5LiA5Liq6ZqP5py655qE5pe26Ze05a2X56ym5Liy44CCXG5cdCAgICB0aW1lOiBmdW5jdGlvbihmb3JtYXQpIHtcblx0ICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJ0hIOm1tOnNzJ1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXREYXRlKHRoaXMuX3JhbmRvbURhdGUoKSwgZm9ybWF0KVxuXHQgICAgfSxcblx0ICAgIC8vIOi/lOWbnuS4gOS4qumaj+acuueahOaXpeacn+WSjOaXtumXtOWtl+espuS4suOAglxuXHQgICAgZGF0ZXRpbWU6IGZ1bmN0aW9uKGZvcm1hdCkge1xuXHQgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAneXl5eS1NTS1kZCBISDptbTpzcydcblx0ICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0RGF0ZSh0aGlzLl9yYW5kb21EYXRlKCksIGZvcm1hdClcblx0ICAgIH0sXG5cdCAgICAvLyDov5Tlm57lvZPliY3nmoTml6XmnJ/lkozml7bpl7TlrZfnrKbkuLLjgIJcblx0ICAgIG5vdzogZnVuY3Rpb24odW5pdCwgZm9ybWF0KSB7XG5cdCAgICAgICAgLy8gbm93KHVuaXQpIG5vdyhmb3JtYXQpXG5cdCAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICAgICAgLy8gbm93KGZvcm1hdClcblx0ICAgICAgICAgICAgaWYgKCEveWVhcnxtb250aHxkYXl8aG91cnxtaW51dGV8c2Vjb25kfHdlZWsvLnRlc3QodW5pdCkpIHtcblx0ICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuaXRcblx0ICAgICAgICAgICAgICAgIHVuaXQgPSAnJ1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHVuaXQgPSAodW5pdCB8fCAnJykudG9Mb3dlckNhc2UoKVxuXHQgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAneXl5eS1NTS1kZCBISDptbTpzcydcblxuXHQgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKVxuXG5cdCAgICAgICAgLyoganNoaW50IC1XMDg2ICovXG5cdCAgICAgICAgLy8g5Y+C6ICD6IeqIGh0dHA6Ly9tb21lbnRqcy5jbi9kb2NzLyMvbWFuaXB1bGF0aW5nL3N0YXJ0LW9mL1xuXHQgICAgICAgIHN3aXRjaCAodW5pdCkge1xuXHQgICAgICAgICAgICBjYXNlICd5ZWFyJzpcblx0ICAgICAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMClcblx0ICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuXHQgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpXG5cdCAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuXHQgICAgICAgICAgICBjYXNlICdkYXknOlxuXHQgICAgICAgICAgICAgICAgZGF0ZS5zZXRIb3VycygwKVxuXHQgICAgICAgICAgICBjYXNlICdob3VyJzpcblx0ICAgICAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcygwKVxuXHQgICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuXHQgICAgICAgICAgICAgICAgZGF0ZS5zZXRTZWNvbmRzKDApXG5cdCAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG5cdCAgICAgICAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcygwKVxuXHQgICAgICAgIH1cblx0ICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcblx0ICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG5cdCAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXREYXRlKGRhdGUsIGZvcm1hdClcblx0ICAgIH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogZ2xvYmFsIGRvY3VtZW50ICAqL1xuXHQvKlxuXHQgICAgIyMgSW1hZ2Vcblx0Ki9cblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgICAvLyDluLjop4HnmoTlub/lkYrlrr3pq5hcblx0ICAgIF9hZFNpemU6IFtcblx0ICAgICAgICAnMzAweDI1MCcsICcyNTB4MjUwJywgJzI0MHg0MDAnLCAnMzM2eDI4MCcsICcxODB4MTUwJyxcblx0ICAgICAgICAnNzIweDMwMCcsICc0Njh4NjAnLCAnMjM0eDYwJywgJzg4eDMxJywgJzEyMHg5MCcsXG5cdCAgICAgICAgJzEyMHg2MCcsICcxMjB4MjQwJywgJzEyNXgxMjUnLCAnNzI4eDkwJywgJzE2MHg2MDAnLFxuXHQgICAgICAgICcxMjB4NjAwJywgJzMwMHg2MDAnXG5cdCAgICBdLFxuXHQgICAgLy8g5bi46KeB55qE5bGP5bmV5a696auYXG5cdCAgICBfc2NyZWVuU2l6ZTogW1xuXHQgICAgICAgICczMjB4MjAwJywgJzMyMHgyNDAnLCAnNjQweDQ4MCcsICc4MDB4NDgwJywgJzgwMHg0ODAnLFxuXHQgICAgICAgICcxMDI0eDYwMCcsICcxMDI0eDc2OCcsICcxMjgweDgwMCcsICcxNDQweDkwMCcsICcxOTIweDEyMDAnLFxuXHQgICAgICAgICcyNTYweDE2MDAnXG5cdCAgICBdLFxuXHQgICAgLy8g5bi46KeB55qE6KeG6aKR5a696auYXG5cdCAgICBfdmlkZW9TaXplOiBbJzcyMHg0ODAnLCAnNzY4eDU3NicsICcxMjgweDcyMCcsICcxOTIweDEwODAnXSxcblx0ICAgIC8qXG5cdCAgICAgICAg55Sf5oiQ5LiA5Liq6ZqP5py655qE5Zu+54mH5Zyw5Z2A44CCXG5cblx0ICAgICAgICDmm7/ku6Plm77niYfmupBcblx0ICAgICAgICAgICAgaHR0cDovL2Zwb2ltZy5jb20vXG5cdCAgICAgICAg5Y+C6ICD6IeqIFxuXHQgICAgICAgICAgICBodHRwOi8vcmVuc2FubmluZy5pdGV5ZS5jb20vYmxvZy8xOTMzMzEwXG5cdCAgICAgICAgICAgIGh0dHA6Ly9jb2RlLnR1dHNwbHVzLmNvbS9hcnRpY2xlcy90aGUtdG9wLTgtcGxhY2Vob2xkZXJzLWZvci13ZWItZGVzaWduZXJzLS1uZXQtMTk0ODVcblx0ICAgICovXG5cdCAgICBpbWFnZTogZnVuY3Rpb24oc2l6ZSwgYmFja2dyb3VuZCwgZm9yZWdyb3VuZCwgZm9ybWF0LCB0ZXh0KSB7XG5cdCAgICAgICAgLy8gUmFuZG9tLmltYWdlKCBzaXplLCBiYWNrZ3JvdW5kLCBmb3JlZ3JvdW5kLCB0ZXh0IClcblx0ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkge1xuXHQgICAgICAgICAgICB0ZXh0ID0gZm9ybWF0XG5cdCAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZFxuXHQgICAgICAgIH1cblx0ICAgICAgICAvLyBSYW5kb20uaW1hZ2UoIHNpemUsIGJhY2tncm91bmQsIHRleHQgKVxuXHQgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG5cdCAgICAgICAgICAgIHRleHQgPSBmb3JlZ3JvdW5kXG5cdCAgICAgICAgICAgIGZvcmVncm91bmQgPSB1bmRlZmluZWRcblx0ICAgICAgICB9XG5cdCAgICAgICAgLy8gUmFuZG9tLmltYWdlKClcblx0ICAgICAgICBpZiAoIXNpemUpIHNpemUgPSB0aGlzLnBpY2sodGhpcy5fYWRTaXplKVxuXG5cdCAgICAgICAgaWYgKGJhY2tncm91bmQgJiYgfmJhY2tncm91bmQuaW5kZXhPZignIycpKSBiYWNrZ3JvdW5kID0gYmFja2dyb3VuZC5zbGljZSgxKVxuXHQgICAgICAgIGlmIChmb3JlZ3JvdW5kICYmIH5mb3JlZ3JvdW5kLmluZGV4T2YoJyMnKSkgZm9yZWdyb3VuZCA9IGZvcmVncm91bmQuc2xpY2UoMSlcblxuXHQgICAgICAgIC8vIGh0dHA6Ly9kdW1teWltYWdlLmNvbS82MDB4NDAwL2NjMDBjYy80NzAwNDcucG5nJnRleHQ9aGVsbG9cblx0ICAgICAgICByZXR1cm4gJ2h0dHA6Ly9kdW1teWltYWdlLmNvbS8nICsgc2l6ZSArXG5cdCAgICAgICAgICAgIChiYWNrZ3JvdW5kID8gJy8nICsgYmFja2dyb3VuZCA6ICcnKSArXG5cdCAgICAgICAgICAgIChmb3JlZ3JvdW5kID8gJy8nICsgZm9yZWdyb3VuZCA6ICcnKSArXG5cdCAgICAgICAgICAgIChmb3JtYXQgPyAnLicgKyBmb3JtYXQgOiAnJykgK1xuXHQgICAgICAgICAgICAodGV4dCA/ICcmdGV4dD0nICsgdGV4dCA6ICcnKVxuXHQgICAgfSxcblx0ICAgIGltZzogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHQgICAgfSxcblxuXHQgICAgLypcblx0ICAgICAgICBCcmFuZENvbG9yc1xuXHQgICAgICAgIGh0dHA6Ly9icmFuZGNvbG9ycy5uZXQvXG5cdCAgICAgICAgQSBjb2xsZWN0aW9uIG9mIG1ham9yIGJyYW5kIGNvbG9yIGNvZGVzIGN1cmF0ZWQgYnkgR2FsZW4gR2lkbWFuLlxuXHQgICAgICAgIOWkp+eJjOWFrOWPuOeahOminOiJsumbhuWQiFxuXG5cdCAgICAgICAgLy8g6I635Y+W5ZOB54mM5ZKM6aKc6ImyXG5cdCAgICAgICAgJCgnaDInKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBpdGVtKXtcblx0ICAgICAgICAgICAgaXRlbSA9ICQoaXRlbSlcblx0ICAgICAgICAgICAgY29uc29sZS5sb2coJ1xcJycgKyBpdGVtLnRleHQoKSArICdcXCcnLCAnOicsICdcXCcnICsgaXRlbS5uZXh0KCkudGV4dCgpICsgJ1xcJycsICcsJylcblx0ICAgICAgICB9KVxuXHQgICAgKi9cblx0ICAgIF9icmFuZENvbG9yczoge1xuXHQgICAgICAgICc0b3JtYXQnOiAnI2ZiMGEyYScsXG5cdCAgICAgICAgJzUwMHB4JzogJyMwMmFkZWEnLFxuXHQgICAgICAgICdBYm91dC5tZSAoYmx1ZSknOiAnIzAwNDA1ZCcsXG5cdCAgICAgICAgJ0Fib3V0Lm1lICh5ZWxsb3cpJzogJyNmZmNjMzMnLFxuXHQgICAgICAgICdBZGR2b2NhdGUnOiAnI2ZmNjEzOCcsXG5cdCAgICAgICAgJ0Fkb2JlJzogJyNmZjAwMDAnLFxuXHQgICAgICAgICdBaW0nOiAnI2ZjZDIwYicsXG5cdCAgICAgICAgJ0FtYXpvbic6ICcjZTQ3OTExJyxcblx0ICAgICAgICAnQW5kcm9pZCc6ICcjYTRjNjM5Jyxcblx0ICAgICAgICAnQW5naWVcXCdzIExpc3QnOiAnIzdmYmIwMCcsXG5cdCAgICAgICAgJ0FPTCc6ICcjMDA2MGEzJyxcblx0ICAgICAgICAnQXRsYXNzaWFuJzogJyMwMDMzNjYnLFxuXHQgICAgICAgICdCZWhhbmNlJzogJyMwNTNlZmYnLFxuXHQgICAgICAgICdCaWcgQ2FydGVsJzogJyM5N2I1MzgnLFxuXHQgICAgICAgICdiaXRseSc6ICcjZWU2MTIzJyxcblx0ICAgICAgICAnQmxvZ2dlcic6ICcjZmM0ZjA4Jyxcblx0ICAgICAgICAnQm9laW5nJzogJyMwMDM5YTYnLFxuXHQgICAgICAgICdCb29raW5nLmNvbSc6ICcjMDAzNTgwJyxcblx0ICAgICAgICAnQ2FyYm9ubWFkZSc6ICcjNjEzODU0Jyxcblx0ICAgICAgICAnQ2hlZGRhcic6ICcjZmY3MjQzJyxcblx0ICAgICAgICAnQ29kZSBTY2hvb2wnOiAnIzNkNDk0NCcsXG5cdCAgICAgICAgJ0RlbGljaW91cyc6ICcjMjA1Y2MwJyxcblx0ICAgICAgICAnRGVsbCc6ICcjMzI4N2MxJyxcblx0ICAgICAgICAnRGVzaWdubW9vJzogJyNlNTRhNGYnLFxuXHQgICAgICAgICdEZXZpYW50YXJ0JzogJyM0ZTYyNTInLFxuXHQgICAgICAgICdEZXNpZ25lciBOZXdzJzogJyMyZDcyZGEnLFxuXHQgICAgICAgICdEZXZvdXInOiAnI2ZkMDAwMScsXG5cdCAgICAgICAgJ0RFV0FMVCc6ICcjZmViZDE3Jyxcblx0ICAgICAgICAnRGlzcXVzIChibHVlKSc6ICcjNTlhM2ZjJyxcblx0ICAgICAgICAnRGlzcXVzIChvcmFuZ2UpJzogJyNkYjcxMzInLFxuXHQgICAgICAgICdEcmliYmJsZSc6ICcjZWE0Yzg5Jyxcblx0ICAgICAgICAnRHJvcGJveCc6ICcjM2Q5YWU4Jyxcblx0ICAgICAgICAnRHJ1cGFsJzogJyMwYzc2YWInLFxuXHQgICAgICAgICdEdW5rZWQnOiAnIzJhMzIzYScsXG5cdCAgICAgICAgJ2VCYXknOiAnIzg5YzUwNycsXG5cdCAgICAgICAgJ0VtYmVyJzogJyNmMDVlMWInLFxuXHQgICAgICAgICdFbmdhZGdldCc6ICcjMDBiZGY2Jyxcblx0ICAgICAgICAnRW52YXRvJzogJyM1MjgwMzYnLFxuXHQgICAgICAgICdFdHN5JzogJyNlYjZkMjAnLFxuXHQgICAgICAgICdFdmVybm90ZSc6ICcjNWJhNTI1Jyxcblx0ICAgICAgICAnRmFiLmNvbSc6ICcjZGQwMDE3Jyxcblx0ICAgICAgICAnRmFjZWJvb2snOiAnIzNiNTk5OCcsXG5cdCAgICAgICAgJ0ZpcmVmb3gnOiAnI2U2NjAwMCcsXG5cdCAgICAgICAgJ0ZsaWNrciAoYmx1ZSknOiAnIzAwNjNkYycsXG5cdCAgICAgICAgJ0ZsaWNrciAocGluayknOiAnI2ZmMDA4NCcsXG5cdCAgICAgICAgJ0ZvcnJzdCc6ICcjNWI5YTY4Jyxcblx0ICAgICAgICAnRm91cnNxdWFyZSc6ICcjMjVhMGNhJyxcblx0ICAgICAgICAnR2FybWluJzogJyMwMDdjYzMnLFxuXHQgICAgICAgICdHZXRHbHVlJzogJyMyZDc1YTInLFxuXHQgICAgICAgICdHaW1tZWJhcic6ICcjZjcwMDc4Jyxcblx0ICAgICAgICAnR2l0SHViJzogJyMxNzE1MTUnLFxuXHQgICAgICAgICdHb29nbGUgQmx1ZSc6ICcjMDE0MGNhJyxcblx0ICAgICAgICAnR29vZ2xlIEdyZWVuJzogJyMxNmE2MWUnLFxuXHQgICAgICAgICdHb29nbGUgUmVkJzogJyNkZDE4MTInLFxuXHQgICAgICAgICdHb29nbGUgWWVsbG93JzogJyNmY2NhMDMnLFxuXHQgICAgICAgICdHb29nbGUrJzogJyNkZDRiMzknLFxuXHQgICAgICAgICdHcm9vdmVzaGFyayc6ICcjZjc3ZjAwJyxcblx0ICAgICAgICAnR3JvdXBvbic6ICcjODJiNTQ4Jyxcblx0ICAgICAgICAnSGFja2VyIE5ld3MnOiAnI2ZmNjYwMCcsXG5cdCAgICAgICAgJ0hlbGxvV2FsbGV0JzogJyMwMDg1Y2EnLFxuXHQgICAgICAgICdIZXJva3UgKGxpZ2h0KSc6ICcjYzdjNWU2Jyxcblx0ICAgICAgICAnSGVyb2t1IChkYXJrKSc6ICcjNjU2N2E1Jyxcblx0ICAgICAgICAnSG9vdFN1aXRlJzogJyMwMDMzNjYnLFxuXHQgICAgICAgICdIb3V6eic6ICcjNzNiYTM3Jyxcblx0ICAgICAgICAnSFRNTDUnOiAnI2VjNjIzMScsXG5cdCAgICAgICAgJ0lLRUEnOiAnI2ZmY2MzMycsXG5cdCAgICAgICAgJ0lNRGInOiAnI2YzY2UxMycsXG5cdCAgICAgICAgJ0luc3RhZ3JhbSc6ICcjM2Y3MjliJyxcblx0ICAgICAgICAnSW50ZWwnOiAnIzAwNzFjNScsXG5cdCAgICAgICAgJ0ludHVpdCc6ICcjMzY1ZWJmJyxcblx0ICAgICAgICAnS2lja3N0YXJ0ZXInOiAnIzc2Y2MxZScsXG5cdCAgICAgICAgJ2tpcHB0JzogJyNlMDM1MDAnLFxuXHQgICAgICAgICdLb2RlcnknOiAnIzAwYWY4MScsXG5cdCAgICAgICAgJ0xhc3RGTSc6ICcjYzMwMDBkJyxcblx0ICAgICAgICAnTGlua2VkSW4nOiAnIzBlNzZhOCcsXG5cdCAgICAgICAgJ0xpdmVzdHJlYW0nOiAnI2NmMDAwNScsXG5cdCAgICAgICAgJ0x1bW8nOiAnIzU3NjM5NicsXG5cdCAgICAgICAgJ01peHBhbmVsJzogJyNhMDg2ZDMnLFxuXHQgICAgICAgICdNZWV0dXAnOiAnI2U1MTkzNycsXG5cdCAgICAgICAgJ05va2lhJzogJyMxODM2OTMnLFxuXHQgICAgICAgICdOVklESUEnOiAnIzc2YjkwMCcsXG5cdCAgICAgICAgJ09wZXJhJzogJyNjYzBmMTYnLFxuXHQgICAgICAgICdQYXRoJzogJyNlNDFmMTEnLFxuXHQgICAgICAgICdQYXlQYWwgKGRhcmspJzogJyMxZTQ3N2EnLFxuXHQgICAgICAgICdQYXlQYWwgKGxpZ2h0KSc6ICcjM2I3YmJmJyxcblx0ICAgICAgICAnUGluYm9hcmQnOiAnIzAwMDBlNicsXG5cdCAgICAgICAgJ1BpbnRlcmVzdCc6ICcjYzgyMzJjJyxcblx0ICAgICAgICAnUGxheVN0YXRpb24nOiAnIzY2NWNiZScsXG5cdCAgICAgICAgJ1BvY2tldCc6ICcjZWU0MDU2Jyxcblx0ICAgICAgICAnUHJlemknOiAnIzMxOGJmZicsXG5cdCAgICAgICAgJ1B1c2hhJzogJyMwZjcxYjQnLFxuXHQgICAgICAgICdRdW9yYSc6ICcjYTgyNDAwJyxcblx0ICAgICAgICAnUVVPVEUuZm0nOiAnIzY2Y2VmZicsXG5cdCAgICAgICAgJ1JkaW8nOiAnIzAwOGZkNScsXG5cdCAgICAgICAgJ1JlYWRhYmlsaXR5JzogJyM5YzAwMDAnLFxuXHQgICAgICAgICdSZWQgSGF0JzogJyNjYzAwMDAnLFxuXHQgICAgICAgICdSZXNvdXJjZSc6ICcjN2ViNDAwJyxcblx0ICAgICAgICAnUm9ja3BhY2snOiAnIzBiYTZhYicsXG5cdCAgICAgICAgJ1Jvb24nOiAnIzYyYjBkOScsXG5cdCAgICAgICAgJ1JTUyc6ICcjZWU4MDJmJyxcblx0ICAgICAgICAnU2FsZXNmb3JjZSc6ICcjMTc5OGMxJyxcblx0ICAgICAgICAnU2Ftc3VuZyc6ICcjMGM0ZGEyJyxcblx0ICAgICAgICAnU2hvcGlmeSc6ICcjOTZiZjQ4Jyxcblx0ICAgICAgICAnU2t5cGUnOiAnIzAwYWZmMCcsXG5cdCAgICAgICAgJ1NuYWdham9iJzogJyNmNDdhMjAnLFxuXHQgICAgICAgICdTb2Z0b25pYyc6ICcjMDA4YWNlJyxcblx0ICAgICAgICAnU291bmRDbG91ZCc6ICcjZmY3NzAwJyxcblx0ICAgICAgICAnU3BhY2UgQm94JzogJyNmODY5NjAnLFxuXHQgICAgICAgICdTcG90aWZ5JzogJyM4MWI3MWEnLFxuXHQgICAgICAgICdTcHJpbnQnOiAnI2ZlZTEwMCcsXG5cdCAgICAgICAgJ1NxdWFyZXNwYWNlJzogJyMxMjEyMTInLFxuXHQgICAgICAgICdTdGFja092ZXJmbG93JzogJyNlZjgyMzYnLFxuXHQgICAgICAgICdTdGFwbGVzJzogJyNjYzAwMDAnLFxuXHQgICAgICAgICdTdGF0dXMgQ2hhcnQnOiAnI2Q3NTg0ZicsXG5cdCAgICAgICAgJ1N0cmlwZSc6ICcjMDA4Y2RkJyxcblx0ICAgICAgICAnU3R1ZHlCbHVlJzogJyMwMGFmZTEnLFxuXHQgICAgICAgICdTdHVtYmxlVXBvbic6ICcjZjc0NDI1Jyxcblx0ICAgICAgICAnVC1Nb2JpbGUnOiAnI2VhMGE4ZScsXG5cdCAgICAgICAgJ1RlY2hub3JhdGknOiAnIzQwYTgwMCcsXG5cdCAgICAgICAgJ1RoZSBOZXh0IFdlYic6ICcjZWY0NDIzJyxcblx0ICAgICAgICAnVHJlZWhvdXNlJzogJyM1Y2I4NjgnLFxuXHQgICAgICAgICdUcnVsaWEnOiAnIzVlYWIxZicsXG5cdCAgICAgICAgJ1R1bWJscic6ICcjMzQ1MjZmJyxcblx0ICAgICAgICAnVHdpdGNoLnR2JzogJyM2NDQxYTUnLFxuXHQgICAgICAgICdUd2l0dGVyJzogJyMwMGFjZWUnLFxuXHQgICAgICAgICdUWVBPMyc6ICcjZmY4NzAwJyxcblx0ICAgICAgICAnVWJ1bnR1JzogJyNkZDQ4MTQnLFxuXHQgICAgICAgICdVc3RyZWFtJzogJyMzMzg4ZmYnLFxuXHQgICAgICAgICdWZXJpem9uJzogJyNlZjFkMWQnLFxuXHQgICAgICAgICdWaW1lbyc6ICcjODZjOWVmJyxcblx0ICAgICAgICAnVmluZSc6ICcjMDBhNDc4Jyxcblx0ICAgICAgICAnVmlyYic6ICcjMDZhZmQ4Jyxcblx0ICAgICAgICAnVmlyZ2luIE1lZGlhJzogJyNjYzAwMDAnLFxuXHQgICAgICAgICdXb29nYSc6ICcjNWIwMDljJyxcblx0ICAgICAgICAnV29yZFByZXNzIChibHVlKSc6ICcjMjE3NTliJyxcblx0ICAgICAgICAnV29yZFByZXNzIChvcmFuZ2UpJzogJyNkNTRlMjEnLFxuXHQgICAgICAgICdXb3JkUHJlc3MgKGdyZXkpJzogJyM0NjQ2NDYnLFxuXHQgICAgICAgICdXdW5kZXJsaXN0JzogJyMyYjg4ZDknLFxuXHQgICAgICAgICdYQk9YJzogJyM5YmM4NDgnLFxuXHQgICAgICAgICdYSU5HJzogJyMxMjY1NjcnLFxuXHQgICAgICAgICdZYWhvbyEnOiAnIzcyMGU5ZScsXG5cdCAgICAgICAgJ1lhbmRleCc6ICcjZmZjYzAwJyxcblx0ICAgICAgICAnWWVscCc6ICcjYzQxMjAwJyxcblx0ICAgICAgICAnWW91VHViZSc6ICcjYzQzMDJiJyxcblx0ICAgICAgICAnWmFsb25nbyc6ICcjNTQ5OGRjJyxcblx0ICAgICAgICAnWmVuZGVzayc6ICcjNzhhMzAwJyxcblx0ICAgICAgICAnWmVycGx5JzogJyM5ZGNjN2EnLFxuXHQgICAgICAgICdab290b29sJzogJyM1ZThiMWQnXG5cdCAgICB9LFxuXHQgICAgX2JyYW5kTmFtZXM6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciBicmFuZHMgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBiIGluIHRoaXMuX2JyYW5kQ29sb3JzKSB7XG5cdCAgICAgICAgICAgIGJyYW5kcy5wdXNoKGIpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBicmFuZHNcblx0ICAgIH0sXG5cdCAgICAvKlxuXHQgICAgICAgIOeUn+aIkOS4gOautemaj+acuueahCBCYXNlNjQg5Zu+54mH57yW56CB44CCXG5cblx0ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vaW1za3kvaG9sZGVyXG5cdCAgICAgICAgSG9sZGVyIHJlbmRlcnMgaW1hZ2UgcGxhY2Vob2xkZXJzIGVudGlyZWx5IG9uIHRoZSBjbGllbnQgc2lkZS5cblxuXHQgICAgICAgIGRhdGFJbWFnZUhvbGRlcjogZnVuY3Rpb24oc2l6ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gJ2hvbGRlci5qcy8nICsgc2l6ZVxuXHQgICAgICAgIH0sXG5cdCAgICAqL1xuXHQgICAgZGF0YUltYWdlOiBmdW5jdGlvbihzaXplLCB0ZXh0KSB7XG5cdCAgICAgICAgdmFyIGNhbnZhc1xuXHQgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgICAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLypcblx0ICAgICAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9BdXRvbWF0dGljL25vZGUtY2FudmFzXG5cdCAgICAgICAgICAgICAgICAgICAgbnBtIGluc3RhbGwgY2FudmFzIC0tc2F2ZVxuXHQgICAgICAgICAgICAgICAg5a6J6KOF6Zeu6aKY77yaXG5cdCAgICAgICAgICAgICAgICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjI5NTMyMDYvZ3VscC1pc3N1ZXMtd2l0aC1jYXJpby1pbnN0YWxsLWNvbW1hbmQtbm90LWZvdW5kLXdoZW4tdHJ5aW5nLXRvLWluc3RhbGxpbmctY2FudmFcblx0ICAgICAgICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL0F1dG9tYXR0aWMvbm9kZS1jYW52YXMvaXNzdWVzLzQxNVxuXHQgICAgICAgICAgICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vQXV0b21hdHRpYy9ub2RlLWNhbnZhcy93aWtpL19wYWdlc1xuXG5cdCAgICAgICAgICAgICAgICBQU++8mm5vZGUtY2FudmFzIOeahOWuieijhei/h+eoi+WunuWcqOaYr+Wkque5geeQkOS6hu+8jOaJgOS7peS4jeaUvuWFpSBwYWNrYWdlLmpzb24g55qEIGRlcGVuZGVuY2llc+OAglxuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgdmFyIENhbnZhcyA9IG1vZHVsZS5yZXF1aXJlKCdjYW52YXMnKVxuXHQgICAgICAgICAgICBjYW52YXMgPSBuZXcgQ2FudmFzKClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgY3R4ID0gY2FudmFzICYmIGNhbnZhcy5nZXRDb250ZXh0ICYmIGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcblx0ICAgICAgICBpZiAoIWNhbnZhcyB8fCAhY3R4KSByZXR1cm4gJydcblxuXHQgICAgICAgIGlmICghc2l6ZSkgc2l6ZSA9IHRoaXMucGljayh0aGlzLl9hZFNpemUpXG5cdCAgICAgICAgdGV4dCA9IHRleHQgIT09IHVuZGVmaW5lZCA/IHRleHQgOiBzaXplXG5cblx0ICAgICAgICBzaXplID0gc2l6ZS5zcGxpdCgneCcpXG5cblx0ICAgICAgICB2YXIgd2lkdGggPSBwYXJzZUludChzaXplWzBdLCAxMCksXG5cdCAgICAgICAgICAgIGhlaWdodCA9IHBhcnNlSW50KHNpemVbMV0sIDEwKSxcblx0ICAgICAgICAgICAgYmFja2dyb3VuZCA9IHRoaXMuX2JyYW5kQ29sb3JzW3RoaXMucGljayh0aGlzLl9icmFuZE5hbWVzKCkpXSxcblx0ICAgICAgICAgICAgZm9yZWdyb3VuZCA9ICcjRkZGJyxcblx0ICAgICAgICAgICAgdGV4dF9oZWlnaHQgPSAxNCxcblx0ICAgICAgICAgICAgZm9udCA9ICdzYW5zLXNlcmlmJztcblxuXHQgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoXG5cdCAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodFxuXHQgICAgICAgIGN0eC50ZXh0QWxpZ24gPSAnY2VudGVyJ1xuXHQgICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJ1xuXHQgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kXG5cdCAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpXG5cdCAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGZvcmVncm91bmRcblx0ICAgICAgICBjdHguZm9udCA9ICdib2xkICcgKyB0ZXh0X2hlaWdodCArICdweCAnICsgZm9udFxuXHQgICAgICAgIGN0eC5maWxsVGV4dCh0ZXh0LCAod2lkdGggLyAyKSwgKGhlaWdodCAvIDIpLCB3aWR0aClcblx0ICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJylcblx0ICAgIH1cblx0fVxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyg5KShtb2R1bGUpKSlcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcclxuXHRcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XHJcblx0XHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xyXG5cdFx0XHRtb2R1bGUucGF0aHMgPSBbXTtcclxuXHRcdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XHJcblx0XHRcdG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtb2R1bGU7XHJcblx0fVxyXG5cblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qXG5cdCAgICAjIyBDb2xvclxuXG5cdCAgICBodHRwOi8vbGxsbGxsLmxpL3JhbmRvbUNvbG9yL1xuXHQgICAgICAgIEEgY29sb3IgZ2VuZXJhdG9yIGZvciBKYXZhU2NyaXB0LlxuXHQgICAgICAgIHJhbmRvbUNvbG9yIGdlbmVyYXRlcyBhdHRyYWN0aXZlIGNvbG9ycyBieSBkZWZhdWx0LiBNb3JlIHNwZWNpZmljYWxseSwgcmFuZG9tQ29sb3IgcHJvZHVjZXMgYnJpZ2h0IGNvbG9ycyB3aXRoIGEgcmVhc29uYWJseSBoaWdoIHNhdHVyYXRpb24uIFRoaXMgbWFrZXMgcmFuZG9tQ29sb3IgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgZGF0YSB2aXN1YWxpemF0aW9ucyBhbmQgZ2VuZXJhdGl2ZSBhcnQuXG5cblx0ICAgIGh0dHA6Ly9yYW5kb21jb2xvdXIuY29tL1xuXHQgICAgICAgIHZhciBiZ19jb2xvdXIgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNjc3NzIxNSkudG9TdHJpbmcoMTYpO1xuXHQgICAgICAgIGJnX2NvbG91ciA9IFwiI1wiICsgKFwiMDAwMDAwXCIgKyBiZ19jb2xvdXIpLnNsaWNlKC02KTtcblx0ICAgICAgICBkb2N1bWVudC5iZ0NvbG9yID0gYmdfY29sb3VyO1xuXHQgICAgXG5cdCAgICBodHRwOi8vbWFydGluLmFua2VybC5jb20vMjAwOS8xMi8wOS9ob3ctdG8tY3JlYXRlLXJhbmRvbS1jb2xvcnMtcHJvZ3JhbW1hdGljYWxseS9cblx0ICAgICAgICBDcmVhdGluZyByYW5kb20gY29sb3JzIGlzIGFjdHVhbGx5IG1vcmUgZGlmZmljdWx0IHRoYW4gaXQgc2VlbXMuIFRoZSByYW5kb21uZXNzIGl0c2VsZiBpcyBlYXN5LCBidXQgYWVzdGhldGljYWxseSBwbGVhc2luZyByYW5kb21uZXNzIGlzIG1vcmUgZGlmZmljdWx0LlxuXHQgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZvbmdvdmV0dC9jb2xvci1nZW5lcmF0b3JcblxuXHQgICAgaHR0cDovL3d3dy5wYXVsaXJpc2guY29tLzIwMDkvcmFuZG9tLWhleC1jb2xvci1jb2RlLXNuaXBwZXRzL1xuXHQgICAgICAgIFJhbmRvbSBIZXggQ29sb3IgQ29kZSBHZW5lcmF0b3IgaW4gSmF2YVNjcmlwdFxuXG5cdCAgICBodHRwOi8vY2hhbmNlanMuY29tLyNjb2xvclxuXHQgICAgICAgIGNoYW5jZS5jb2xvcigpXG5cdCAgICAgICAgLy8gPT4gJyM3OWMxNTcnXG5cdCAgICAgICAgY2hhbmNlLmNvbG9yKHtmb3JtYXQ6ICdoZXgnfSlcblx0ICAgICAgICAvLyA9PiAnI2Q2NzExOCdcblx0ICAgICAgICBjaGFuY2UuY29sb3Ioe2Zvcm1hdDogJ3Nob3J0aGV4J30pXG5cdCAgICAgICAgLy8gPT4gJyM2MGYnXG5cdCAgICAgICAgY2hhbmNlLmNvbG9yKHtmb3JtYXQ6ICdyZ2InfSlcblx0ICAgICAgICAvLyA9PiAncmdiKDExMCw1MiwxNjQpJ1xuXG5cdCAgICBodHRwOi8vdG9vbC5jN3NreS5jb20vd2ViY29sb3Jcblx0ICAgICAgICDnvZHpobXorr7orqHluLjnlKjoibLlvanmkK3phY3ooahcblx0ICAgIFxuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL09uZS1jb20vb25lLWNvbG9yXG5cdCAgICAgICAgQW4gT08tYmFzZWQgSmF2YVNjcmlwdCBjb2xvciBwYXJzZXIvY29tcHV0YXRpb24gdG9vbGtpdCB3aXRoIHN1cHBvcnQgZm9yIFJHQiwgSFNWLCBIU0wsIENNWUssIGFuZCBhbHBoYSBjaGFubmVscy5cblx0ICAgICAgICBBUEkg5b6I6LWeXG5cblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJ0aHVyL2NvbG9yXG5cdCAgICAgICAgSmF2YVNjcmlwdCBjb2xvciBjb252ZXJzaW9uIGFuZCBtYW5pcHVsYXRpb24gbGlicmFyeVxuXG5cdCAgICBodHRwczovL2dpdGh1Yi5jb20vbGVhdmVyb3UvY3NzLWNvbG9yc1xuXHQgICAgICAgIFNoYXJlICYgY29udmVydCBDU1MgY29sb3JzXG5cdCAgICBodHRwOi8vbGVhdmVyb3UuZ2l0aHViLmlvL2Nzcy1jb2xvcnMvI3NsYXRlZ3JheVxuXHQgICAgICAgIFR5cGUgYSBDU1MgY29sb3Iga2V5d29yZCwgI2hleCwgaHNsKCksIHJnYmEoKSwgd2hhdGV2ZXI6XG5cblx0ICAgIOiJsuiwgyBodWVcblx0ICAgICAgICBodHRwOi8vYmFpa2UuYmFpZHUuY29tL3ZpZXcvMjMzNjguaHRtXG5cdCAgICAgICAg6Imy6LCD5oyH55qE5piv5LiA5bmF55S75Lit55S76Z2i6Imy5b2p55qE5oC75L2T5YC+5ZCR77yM5piv5aSn55qE6Imy5b2p5pWI5p6c44CCXG5cdCAgICDppbHlkozluqYgc2F0dXJhdGlvblxuXHQgICAgICAgIGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy8xODk2NDQuaHRtXG5cdCAgICAgICAg6aWx5ZKM5bqm5piv5oyH6Imy5b2p55qE6bKc6Imz56iL5bqm77yM5Lmf56ew6Imy5b2p55qE57qv5bqm44CC6aWx5ZKM5bqm5Y+W5Yaz5LqO6K+l6Imy5Lit5ZCr6Imy5oiQ5YiG5ZKM5raI6Imy5oiQ5YiG77yI54Gw6Imy77yJ55qE5q+U5L6L44CC5ZCr6Imy5oiQ5YiG6LaK5aSn77yM6aWx5ZKM5bqm6LaK5aSn77yb5raI6Imy5oiQ5YiG6LaK5aSn77yM6aWx5ZKM5bqm6LaK5bCP44CCXG5cdCAgICDkuq7luqYgYnJpZ2h0bmVzc1xuXHQgICAgICAgIGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy8zNDc3My5odG1cblx0ICAgICAgICDkuq7luqbmmK/mjIflj5HlhYnkvZPvvIjlj43lhYnkvZPvvInooajpnaLlj5HlhYnvvIjlj43lhYnvvInlvLrlvLHnmoTniannkIbph4/jgIJcblx0ICAgIOeFp+W6piBsdW1pbm9zaXR5XG5cdCAgICAgICAg54mp5L2T6KKr54Wn5Lqu55qE56iL5bqmLOmHh+eUqOWNleS9jemdouenr+aJgOaOpeWPl+eahOWFiemAmumHj+adpeihqOekuizooajnpLrljZXkvY3kuLrli5Jb5YWL5pavXShMdXgsbHgpICzljbMgMW0gLyBtMiDjgIJcblxuXHQgICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDg0NTA2L3JhbmRvbS1jb2xvci1nZW5lcmF0b3ItaW4tamF2YXNjcmlwdFxuXHQgICAgICAgIHZhciBsZXR0ZXJzID0gJzAxMjM0NTY3ODlBQkNERUYnLnNwbGl0KCcnKVxuXHQgICAgICAgIHZhciBjb2xvciA9ICcjJ1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdCAgICAgICAgICAgIGNvbG9yICs9IGxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpXVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gY29sb3Jcblx0ICAgIFxuXHQgICAgICAgIC8vIOmaj+acuueUn+aIkOS4gOS4quaXoOiEkeeahOminOiJsu+8jOagvOW8j+S4uiAnI1JSR0dCQifjgIJcblx0ICAgICAgICAvLyBfYnJhaW5sZXNzQ29sb3IoKVxuXHQgICAgICAgIHZhciBjb2xvciA9IE1hdGguZmxvb3IoXG5cdCAgICAgICAgICAgIE1hdGgucmFuZG9tKCkgKlxuXHQgICAgICAgICAgICAoMTYgKiAxNiAqIDE2ICogMTYgKiAxNiAqIDE2IC0gMSlcblx0ICAgICAgICApLnRvU3RyaW5nKDE2KVxuXHQgICAgICAgIGNvbG9yID0gXCIjXCIgKyAoXCIwMDAwMDBcIiArIGNvbG9yKS5zbGljZSgtNilcblx0ICAgICAgICByZXR1cm4gY29sb3IudG9VcHBlckNhc2UoKVxuXHQqL1xuXG5cdHZhciBDb252ZXJ0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0dmFyIERJQ1QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKVxuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5pyJ5ZC45byV5Yqb55qE6aKc6Imy77yM5qC85byP5Li6ICcjUlJHR0JCJ+OAglxuXHQgICAgY29sb3I6IGZ1bmN0aW9uKG5hbWUpIHtcblx0ICAgICAgICBpZiAobmFtZSB8fCBESUNUW25hbWVdKSByZXR1cm4gRElDVFtuYW1lXS5uaWNlclxuXHQgICAgICAgIHJldHVybiB0aGlzLmhleCgpXG5cdCAgICB9LFxuXHQgICAgLy8gI0RBQzBERVxuXHQgICAgaGV4OiBmdW5jdGlvbigpIHtcblx0ICAgICAgICB2YXIgaHN2ID0gdGhpcy5fZ29sZGVuUmF0aW9Db2xvcigpXG5cdCAgICAgICAgdmFyIHJnYiA9IENvbnZlcnQuaHN2MnJnYihoc3YpXG5cdCAgICAgICAgdmFyIGhleCA9IENvbnZlcnQucmdiMmhleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKVxuXHQgICAgICAgIHJldHVybiBoZXhcblx0ICAgIH0sXG5cdCAgICAvLyByZ2IoMTI4LDI1NSwyNTUpXG5cdCAgICByZ2I6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciBoc3YgPSB0aGlzLl9nb2xkZW5SYXRpb0NvbG9yKClcblx0ICAgICAgICB2YXIgcmdiID0gQ29udmVydC5oc3YycmdiKGhzdilcblx0ICAgICAgICByZXR1cm4gJ3JnYignICtcblx0ICAgICAgICAgICAgcGFyc2VJbnQocmdiWzBdLCAxMCkgKyAnLCAnICtcblx0ICAgICAgICAgICAgcGFyc2VJbnQocmdiWzFdLCAxMCkgKyAnLCAnICtcblx0ICAgICAgICAgICAgcGFyc2VJbnQocmdiWzJdLCAxMCkgKyAnKSdcblx0ICAgIH0sXG5cdCAgICAvLyByZ2JhKDEyOCwyNTUsMjU1LDAuMylcblx0ICAgIHJnYmE6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHZhciBoc3YgPSB0aGlzLl9nb2xkZW5SYXRpb0NvbG9yKClcblx0ICAgICAgICB2YXIgcmdiID0gQ29udmVydC5oc3YycmdiKGhzdilcblx0ICAgICAgICByZXR1cm4gJ3JnYmEoJyArXG5cdCAgICAgICAgICAgIHBhcnNlSW50KHJnYlswXSwgMTApICsgJywgJyArXG5cdCAgICAgICAgICAgIHBhcnNlSW50KHJnYlsxXSwgMTApICsgJywgJyArXG5cdCAgICAgICAgICAgIHBhcnNlSW50KHJnYlsyXSwgMTApICsgJywgJyArXG5cdCAgICAgICAgICAgIE1hdGgucmFuZG9tKCkudG9GaXhlZCgyKSArICcpJ1xuXHQgICAgfSxcblx0ICAgIC8vIGhzbCgzMDAsODAlLDkwJSlcblx0ICAgIGhzbDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdmFyIGhzdiA9IHRoaXMuX2dvbGRlblJhdGlvQ29sb3IoKVxuXHQgICAgICAgIHZhciBoc2wgPSBDb252ZXJ0LmhzdjJoc2woaHN2KVxuXHQgICAgICAgIHJldHVybiAnaHNsKCcgK1xuXHQgICAgICAgICAgICBwYXJzZUludChoc2xbMF0sIDEwKSArICcsICcgK1xuXHQgICAgICAgICAgICBwYXJzZUludChoc2xbMV0sIDEwKSArICcsICcgK1xuXHQgICAgICAgICAgICBwYXJzZUludChoc2xbMl0sIDEwKSArICcpJ1xuXHQgICAgfSxcblx0ICAgIC8vIGh0dHA6Ly9tYXJ0aW4uYW5rZXJsLmNvbS8yMDA5LzEyLzA5L2hvdy10by1jcmVhdGUtcmFuZG9tLWNvbG9ycy1wcm9ncmFtbWF0aWNhbGx5L1xuXHQgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rldm9uZ292ZXR0L2NvbG9yLWdlbmVyYXRvci9ibG9iL21hc3Rlci9pbmRleC5qc1xuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5pyJ5ZC45byV5Yqb55qE6aKc6Imy44CCXG5cdCAgICBfZ29sZGVuUmF0aW9Db2xvcjogZnVuY3Rpb24oc2F0dXJhdGlvbiwgdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9nb2xkZW5SYXRpbyA9IDAuNjE4MDMzOTg4NzQ5ODk1XG5cdCAgICAgICAgdGhpcy5faHVlID0gdGhpcy5faHVlIHx8IE1hdGgucmFuZG9tKClcblx0ICAgICAgICB0aGlzLl9odWUgKz0gdGhpcy5fZ29sZGVuUmF0aW9cblx0ICAgICAgICB0aGlzLl9odWUgJT0gMVxuXG5cdCAgICAgICAgaWYgKHR5cGVvZiBzYXR1cmF0aW9uICE9PSBcIm51bWJlclwiKSBzYXR1cmF0aW9uID0gMC41O1xuXHQgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIpIHZhbHVlID0gMC45NTtcblxuXHQgICAgICAgIHJldHVybiBbXG5cdCAgICAgICAgICAgIHRoaXMuX2h1ZSAqIDM2MCxcblx0ICAgICAgICAgICAgc2F0dXJhdGlvbiAqIDEwMCxcblx0ICAgICAgICAgICAgdmFsdWUgKiAxMDBcblx0ICAgICAgICBdXG5cdCAgICB9XG5cdH1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBDb2xvciBDb252ZXJ0XG5cblx0ICAgIGh0dHA6Ly9ibG9nLmNzZG4ubmV0L2lkZmF5YS9hcnRpY2xlL2RldGFpbHMvNjc3MDQxNFxuXHQgICAgICAgIOminOiJsuepuumXtFJHQuS4jkhTVihIU0wp55qE6L2s5o2iXG5cdCovXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJ0aHVyL2NvbG9yLWNvbnZlcnQvYmxvYi9tYXN0ZXIvY29udmVyc2lvbnMuanNcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdFx0cmdiMmhzbDogZnVuY3Rpb24gcmdiMmhzbChyZ2IpIHtcblx0XHRcdHZhciByID0gcmdiWzBdIC8gMjU1LFxuXHRcdFx0XHRnID0gcmdiWzFdIC8gMjU1LFxuXHRcdFx0XHRiID0gcmdiWzJdIC8gMjU1LFxuXHRcdFx0XHRtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcblx0XHRcdFx0bWF4ID0gTWF0aC5tYXgociwgZywgYiksXG5cdFx0XHRcdGRlbHRhID0gbWF4IC0gbWluLFxuXHRcdFx0XHRoLCBzLCBsO1xuXG5cdFx0XHRpZiAobWF4ID09IG1pbilcblx0XHRcdFx0aCA9IDA7XG5cdFx0XHRlbHNlIGlmIChyID09IG1heClcblx0XHRcdFx0aCA9IChnIC0gYikgLyBkZWx0YTtcblx0XHRcdGVsc2UgaWYgKGcgPT0gbWF4KVxuXHRcdFx0XHRoID0gMiArIChiIC0gcikgLyBkZWx0YTtcblx0XHRcdGVsc2UgaWYgKGIgPT0gbWF4KVxuXHRcdFx0XHRoID0gNCArIChyIC0gZykgLyBkZWx0YTtcblxuXHRcdFx0aCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuXHRcdFx0aWYgKGggPCAwKVxuXHRcdFx0XHRoICs9IDM2MDtcblxuXHRcdFx0bCA9IChtaW4gKyBtYXgpIC8gMjtcblxuXHRcdFx0aWYgKG1heCA9PSBtaW4pXG5cdFx0XHRcdHMgPSAwO1xuXHRcdFx0ZWxzZSBpZiAobCA8PSAwLjUpXG5cdFx0XHRcdHMgPSBkZWx0YSAvIChtYXggKyBtaW4pO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbik7XG5cblx0XHRcdHJldHVybiBbaCwgcyAqIDEwMCwgbCAqIDEwMF07XG5cdFx0fSxcblx0XHRyZ2IyaHN2OiBmdW5jdGlvbiByZ2IyaHN2KHJnYikge1xuXHRcdFx0dmFyIHIgPSByZ2JbMF0sXG5cdFx0XHRcdGcgPSByZ2JbMV0sXG5cdFx0XHRcdGIgPSByZ2JbMl0sXG5cdFx0XHRcdG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuXHRcdFx0XHRtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcblx0XHRcdFx0ZGVsdGEgPSBtYXggLSBtaW4sXG5cdFx0XHRcdGgsIHMsIHY7XG5cblx0XHRcdGlmIChtYXggPT09IDApXG5cdFx0XHRcdHMgPSAwO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzID0gKGRlbHRhIC8gbWF4ICogMTAwMCkgLyAxMDtcblxuXHRcdFx0aWYgKG1heCA9PSBtaW4pXG5cdFx0XHRcdGggPSAwO1xuXHRcdFx0ZWxzZSBpZiAociA9PSBtYXgpXG5cdFx0XHRcdGggPSAoZyAtIGIpIC8gZGVsdGE7XG5cdFx0XHRlbHNlIGlmIChnID09IG1heClcblx0XHRcdFx0aCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG5cdFx0XHRlbHNlIGlmIChiID09IG1heClcblx0XHRcdFx0aCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cblx0XHRcdGggPSBNYXRoLm1pbihoICogNjAsIDM2MCk7XG5cblx0XHRcdGlmIChoIDwgMClcblx0XHRcdFx0aCArPSAzNjA7XG5cblx0XHRcdHYgPSAoKG1heCAvIDI1NSkgKiAxMDAwKSAvIDEwO1xuXG5cdFx0XHRyZXR1cm4gW2gsIHMsIHZdO1xuXHRcdH0sXG5cdFx0aHNsMnJnYjogZnVuY3Rpb24gaHNsMnJnYihoc2wpIHtcblx0XHRcdHZhciBoID0gaHNsWzBdIC8gMzYwLFxuXHRcdFx0XHRzID0gaHNsWzFdIC8gMTAwLFxuXHRcdFx0XHRsID0gaHNsWzJdIC8gMTAwLFxuXHRcdFx0XHR0MSwgdDIsIHQzLCByZ2IsIHZhbDtcblxuXHRcdFx0aWYgKHMgPT09IDApIHtcblx0XHRcdFx0dmFsID0gbCAqIDI1NTtcblx0XHRcdFx0cmV0dXJuIFt2YWwsIHZhbCwgdmFsXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGwgPCAwLjUpXG5cdFx0XHRcdHQyID0gbCAqICgxICsgcyk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHQyID0gbCArIHMgLSBsICogcztcblx0XHRcdHQxID0gMiAqIGwgLSB0MjtcblxuXHRcdFx0cmdiID0gWzAsIDAsIDBdO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcblx0XHRcdFx0dDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKTtcblx0XHRcdFx0aWYgKHQzIDwgMCkgdDMrKztcblx0XHRcdFx0aWYgKHQzID4gMSkgdDMtLTtcblxuXHRcdFx0XHRpZiAoNiAqIHQzIDwgMSlcblx0XHRcdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0Mztcblx0XHRcdFx0ZWxzZSBpZiAoMiAqIHQzIDwgMSlcblx0XHRcdFx0XHR2YWwgPSB0Mjtcblx0XHRcdFx0ZWxzZSBpZiAoMyAqIHQzIDwgMilcblx0XHRcdFx0XHR2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR2YWwgPSB0MTtcblxuXHRcdFx0XHRyZ2JbaV0gPSB2YWwgKiAyNTU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZ2I7XG5cdFx0fSxcblx0XHRoc2wyaHN2OiBmdW5jdGlvbiBoc2wyaHN2KGhzbCkge1xuXHRcdFx0dmFyIGggPSBoc2xbMF0sXG5cdFx0XHRcdHMgPSBoc2xbMV0gLyAxMDAsXG5cdFx0XHRcdGwgPSBoc2xbMl0gLyAxMDAsXG5cdFx0XHRcdHN2LCB2O1xuXHRcdFx0bCAqPSAyO1xuXHRcdFx0cyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcblx0XHRcdHYgPSAobCArIHMpIC8gMjtcblx0XHRcdHN2ID0gKDIgKiBzKSAvIChsICsgcyk7XG5cdFx0XHRyZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcblx0XHR9LFxuXHRcdGhzdjJyZ2I6IGZ1bmN0aW9uIGhzdjJyZ2IoaHN2KSB7XG5cdFx0XHR2YXIgaCA9IGhzdlswXSAvIDYwXG5cdFx0XHR2YXIgcyA9IGhzdlsxXSAvIDEwMFxuXHRcdFx0dmFyIHYgPSBoc3ZbMl0gLyAxMDBcblx0XHRcdHZhciBoaSA9IE1hdGguZmxvb3IoaCkgJSA2XG5cblx0XHRcdHZhciBmID0gaCAtIE1hdGguZmxvb3IoaClcblx0XHRcdHZhciBwID0gMjU1ICogdiAqICgxIC0gcylcblx0XHRcdHZhciBxID0gMjU1ICogdiAqICgxIC0gKHMgKiBmKSlcblx0XHRcdHZhciB0ID0gMjU1ICogdiAqICgxIC0gKHMgKiAoMSAtIGYpKSlcblxuXHRcdFx0diA9IDI1NSAqIHZcblxuXHRcdFx0c3dpdGNoIChoaSkge1xuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0cmV0dXJuIFt2LCB0LCBwXVxuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0cmV0dXJuIFtxLCB2LCBwXVxuXHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0cmV0dXJuIFtwLCB2LCB0XVxuXHRcdFx0XHRjYXNlIDM6XG5cdFx0XHRcdFx0cmV0dXJuIFtwLCBxLCB2XVxuXHRcdFx0XHRjYXNlIDQ6XG5cdFx0XHRcdFx0cmV0dXJuIFt0LCBwLCB2XVxuXHRcdFx0XHRjYXNlIDU6XG5cdFx0XHRcdFx0cmV0dXJuIFt2LCBwLCBxXVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aHN2MmhzbDogZnVuY3Rpb24gaHN2MmhzbChoc3YpIHtcblx0XHRcdHZhciBoID0gaHN2WzBdLFxuXHRcdFx0XHRzID0gaHN2WzFdIC8gMTAwLFxuXHRcdFx0XHR2ID0gaHN2WzJdIC8gMTAwLFxuXHRcdFx0XHRzbCwgbDtcblxuXHRcdFx0bCA9ICgyIC0gcykgKiB2O1xuXHRcdFx0c2wgPSBzICogdjtcblx0XHRcdHNsIC89IChsIDw9IDEpID8gbCA6IDIgLSBsO1xuXHRcdFx0bCAvPSAyO1xuXHRcdFx0cmV0dXJuIFtoLCBzbCAqIDEwMCwgbCAqIDEwMF07XG5cdFx0fSxcblx0XHQvLyBodHRwOi8vd3d3LjE0MGJ5dC5lcy9rZXl3b3Jkcy9jb2xvclxuXHRcdHJnYjJoZXg6IGZ1bmN0aW9uKFxuXHRcdFx0YSwgLy8gcmVkLCBhcyBhIG51bWJlciBmcm9tIDAgdG8gMjU1XG5cdFx0XHRiLCAvLyBncmVlbiwgYXMgYSBudW1iZXIgZnJvbSAwIHRvIDI1NVxuXHRcdFx0YyAvLyBibHVlLCBhcyBhIG51bWJlciBmcm9tIDAgdG8gMjU1XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gXCIjXCIgKyAoKDI1NiArIGEgPDwgOCB8IGIpIDw8IDggfCBjKS50b1N0cmluZygxNikuc2xpY2UoMSlcblx0XHR9LFxuXHRcdGhleDJyZ2I6IGZ1bmN0aW9uKFxuXHRcdFx0YSAvLyB0YWtlIGEgXCIjeHh4eHh4XCIgaGV4IHN0cmluZyxcblx0XHQpIHtcblx0XHRcdGEgPSAnMHgnICsgYS5zbGljZSgxKS5yZXBsYWNlKGEubGVuZ3RoID4gNCA/IGEgOiAvLi9nLCAnJCYkJicpIHwgMDtcblx0XHRcdHJldHVybiBbYSA+PiAxNiwgYSA+PiA4ICYgMjU1LCBhICYgMjU1XVxuXHRcdH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lypcblx0ICAgICMjIENvbG9yIOWtl+WFuOaVsOaNrlxuXG5cdCAgICDlrZflhbjmlbDmja7mnaXmupAgW0EgbmljZXIgY29sb3IgcGFsZXR0ZSBmb3IgdGhlIHdlYl0oaHR0cDovL2NscnMuY2MvKVxuXHQqL1xuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICAgIC8vIG5hbWUgdmFsdWUgbmljZXJcblx0ICAgIG5hdnk6IHtcblx0ICAgICAgICB2YWx1ZTogJyMwMDAwODAnLFxuXHQgICAgICAgIG5pY2VyOiAnIzAwMUYzRidcblx0ICAgIH0sXG5cdCAgICBibHVlOiB7XG5cdCAgICAgICAgdmFsdWU6ICcjMDAwMGZmJyxcblx0ICAgICAgICBuaWNlcjogJyMwMDc0RDknXG5cdCAgICB9LFxuXHQgICAgYXF1YToge1xuXHQgICAgICAgIHZhbHVlOiAnIzAwZmZmZicsXG5cdCAgICAgICAgbmljZXI6ICcjN0ZEQkZGJ1xuXHQgICAgfSxcblx0ICAgIHRlYWw6IHtcblx0ICAgICAgICB2YWx1ZTogJyMwMDgwODAnLFxuXHQgICAgICAgIG5pY2VyOiAnIzM5Q0NDQydcblx0ICAgIH0sXG5cdCAgICBvbGl2ZToge1xuXHQgICAgICAgIHZhbHVlOiAnIzAwODAwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjM0Q5OTcwJ1xuXHQgICAgfSxcblx0ICAgIGdyZWVuOiB7XG5cdCAgICAgICAgdmFsdWU6ICcjMDA4MDAwJyxcblx0ICAgICAgICBuaWNlcjogJyMyRUNDNDAnXG5cdCAgICB9LFxuXHQgICAgbGltZToge1xuXHQgICAgICAgIHZhbHVlOiAnIzAwZmYwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjMDFGRjcwJ1xuXHQgICAgfSxcblx0ICAgIHllbGxvdzoge1xuXHQgICAgICAgIHZhbHVlOiAnI2ZmZmYwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjRkZEQzAwJ1xuXHQgICAgfSxcblx0ICAgIG9yYW5nZToge1xuXHQgICAgICAgIHZhbHVlOiAnI2ZmYTUwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjRkY4NTFCJ1xuXHQgICAgfSxcblx0ICAgIHJlZDoge1xuXHQgICAgICAgIHZhbHVlOiAnI2ZmMDAwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjRkY0MTM2J1xuXHQgICAgfSxcblx0ICAgIG1hcm9vbjoge1xuXHQgICAgICAgIHZhbHVlOiAnIzgwMDAwMCcsXG5cdCAgICAgICAgbmljZXI6ICcjODUxNDRCJ1xuXHQgICAgfSxcblx0ICAgIGZ1Y2hzaWE6IHtcblx0ICAgICAgICB2YWx1ZTogJyNmZjAwZmYnLFxuXHQgICAgICAgIG5pY2VyOiAnI0YwMTJCRSdcblx0ICAgIH0sXG5cdCAgICBwdXJwbGU6IHtcblx0ICAgICAgICB2YWx1ZTogJyM4MDAwODAnLFxuXHQgICAgICAgIG5pY2VyOiAnI0IxMERDOSdcblx0ICAgIH0sXG5cdCAgICBzaWx2ZXI6IHtcblx0ICAgICAgICB2YWx1ZTogJyNjMGMwYzAnLFxuXHQgICAgICAgIG5pY2VyOiAnI0RERERERCdcblx0ICAgIH0sXG5cdCAgICBncmF5OiB7XG5cdCAgICAgICAgdmFsdWU6ICcjODA4MDgwJyxcblx0ICAgICAgICBuaWNlcjogJyNBQUFBQUEnXG5cdCAgICB9LFxuXHQgICAgYmxhY2s6IHtcblx0ICAgICAgICB2YWx1ZTogJyMwMDAwMDAnLFxuXHQgICAgICAgIG5pY2VyOiAnIzExMTExMSdcblx0ICAgIH0sXG5cdCAgICB3aGl0ZToge1xuXHQgICAgICAgIHZhbHVlOiAnI0ZGRkZGRicsXG5cdCAgICAgICAgbmljZXI6ICcjRkZGRkZGJ1xuXHQgICAgfVxuXHR9XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKlxuXHQgICAgIyMgVGV4dFxuXG5cdCAgICBodHRwOi8vd3d3LmxpcHN1bS5jb20vXG5cdCovXG5cdHZhciBCYXNpYyA9IF9fd2VicGFja19yZXF1aXJlX18oNilcblx0dmFyIEhlbHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cblx0ZnVuY3Rpb24gcmFuZ2UoZGVmYXVsdE1pbiwgZGVmYXVsdE1heCwgbWluLCBtYXgpIHtcblx0ICAgIHJldHVybiBtaW4gPT09IHVuZGVmaW5lZCA/IEJhc2ljLm5hdHVyYWwoZGVmYXVsdE1pbiwgZGVmYXVsdE1heCkgOiAvLyAoKVxuXHQgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkID8gbWluIDogLy8gKCBsZW4gKVxuXHQgICAgICAgIEJhc2ljLm5hdHVyYWwocGFyc2VJbnQobWluLCAxMCksIHBhcnNlSW50KG1heCwgMTApKSAvLyAoIG1pbiwgbWF4IClcblx0fVxuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5q615paH5pys44CCXG5cdCAgICBwYXJhZ3JhcGg6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJhbmdlKDMsIDcsIG1pbiwgbWF4KVxuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5zZW50ZW5jZSgpKVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKVxuXHQgICAgfSxcblx0ICAgIC8vIFxuXHQgICAgY3BhcmFncmFwaDogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMywgNywgbWluLCBtYXgpXG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmNzZW50ZW5jZSgpKVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5Y+l5a2Q77yM56ys5LiA5Liq5Y2V6K+N55qE6aaW5a2X5q+N5aSn5YaZ44CCXG5cdCAgICBzZW50ZW5jZTogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMTIsIDE4LCBtaW4sIG1heClcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gW11cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMud29yZCgpKVxuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gSGVscGVyLmNhcGl0YWxpemUocmVzdWx0LmpvaW4oJyAnKSkgKyAnLidcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrkuK3mloflj6XlrZDjgIJcblx0ICAgIGNzZW50ZW5jZTogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMTIsIDE4LCBtaW4sIG1heClcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gW11cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3dvcmQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpICsgJ+OAgidcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrljZXor43jgIJcblx0ICAgIHdvcmQ6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJhbmdlKDMsIDEwLCBtaW4sIG1heClcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQgKz0gQmFzaWMuY2hhcmFjdGVyKCdsb3dlcicpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrmiJblpJrkuKrmsYnlrZfjgIJcblx0ICAgIGN3b3JkOiBmdW5jdGlvbihwb29sLCBtaW4sIG1heCkge1xuXHQgICAgICAgIC8vIOacgOW4uOeUqOeahCA1MDAg5Liq5rGJ5a2XIGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy81Njg0MzYuaHRtXG5cdCAgICAgICAgdmFyIERJQ1RfS0FOWkkgPSAn55qE5LiA5piv5Zyo5LiN5LqG5pyJ5ZKM5Lq66L+Z5Lit5aSn5Li65LiK5Liq5Zu95oiR5Lul6KaB5LuW5pe25p2l55So5Lus55Sf5Yiw5L2c5Zyw5LqO5Ye65bCx5YiG5a+55oiQ5Lya5Y+v5Li75Y+R5bm05Yqo5ZCM5bel5Lmf6IO95LiL6L+H5a2Q6K+05Lqn56eN6Z2i6ICM5pa55ZCO5aSa5a6a6KGM5a2m5rOV5omA5rCR5b6X57uP5Y2B5LiJ5LmL6L+b552A562J6YOo5bqm5a6255S15Yqb6YeM5aaC5rC05YyW6auY6Ieq5LqM55CG6LW35bCP54mp546w5a6e5Yqg6YeP6YO95Lik5L2T5Yi25py65b2T5L2/54K55LuO5Lia5pys5Y675oqK5oCn5aW95bqU5byA5a6D5ZCI6L+Y5Zug55Sx5YW25Lqb54S25YmN5aSW5aSp5pS/5Zub5pel6YKj56S+5LmJ5LqL5bmz5b2i55u45YWo6KGo6Ze05qC35LiO5YWz5ZCE6YeN5paw57q/5YaF5pWw5q2j5b+D5Y+N5L2g5piO55yL5Y6f5Y+I5LmI5Yip5q+U5oiW5L2G6LSo5rCU56ys5ZCR6YGT5ZG95q2k5Y+Y5p2h5Y+q5rKh57uT6Kej6Zeu5oSP5bu65pyI5YWs5peg57O75Yab5b6I5oOF6ICF5pyA56uL5Luj5oOz5bey6YCa5bm25o+Q55u06aKY5YWa56iL5bGV5LqU5p6c5paZ6LGh5ZGY6Z2p5L2N5YWl5bi45paH5oC75qyh5ZOB5byP5rS76K6+5Y+K566h54m55Lu26ZW/5rGC6ICB5aS05Z+66LWE6L655rWB6Lev57qn5bCR5Zu+5bGx57uf5o6l55+l6L6D5bCG57uE6KeB6K6h5Yir5aW55omL6KeS5pyf5qC56K666L+Q5Yac5oyH5Yeg5Lmd5Yy65by65pS+5Yaz6KW/6KKr5bmy5YGa5b+F5oiY5YWI5Zue5YiZ5Lu75Y+W5o2u5aSE6Zif5Y2X57uZ6Imy5YWJ6Zeo5Y2z5L+d5rK75YyX6YCg55m+6KeE54Ot6aKG5LiD5rW35Y+j5Lic5a+85Zmo5Y6L5b+X5LiW6YeR5aKe5LqJ5rWO6Zi25rK55oCd5pyv5p6B5Lqk5Y+X6IGU5LuA6K6k5YWt5YWx5p2D5pS26K+B5pS55riF5bex576O5YaN6YeH6L2s5pu05Y2V6aOO5YiH5omT55m95pWZ6YCf6Iqx5bim5a6J5Zy66Lqr6L2m5L6L55yf5Yqh5YW35LiH5q+P55uu6Iez6L6+6LWw56ev56S66K6u5aOw5oql5paX5a6M57G75YWr56a75Y2O5ZCN56Gu5omN56eR5byg5L+h6ams6IqC6K+d57Gz5pW056m65YWD5Ya15LuK6ZuG5rip5Lyg5Zyf6K645q2l576k5bm/55+z6K6w6ZyA5q6156CU55WM5ouJ5p6X5b6L5Y+r5LiU56m26KeC6LaK57uH6KOF5b2x566X5L2O5oyB6Z+z5LyX5Lmm5biD5aSN5a655YS/6aG76ZmF5ZWG6Z2e6aqM6L+e5pat5rex6Zq+6L+R55+/5Y2D5ZGo5aeU57Sg5oqA5aSH5Y2K5Yqe6Z2S55yB5YiX5Lmg5ZON57qm5pSv6Iis5Y+y5oSf5Yqz5L6/5Zui5b6A6YW45Y6G5biC5YWL5L2V6Zmk5raI5p6E5bqc56ew5aSq5YeG57K+5YC85Y+3546H5peP57u05YiS6YCJ5qCH5YaZ5a2Y5YCZ5q+b5Lqy5b+r5pWI5pav6Zmi5p+l5rGf5Z6L55y8546L5oyJ5qC85YW75piT572u5rS+5bGC54mH5aeL5Y205LiT54q26IKy5Y6C5Lqs6K+G6YCC5bGe5ZyG5YyF54Gr5L2P6LCD5ruh5Y6/5bGA54Wn5Y+C57qi57uG5byV5ZCs6K+l6ZOB5Lu35Lil6b6Z6aOeJ1xuXG5cdCAgICAgICAgdmFyIGxlblxuXHQgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuXHQgICAgICAgICAgICBjYXNlIDA6IC8vICgpXG5cdCAgICAgICAgICAgICAgICBwb29sID0gRElDVF9LQU5aSVxuXHQgICAgICAgICAgICAgICAgbGVuID0gMVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAxOiAvLyAoIHBvb2wgKVxuXHQgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gMVxuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyAoIGxlbmd0aCApXG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gcG9vbFxuXHQgICAgICAgICAgICAgICAgICAgIHBvb2wgPSBESUNUX0tBTlpJXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlIDI6XG5cdCAgICAgICAgICAgICAgICAvLyAoIHBvb2wsIGxlbmd0aCApXG5cdCAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgICAgICBsZW4gPSBtaW5cblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gKCBtaW4sIG1heCApXG5cdCAgICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5uYXR1cmFsKHBvb2wsIG1pbilcblx0ICAgICAgICAgICAgICAgICAgICBwb29sID0gRElDVF9LQU5aSVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAzOlxuXHQgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5uYXR1cmFsKG1pbiwgbWF4KVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgcmVzdWx0ID0gJydcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdCArPSBwb29sLmNoYXJBdCh0aGlzLm5hdHVyYWwoMCwgcG9vbC5sZW5ndGggLSAxKSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOWPpeagh+mimO+8jOWFtuS4reavj+S4quWNleivjeeahOmmluWtl+avjeWkp+WGmeOAglxuXHQgICAgdGl0bGU6IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG5cdCAgICAgICAgdmFyIGxlbiA9IHJhbmdlKDMsIDcsIG1pbiwgbWF4KVxuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jYXBpdGFsaXplKHRoaXMud29yZCgpKSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcgJylcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDlj6XkuK3mlofmoIfpopjjgIJcblx0ICAgIGN0aXRsZTogZnVuY3Rpb24obWluLCBtYXgpIHtcblx0ICAgICAgICB2YXIgbGVuID0gcmFuZ2UoMywgNywgbWluLCBtYXgpXG5cdCAgICAgICAgdmFyIHJlc3VsdCA9IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmN3b3JkKCkpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHQuam9pbignJylcblx0ICAgIH1cblx0fVxuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIEhlbHBlcnNcblx0Ki9cblxuXHR2YXIgVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMylcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHQvLyDmiorlrZfnrKbkuLLnmoTnrKzkuIDkuKrlrZfmr43ovazmjaLkuLrlpKflhpnjgIJcblx0XHRjYXBpdGFsaXplOiBmdW5jdGlvbih3b3JkKSB7XG5cdFx0XHRyZXR1cm4gKHdvcmQgKyAnJykuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyAod29yZCArICcnKS5zdWJzdHIoMSlcblx0XHR9LFxuXHRcdC8vIOaKiuWtl+espuS4sui9rOaNouS4uuWkp+WGmeOAglxuXHRcdHVwcGVyOiBmdW5jdGlvbihzdHIpIHtcblx0XHRcdHJldHVybiAoc3RyICsgJycpLnRvVXBwZXJDYXNlKClcblx0XHR9LFxuXHRcdC8vIOaKiuWtl+espuS4sui9rOaNouS4uuWwj+WGmeOAglxuXHRcdGxvd2VyOiBmdW5jdGlvbihzdHIpIHtcblx0XHRcdHJldHVybiAoc3RyICsgJycpLnRvTG93ZXJDYXNlKClcblx0XHR9LFxuXHRcdC8vIOS7juaVsOe7hOS4remaj+acuumAieWPluS4gOS4quWFg+e0oO+8jOW5tui/lOWbnuOAglxuXHRcdHBpY2s6IGZ1bmN0aW9uIHBpY2soYXJyLCBtaW4sIG1heCkge1xuXHRcdFx0Ly8gcGljayggaXRlbTEsIGl0ZW0yIC4uLiApXG5cdFx0XHRpZiAoIVV0aWwuaXNBcnJheShhcnIpKSB7XG5cdFx0XHRcdGFyciA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuXHRcdFx0XHRtaW4gPSAxXG5cdFx0XHRcdG1heCA9IDFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHBpY2soIFsgaXRlbTEsIGl0ZW0yIC4uLiBdIClcblx0XHRcdFx0aWYgKG1pbiA9PT0gdW5kZWZpbmVkKSBtaW4gPSAxXG5cblx0XHRcdFx0Ly8gcGljayggWyBpdGVtMSwgaXRlbTIgLi4uIF0sIGNvdW50IClcblx0XHRcdFx0aWYgKG1heCA9PT0gdW5kZWZpbmVkKSBtYXggPSBtaW5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG1pbiA9PT0gMSAmJiBtYXggPT09IDEpIHJldHVybiBhcnJbdGhpcy5uYXR1cmFsKDAsIGFyci5sZW5ndGggLSAxKV1cblxuXHRcdFx0Ly8gcGljayggWyBpdGVtMSwgaXRlbTIgLi4uIF0sIG1pbiwgbWF4IClcblx0XHRcdHJldHVybiB0aGlzLnNodWZmbGUoYXJyLCBtaW4sIG1heClcblxuXHRcdFx0Ly8g6YCa6L+H5Y+C5pWw5Liq5pWw5Yik5pat5pa55rOV562+5ZCN77yM5omp5bGV5oCn5aSq5beu77yBIzkwXG5cdFx0XHQvLyBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRcdC8vIFx0Y2FzZSAxOlxuXHRcdFx0Ly8gXHRcdC8vIHBpY2soIFsgaXRlbTEsIGl0ZW0yIC4uLiBdIClcblx0XHRcdC8vIFx0XHRyZXR1cm4gYXJyW3RoaXMubmF0dXJhbCgwLCBhcnIubGVuZ3RoIC0gMSldXG5cdFx0XHQvLyBcdGNhc2UgMjpcblx0XHRcdC8vIFx0XHQvLyBwaWNrKCBbIGl0ZW0xLCBpdGVtMiAuLi4gXSwgY291bnQgKVxuXHRcdFx0Ly8gXHRcdG1heCA9IG1pblxuXHRcdFx0Ly8gXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Ly8gXHRjYXNlIDM6XG5cdFx0XHQvLyBcdFx0Ly8gcGljayggWyBpdGVtMSwgaXRlbTIgLi4uIF0sIG1pbiwgbWF4IClcblx0XHRcdC8vIFx0XHRyZXR1cm4gdGhpcy5zaHVmZmxlKGFyciwgbWluLCBtYXgpXG5cdFx0XHQvLyB9XG5cdFx0fSxcblx0XHQvKlxuXHRcdCAgICDmiZPkubHmlbDnu4TkuK3lhYPntKDnmoTpobrluo/vvIzlubbov5Tlm57jgIJcblx0XHQgICAgR2l2ZW4gYW4gYXJyYXksIHNjcmFtYmxlIHRoZSBvcmRlciBhbmQgcmV0dXJuIGl0LlxuXG5cdFx0ICAgIOWFtuS7lueahOWunueOsOaAnei3r++8mlxuXHRcdCAgICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9qc2xpYnMvd2lraS9KYXZhc2NyaXB0VGlwc1xuXHRcdCAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNvcnQoZnVuY3Rpb24oKSB7XG5cdFx0ICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjVcblx0XHQgICAgICAgIH0pXG5cdFx0Ki9cblx0XHRzaHVmZmxlOiBmdW5jdGlvbiBzaHVmZmxlKGFyciwgbWluLCBtYXgpIHtcblx0XHRcdGFyciA9IGFyciB8fCBbXVxuXHRcdFx0dmFyIG9sZCA9IGFyci5zbGljZSgwKSxcblx0XHRcdFx0cmVzdWx0ID0gW10sXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gb2xkLmxlbmd0aDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aW5kZXggPSB0aGlzLm5hdHVyYWwoMCwgb2xkLmxlbmd0aCAtIDEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG9sZFtpbmRleF0pXG5cdFx0XHRcdG9sZC5zcGxpY2UoaW5kZXgsIDEpXG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcblx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdFxuXHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0bWF4ID0gbWluXG5cdFx0XHRcdFx0XHQvKiBmYWxscyB0aHJvdWdoICovXG5cdFx0XHRcdGNhc2UgMzpcblx0XHRcdFx0XHRtaW4gPSBwYXJzZUludChtaW4sIDEwKVxuXHRcdFx0XHRcdG1heCA9IHBhcnNlSW50KG1heCwgMTApXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC5zbGljZSgwLCB0aGlzLm5hdHVyYWwobWluLCBtYXgpKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgICAgKiBSYW5kb20ub3JkZXIoaXRlbSwgaXRlbSlcblx0XHQgICAgKiBSYW5kb20ub3JkZXIoW2l0ZW0sIGl0ZW0gLi4uXSlcblxuXHRcdCAgICDpobrluo/ojrflj5bmlbDnu4TkuK3nmoTlhYPntKBcblxuXHRcdCAgICBbSlNPTuWvvOWFpeaVsOe7hOaUr+aMgeaVsOe7hOaVsOaNruW9leWFpV0oaHR0cHM6Ly9naXRodWIuY29tL3RoeC9SQVAvaXNzdWVzLzIyKVxuXG5cdFx0ICAgIOS4jeaUr+aMgeWNleeLrOiwg+eUqO+8gVxuXHRcdCovXG5cdFx0b3JkZXI6IGZ1bmN0aW9uIG9yZGVyKGFycmF5KSB7XG5cdFx0XHRvcmRlci5jYWNoZSA9IG9yZGVyLmNhY2hlIHx8IHt9XG5cblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgYXJyYXkgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMClcblxuXHRcdFx0Ly8gb3B0aW9ucy5jb250ZXh0LnBhdGgvdGVtcGxhdGVQYXRoXG5cdFx0XHR2YXIgb3B0aW9ucyA9IG9yZGVyLm9wdGlvbnNcblx0XHRcdHZhciB0ZW1wbGF0ZVBhdGggPSBvcHRpb25zLmNvbnRleHQudGVtcGxhdGVQYXRoLmpvaW4oJy4nKVxuXG5cdFx0XHR2YXIgY2FjaGUgPSAoXG5cdFx0XHRcdG9yZGVyLmNhY2hlW3RlbXBsYXRlUGF0aF0gPSBvcmRlci5jYWNoZVt0ZW1wbGF0ZVBhdGhdIHx8IHtcblx0XHRcdFx0XHRpbmRleDogMCxcblx0XHRcdFx0XHRhcnJheTogYXJyYXlcblx0XHRcdFx0fVxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4gY2FjaGUuYXJyYXlbY2FjaGUuaW5kZXgrKyAlIGNhY2hlLmFycmF5Lmxlbmd0aF1cblx0XHR9XG5cdH1cblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBOYW1lXG5cblx0ICAgIFtCZXlvbmQgdGhlIFRvcCAxMDAwIE5hbWVzXShodHRwOi8vd3d3LnNzYS5nb3Yvb2FjdC9iYWJ5bmFtZXMvbGltaXRzLmh0bWwpXG5cdCovXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHRcdC8vIOmaj+acuueUn+aIkOS4gOS4quW4uOingeeahOiLseaWh+WQjeOAglxuXHRcdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuYW1lcyA9IFtcblx0XHRcdFx0Ly8gbWFsZVxuXHRcdFx0XHRcIkphbWVzXCIsIFwiSm9oblwiLCBcIlJvYmVydFwiLCBcIk1pY2hhZWxcIiwgXCJXaWxsaWFtXCIsXG5cdFx0XHRcdFwiRGF2aWRcIiwgXCJSaWNoYXJkXCIsIFwiQ2hhcmxlc1wiLCBcIkpvc2VwaFwiLCBcIlRob21hc1wiLFxuXHRcdFx0XHRcIkNocmlzdG9waGVyXCIsIFwiRGFuaWVsXCIsIFwiUGF1bFwiLCBcIk1hcmtcIiwgXCJEb25hbGRcIixcblx0XHRcdFx0XCJHZW9yZ2VcIiwgXCJLZW5uZXRoXCIsIFwiU3RldmVuXCIsIFwiRWR3YXJkXCIsIFwiQnJpYW5cIixcblx0XHRcdFx0XCJSb25hbGRcIiwgXCJBbnRob255XCIsIFwiS2V2aW5cIiwgXCJKYXNvblwiLCBcIk1hdHRoZXdcIixcblx0XHRcdFx0XCJHYXJ5XCIsIFwiVGltb3RoeVwiLCBcIkpvc2VcIiwgXCJMYXJyeVwiLCBcIkplZmZyZXlcIixcblx0XHRcdFx0XCJGcmFua1wiLCBcIlNjb3R0XCIsIFwiRXJpY1wiXG5cdFx0XHRdLmNvbmNhdChbXG5cdFx0XHRcdC8vIGZlbWFsZVxuXHRcdFx0XHRcIk1hcnlcIiwgXCJQYXRyaWNpYVwiLCBcIkxpbmRhXCIsIFwiQmFyYmFyYVwiLCBcIkVsaXphYmV0aFwiLFxuXHRcdFx0XHRcIkplbm5pZmVyXCIsIFwiTWFyaWFcIiwgXCJTdXNhblwiLCBcIk1hcmdhcmV0XCIsIFwiRG9yb3RoeVwiLFxuXHRcdFx0XHRcIkxpc2FcIiwgXCJOYW5jeVwiLCBcIkthcmVuXCIsIFwiQmV0dHlcIiwgXCJIZWxlblwiLFxuXHRcdFx0XHRcIlNhbmRyYVwiLCBcIkRvbm5hXCIsIFwiQ2Fyb2xcIiwgXCJSdXRoXCIsIFwiU2hhcm9uXCIsXG5cdFx0XHRcdFwiTWljaGVsbGVcIiwgXCJMYXVyYVwiLCBcIlNhcmFoXCIsIFwiS2ltYmVybHlcIiwgXCJEZWJvcmFoXCIsXG5cdFx0XHRcdFwiSmVzc2ljYVwiLCBcIlNoaXJsZXlcIiwgXCJDeW50aGlhXCIsIFwiQW5nZWxhXCIsIFwiTWVsaXNzYVwiLFxuXHRcdFx0XHRcIkJyZW5kYVwiLCBcIkFteVwiLCBcIkFubmFcIlxuXHRcdFx0XSlcblx0XHRcdHJldHVybiB0aGlzLnBpY2sobmFtZXMpXG5cdFx0XHRcdC8vIG9yIHRoaXMuY2FwaXRhbGl6ZSh0aGlzLndvcmQoKSlcblx0XHR9LFxuXHRcdC8vIOmaj+acuueUn+aIkOS4gOS4quW4uOingeeahOiLseaWh+Wnk+OAglxuXHRcdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5hbWVzID0gW1xuXHRcdFx0XHRcIlNtaXRoXCIsIFwiSm9obnNvblwiLCBcIldpbGxpYW1zXCIsIFwiQnJvd25cIiwgXCJKb25lc1wiLFxuXHRcdFx0XHRcIk1pbGxlclwiLCBcIkRhdmlzXCIsIFwiR2FyY2lhXCIsIFwiUm9kcmlndWV6XCIsIFwiV2lsc29uXCIsXG5cdFx0XHRcdFwiTWFydGluZXpcIiwgXCJBbmRlcnNvblwiLCBcIlRheWxvclwiLCBcIlRob21hc1wiLCBcIkhlcm5hbmRlelwiLFxuXHRcdFx0XHRcIk1vb3JlXCIsIFwiTWFydGluXCIsIFwiSmFja3NvblwiLCBcIlRob21wc29uXCIsIFwiV2hpdGVcIixcblx0XHRcdFx0XCJMb3BlelwiLCBcIkxlZVwiLCBcIkdvbnphbGV6XCIsIFwiSGFycmlzXCIsIFwiQ2xhcmtcIixcblx0XHRcdFx0XCJMZXdpc1wiLCBcIlJvYmluc29uXCIsIFwiV2Fsa2VyXCIsIFwiUGVyZXpcIiwgXCJIYWxsXCIsXG5cdFx0XHRcdFwiWW91bmdcIiwgXCJBbGxlblwiXG5cdFx0XHRdXG5cdFx0XHRyZXR1cm4gdGhpcy5waWNrKG5hbWVzKVxuXHRcdFx0XHQvLyBvciB0aGlzLmNhcGl0YWxpemUodGhpcy53b3JkKCkpXG5cdFx0fSxcblx0XHQvLyDpmo/mnLrnlJ/miJDkuIDkuKrluLjop4HnmoToi7Hmloflp5PlkI3jgIJcblx0XHRuYW1lOiBmdW5jdGlvbihtaWRkbGUpIHtcblx0XHRcdHJldHVybiB0aGlzLmZpcnN0KCkgKyAnICcgK1xuXHRcdFx0XHQobWlkZGxlID8gdGhpcy5maXJzdCgpICsgJyAnIDogJycpICtcblx0XHRcdFx0dGhpcy5sYXN0KClcblx0XHR9LFxuXHRcdC8qXG5cdFx0ICAgIOmaj+acuueUn+aIkOS4gOS4quW4uOingeeahOS4reaWh+Wnk+OAglxuXHRcdCAgICBb5LiW55WM5bi455So5aeT5rCP5o6S6KGMXShodHRwOi8vYmFpa2UuYmFpZHUuY29tL3ZpZXcvMTcxOTExNS5odG0pXG5cdFx0ICAgIFvnjoTmtL7nvZEgLSDnvZHnu5zlsI/or7TliJvkvZzovoXliqnlubPlj7BdKGh0dHA6Ly94dWFucGFpLnNpbmFhcHAuY29tLylcblx0XHQgKi9cblx0XHRjZmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5hbWVzID0gKFxuXHRcdFx0XHQn546LIOadjiDlvKAg5YiYIOmZiCDmnagg6LW1IOm7hCDlkagg5ZC0ICcgK1xuXHRcdFx0XHQn5b6QIOWtmSDog6Eg5pyxIOmrmCDmnpcg5L2VIOmDrSDpqawg572XICcgK1xuXHRcdFx0XHQn5qKBIOWuiyDpg5Eg6LCiIOmfqSDllJAg5YavIOS6jiDokaMg6JCnICcgK1xuXHRcdFx0XHQn56iLIOabuSDoooEg6YKTIOiuuCDlgoUg5rKIIOabviDlva0g5ZCVICcgK1xuXHRcdFx0XHQn6IuPIOWNoiDokosg6JShIOi0viDkuIEg6a2PIOiWmyDlj7Yg6ZiOICcgK1xuXHRcdFx0XHQn5L2ZIOa9mCDmnZwg5oi0IOWkjyDplLog5rGqIOeUsCDku7sg5aecICcgK1xuXHRcdFx0XHQn6IyDIOaWuSDnn7Mg5aeaIOiwrSDlu5Yg6YK5IOeGiiDph5Eg6ZmGICcgK1xuXHRcdFx0XHQn6YOdIOWtlCDnmb0g5bSUIOW6tyDmr5sg6YKxIOenpiDmsZ8g5Y+yICcgK1xuXHRcdFx0XHQn6aG+IOS+ryDpgrUg5a2fIOm+mSDkuIcg5q61IOmbtyDpkrEg5rGkICcgK1xuXHRcdFx0XHQn5bC5IOm7jiDmmJMg5bi4IOatpiDkuZQg6LS6IOi1liDpvpog5paHJ1xuXHRcdFx0KS5zcGxpdCgnICcpXG5cdFx0XHRyZXR1cm4gdGhpcy5waWNrKG5hbWVzKVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgICAg6ZqP5py655Sf5oiQ5LiA5Liq5bi46KeB55qE5Lit5paH5ZCN44CCXG5cdFx0ICAgIFvkuK3lm73mnIDluLjop4HlkI3lrZfliY01MOWQjV/kuInkuZ3nrpflkb3nvZFdKGh0dHA6Ly93d3cubmFtZTk5OS5uZXQveGluZ21pbmcveGluZ3NoaS8yMDEzMTAwNC80OC5odG1sKVxuXHRcdCAqL1xuXHRcdGNsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBuYW1lcyA9IChcblx0XHRcdFx0J+S8nyDoirMg5aicIOengOiLsSDmlY8g6Z2ZIOS4vSDlvLog56OKIOWGmyAnICtcblx0XHRcdFx0J+a0iyDli4cg6ImzIOadsCDlqJ8g5rabIOaYjiDotoUg56eA5YWwIOmcniAnICtcblx0XHRcdFx0J+W5syDliJog5qGC6IuxJ1xuXHRcdFx0KS5zcGxpdCgnICcpXG5cdFx0XHRyZXR1cm4gdGhpcy5waWNrKG5hbWVzKVxuXHRcdH0sXG5cdFx0Ly8g6ZqP5py655Sf5oiQ5LiA5Liq5bi46KeB55qE5Lit5paH5aeT5ZCN44CCXG5cdFx0Y25hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY2ZpcnN0KCkgKyB0aGlzLmNsYXN0KClcblx0XHR9XG5cdH1cblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qXG5cdCAgICAjIyBXZWJcblx0Ki9cblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgICAvKlxuXHQgICAgICAgIOmaj+acuueUn+aIkOS4gOS4qiBVUkzjgIJcblxuXHQgICAgICAgIFtVUkwg6KeE6IyDXShodHRwOi8vd3d3LnczLm9yZy9BZGRyZXNzaW5nL1VSTC91cmwtc3BlYy50eHQpXG5cdCAgICAgICAgICAgIGh0dHAgICAgICAgICAgICAgICAgICAgIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCBcblx0ICAgICAgICAgICAgZnRwICAgICAgICAgICAgICAgICAgICAgRmlsZSBUcmFuc2ZlciBwcm90b2NvbCBcblx0ICAgICAgICAgICAgZ29waGVyICAgICAgICAgICAgICAgICAgVGhlIEdvcGhlciBwcm90b2NvbCBcblx0ICAgICAgICAgICAgbWFpbHRvICAgICAgICAgICAgICAgICAgRWxlY3Ryb25pYyBtYWlsIGFkZHJlc3MgXG5cdCAgICAgICAgICAgIG1pZCAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgaWRlbnRpZmllcnMgZm9yIGVsZWN0cm9uaWMgbWFpbCBcblx0ICAgICAgICAgICAgY2lkICAgICAgICAgICAgICAgICAgICAgQ29udGVudCBpZGVudGlmaWVycyBmb3IgTUlNRSBib2R5IHBhcnQgXG5cdCAgICAgICAgICAgIG5ld3MgICAgICAgICAgICAgICAgICAgIFVzZW5ldCBuZXdzIFxuXHQgICAgICAgICAgICBubnRwICAgICAgICAgICAgICAgICAgICBVc2VuZXQgbmV3cyBmb3IgbG9jYWwgTk5UUCBhY2Nlc3Mgb25seSBcblx0ICAgICAgICAgICAgcHJvc3Blcm8gICAgICAgICAgICAgICAgQWNjZXNzIHVzaW5nIHRoZSBwcm9zcGVybyBwcm90b2NvbHMgXG5cdCAgICAgICAgICAgIHRlbG5ldCBybG9naW4gdG4zMjcwICAgIFJlZmVyZW5jZSB0byBpbnRlcmFjdGl2ZSBzZXNzaW9uc1xuXHQgICAgICAgICAgICB3YWlzICAgICAgICAgICAgICAgICAgICBXaWRlIEFyZWEgSW5mb3JtYXRpb24gU2VydmVycyBcblx0ICAgICovXG5cdCAgICB1cmw6IGZ1bmN0aW9uKHByb3RvY29sLCBob3N0KSB7XG5cdCAgICAgICAgcmV0dXJuIChwcm90b2NvbCB8fCB0aGlzLnByb3RvY29sKCkpICsgJzovLycgKyAvLyBwcm90b2NvbD9cblx0ICAgICAgICAgICAgKGhvc3QgfHwgdGhpcy5kb21haW4oKSkgKyAvLyBob3N0P1xuXHQgICAgICAgICAgICAnLycgKyB0aGlzLndvcmQoKVxuXHQgICAgfSxcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOS4qiBVUkwg5Y2P6K6u44CCXG5cdCAgICBwcm90b2NvbDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGljayhcblx0ICAgICAgICAgICAgLy8g5Y2P6K6u57CHXG5cdCAgICAgICAgICAgICdodHRwIGZ0cCBnb3BoZXIgbWFpbHRvIG1pZCBjaWQgbmV3cyBubnRwIHByb3NwZXJvIHRlbG5ldCBybG9naW4gdG4zMjcwIHdhaXMnLnNwbGl0KCcgJylcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq5Z+f5ZCN44CCXG5cdCAgICBkb21haW46IGZ1bmN0aW9uKHRsZCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLndvcmQoKSArICcuJyArICh0bGQgfHwgdGhpcy50bGQoKSlcblx0ICAgIH0sXG5cdCAgICAvKlxuXHQgICAgICAgIOmaj+acuueUn+aIkOS4gOS4qumhtue6p+Wfn+WQjeOAglxuXHQgICAgICAgIOWbvemZhemhtue6p+Wfn+WQjSBpbnRlcm5hdGlvbmFsIHRvcC1sZXZlbCBkb21haW4tbmFtZXMsIGlUTERzXG5cdCAgICAgICAg5Zu95a626aG257qn5Z+f5ZCNIG5hdGlvbmFsIHRvcC1sZXZlbCBkb21haW5uYW1lcywgblRMRHNcblx0ICAgICAgICBb5Z+f5ZCN5ZCO57yA5aSn5YWoXShodHRwOi8vd3d3LjE2M25zLmNvbS96aXh1bi9wb3N0LzQ0MTcuaHRtbClcblx0ICAgICovXG5cdCAgICB0bGQ6IGZ1bmN0aW9uKCkgeyAvLyBUb3AgTGV2ZWwgRG9tYWluXG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGljayhcblx0ICAgICAgICAgICAgKFxuXHQgICAgICAgICAgICAgICAgLy8g5Z+f5ZCN5ZCO57yAXG5cdCAgICAgICAgICAgICAgICAnY29tIG5ldCBvcmcgZWR1IGdvdiBpbnQgbWlsIGNuICcgK1xuXHQgICAgICAgICAgICAgICAgLy8g5Zu95YaF5Z+f5ZCNXG5cdCAgICAgICAgICAgICAgICAnY29tLmNuIG5ldC5jbiBnb3YuY24gb3JnLmNuICcgK1xuXHQgICAgICAgICAgICAgICAgLy8g5Lit5paH5Zu95YaF5Z+f5ZCNXG5cdCAgICAgICAgICAgICAgICAn5Lit5Zu9IOS4reWbveS6kuiBlC7lhazlj7gg5Lit5Zu95LqS6IGULue9kee7nCAnICtcblx0ICAgICAgICAgICAgICAgIC8vIOaWsOWbvemZheWfn+WQjVxuXHQgICAgICAgICAgICAgICAgJ3RlbCBiaXogY2MgdHYgaW5mbyBuYW1lIGhrIG1vYmkgYXNpYSBjZCB0cmF2ZWwgcHJvIG11c2V1bSBjb29wIGFlcm8gJyArXG5cdCAgICAgICAgICAgICAgICAvLyDkuJbnlYzlkITlm73ln5/lkI3lkI7nvIBcblx0ICAgICAgICAgICAgICAgICdhZCBhZSBhZiBhZyBhaSBhbCBhbSBhbiBhbyBhcSBhciBhcyBhdCBhdSBhdyBheiBiYSBiYiBiZCBiZSBiZiBiZyBiaCBiaSBiaiBibSBibiBibyBiciBicyBidCBidiBidyBieSBieiBjYSBjYyBjZiBjZyBjaCBjaSBjayBjbCBjbSBjbiBjbyBjcSBjciBjdSBjdiBjeCBjeSBjeiBkZSBkaiBkayBkbSBkbyBkeiBlYyBlZSBlZyBlaCBlcyBldCBldiBmaSBmaiBmayBmbSBmbyBmciBnYSBnYiBnZCBnZSBnZiBnaCBnaSBnbCBnbSBnbiBncCBnciBndCBndSBndyBneSBoayBobSBobiBociBodCBodSBpZCBpZSBpbCBpbiBpbyBpcSBpciBpcyBpdCBqbSBqbyBqcCBrZSBrZyBraCBraSBrbSBrbiBrcCBrciBrdyBreSBreiBsYSBsYiBsYyBsaSBsayBsciBscyBsdCBsdSBsdiBseSBtYSBtYyBtZCBtZyBtaCBtbCBtbSBtbiBtbyBtcCBtcSBtciBtcyBtdCBtdiBtdyBteCBteSBteiBuYSBuYyBuZSBuZiBuZyBuaSBubCBubyBucCBuciBudCBudSBueiBvbSBxYSBwYSBwZSBwZiBwZyBwaCBwayBwbCBwbSBwbiBwciBwdCBwdyBweSByZSBybyBydSBydyBzYSBzYiBzYyBzZCBzZSBzZyBzaCBzaSBzaiBzayBzbCBzbSBzbiBzbyBzciBzdCBzdSBzeSBzeiB0YyB0ZCB0ZiB0ZyB0aCB0aiB0ayB0bSB0biB0byB0cCB0ciB0dCB0diB0dyB0eiB1YSB1ZyB1ayB1cyB1eSB2YSB2YyB2ZSB2ZyB2biB2dSB3ZiB3cyB5ZSB5dSB6YSB6bSB6ciB6dydcblx0ICAgICAgICAgICAgKS5zcGxpdCgnICcpXG5cdCAgICAgICAgKVxuXHQgICAgfSxcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOS4qumCruS7tuWcsOWdgOOAglxuXHQgICAgZW1haWw6IGZ1bmN0aW9uKGRvbWFpbikge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNoYXJhY3RlcignbG93ZXInKSArICcuJyArIHRoaXMud29yZCgpICsgJ0AnICtcblx0ICAgICAgICAgICAgKFxuXHQgICAgICAgICAgICAgICAgZG9tYWluIHx8XG5cdCAgICAgICAgICAgICAgICAodGhpcy53b3JkKCkgKyAnLicgKyB0aGlzLnRsZCgpKVxuXHQgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLmNoYXJhY3RlcignbG93ZXInKSArICcuJyArIHRoaXMubGFzdCgpLnRvTG93ZXJDYXNlKCkgKyAnQCcgKyB0aGlzLmxhc3QoKS50b0xvd2VyQ2FzZSgpICsgJy4nICsgdGhpcy50bGQoKVxuXHQgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy53b3JkKCkgKyAnQCcgKyAoZG9tYWluIHx8IHRoaXMuZG9tYWluKCkpXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5LiqIElQIOWcsOWdgOOAglxuXHQgICAgaXA6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm5hdHVyYWwoMCwgMjU1KSArICcuJyArXG5cdCAgICAgICAgICAgIHRoaXMubmF0dXJhbCgwLCAyNTUpICsgJy4nICtcblx0ICAgICAgICAgICAgdGhpcy5uYXR1cmFsKDAsIDI1NSkgKyAnLicgK1xuXHQgICAgICAgICAgICB0aGlzLm5hdHVyYWwoMCwgMjU1KVxuXHQgICAgfVxuXHR9XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKlxuXHQgICAgIyMgQWRkcmVzc1xuXHQqL1xuXG5cdHZhciBESUNUID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOClcblx0dmFyIFJFR0lPTiA9IFsn5Lic5YyXJywgJ+WNjuWMlycsICfljY7kuJwnLCAn5Y2O5LitJywgJ+WNjuWNlycsICfopb/ljZcnLCAn6KW/5YyXJ11cblxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICAgIC8vIOmaj+acuueUn+aIkOS4gOS4quWkp+WMuuOAglxuXHQgICAgcmVnaW9uOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5waWNrKFJFR0lPTilcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrvvIjkuK3lm73vvInnnIHvvIjmiJbnm7TovpbluILjgIHoh6rmsrvljLrjgIHnibnliKvooYzmlL/ljLrvvInjgIJcblx0ICAgIHByb3ZpbmNlOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5waWNrKERJQ1QpLm5hbWVcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrvvIjkuK3lm73vvInluILjgIJcblx0ICAgIGNpdHk6IGZ1bmN0aW9uKHByZWZpeCkge1xuXHQgICAgICAgIHZhciBwcm92aW5jZSA9IHRoaXMucGljayhESUNUKVxuXHQgICAgICAgIHZhciBjaXR5ID0gdGhpcy5waWNrKHByb3ZpbmNlLmNoaWxkcmVuKVxuXHQgICAgICAgIHJldHVybiBwcmVmaXggPyBbcHJvdmluY2UubmFtZSwgY2l0eS5uYW1lXS5qb2luKCcgJykgOiBjaXR5Lm5hbWVcblx0ICAgIH0sXG5cdCAgICAvLyDpmo/mnLrnlJ/miJDkuIDkuKrvvIjkuK3lm73vvInljr/jgIJcblx0ICAgIGNvdW50eTogZnVuY3Rpb24ocHJlZml4KSB7XG5cdCAgICAgICAgdmFyIHByb3ZpbmNlID0gdGhpcy5waWNrKERJQ1QpXG5cdCAgICAgICAgdmFyIGNpdHkgPSB0aGlzLnBpY2socHJvdmluY2UuY2hpbGRyZW4pXG5cdCAgICAgICAgdmFyIGNvdW50eSA9IHRoaXMucGljayhjaXR5LmNoaWxkcmVuKSB8fCB7XG5cdCAgICAgICAgICAgIG5hbWU6ICctJ1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gcHJlZml4ID8gW3Byb3ZpbmNlLm5hbWUsIGNpdHkubmFtZSwgY291bnR5Lm5hbWVdLmpvaW4oJyAnKSA6IGNvdW50eS5uYW1lXG5cdCAgICB9LFxuXHQgICAgLy8g6ZqP5py655Sf5oiQ5LiA5Liq6YKu5pS/57yW56CB77yI5YWt5L2N5pWw5a2X77yJ44CCXG5cdCAgICB6aXA6IGZ1bmN0aW9uKGxlbikge1xuXHQgICAgICAgIHZhciB6aXAgPSAnJ1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGxlbiB8fCA2KTsgaSsrKSB6aXAgKz0gdGhpcy5uYXR1cmFsKDAsIDkpXG5cdCAgICAgICAgcmV0dXJuIHppcFxuXHQgICAgfVxuXG5cdCAgICAvLyBhZGRyZXNzOiBmdW5jdGlvbigpIHt9LFxuXHQgICAgLy8gcGhvbmU6IGZ1bmN0aW9uKCkge30sXG5cdCAgICAvLyBhcmVhY29kZTogZnVuY3Rpb24oKSB7fSxcblx0ICAgIC8vIHN0cmVldDogZnVuY3Rpb24oKSB7fSxcblx0ICAgIC8vIHN0cmVldF9zdWZmaXhlczogZnVuY3Rpb24oKSB7fSxcblx0ICAgIC8vIHN0cmVldF9zdWZmaXg6IGZ1bmN0aW9uKCkge30sXG5cdCAgICAvLyBzdGF0ZXM6IGZ1bmN0aW9uKCkge30sXG5cdCAgICAvLyBzdGF0ZTogZnVuY3Rpb24oKSB7fSxcblx0fVxuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Lypcblx0ICAgICMjIEFkZHJlc3Mg5a2X5YW45pWw5o2uXG5cblx0ICAgIOWtl+WFuOaVsOaNruadpea6kCBodHRwOi8vd3d3LmF0YXRlY2gub3JnL2FydGljbGVzLzMwMDI4P3JuZD0yNTQyNTk4NTZcblxuXHQgICAg5Zu95qCHIOecge+8iOW4gu+8iee6p+ihjOaUv+WMuuWIkueggeihqFxuXG5cdCAgICDljY7ljJcgICDljJfkuqzluIIg5aSp5rSl5biCIOays+WMl+ecgSDlsbHopb/nnIEg5YaF6JKZ5Y+k6Ieq5rK75Yy6XG5cdCAgICDkuJzljJcgICDovr3lroHnnIEg5ZCJ5p6X55yBIOm7kem+meaxn+ecgVxuXHQgICAg5Y2O5LicICAg5LiK5rW35biCIOaxn+iLj+ecgSDmtZnmsZ/nnIEg5a6J5b6955yBIOemj+W7uuecgSDmsZ/opb/nnIEg5bGx5Lic55yBXG5cdCAgICDljY7ljZcgICDlub/kuJznnIEg5bm/6KW/5aOu5peP6Ieq5rK75Yy6IOa1t+WNl+ecgVxuXHQgICAg5Y2O5LitICAg5rKz5Y2X55yBIOa5luWMl+ecgSDmuZbljZfnnIFcblx0ICAgIOilv+WNlyAgIOmHjeW6huW4giDlm5vlt53nnIEg6LS15bee55yBIOS6keWNl+ecgSDopb/ol4/oh6rmsrvljLpcblx0ICAgIOilv+WMlyAgIOmZleilv+ecgSDnlJjogoPnnIEg6Z2S5rW355yBIOWugeWkj+WbnuaXj+iHquayu+WMuiDmlrDnlobnu7TlkL7lsJToh6rmsrvljLpcblx0ICAgIOa4r+a+s+WPsCDpppnmuK/nibnliKvooYzmlL/ljLog5r6z6Zeo54m55Yir6KGM5pS/5Yy6IOWPsOa5vuecgVxuXHQgICAgXG5cdCAgICAqKuaOkuW6jyoqXG5cdCAgICBcblx0ICAgIGBgYGpzXG5cdCAgICB2YXIgbWFwID0ge31cblx0ICAgIF8uZWFjaChfLmtleXMoUkVHSU9OUyksZnVuY3Rpb24oaWQpe1xuXHQgICAgICBtYXBbaWRdID0gUkVHSU9OU1tJRF1cblx0ICAgIH0pXG5cdCAgICBKU09OLnN0cmluZ2lmeShtYXApXG5cdCAgICBgYGBcblx0Ki9cblx0dmFyIERJQ1QgPSB7XG5cdCAgICBcIjExMDAwMFwiOiBcIuWMl+S6rFwiLFxuXHQgICAgXCIxMTAxMDBcIjogXCLljJfkuqzluIJcIixcblx0ICAgIFwiMTEwMTAxXCI6IFwi5Lic5Z+O5Yy6XCIsXG5cdCAgICBcIjExMDEwMlwiOiBcIuilv+WfjuWMulwiLFxuXHQgICAgXCIxMTAxMDVcIjogXCLmnJ3pmLPljLpcIixcblx0ICAgIFwiMTEwMTA2XCI6IFwi5Liw5Y+w5Yy6XCIsXG5cdCAgICBcIjExMDEwN1wiOiBcIuefs+aZr+WxseWMulwiLFxuXHQgICAgXCIxMTAxMDhcIjogXCLmtbfmt4DljLpcIixcblx0ICAgIFwiMTEwMTA5XCI6IFwi6Zeo5aS05rKf5Yy6XCIsXG5cdCAgICBcIjExMDExMVwiOiBcIuaIv+WxseWMulwiLFxuXHQgICAgXCIxMTAxMTJcIjogXCLpgJrlt57ljLpcIixcblx0ICAgIFwiMTEwMTEzXCI6IFwi6aG65LmJ5Yy6XCIsXG5cdCAgICBcIjExMDExNFwiOiBcIuaYjOW5s+WMulwiLFxuXHQgICAgXCIxMTAxMTVcIjogXCLlpKflhbTljLpcIixcblx0ICAgIFwiMTEwMTE2XCI6IFwi5oCA5p+U5Yy6XCIsXG5cdCAgICBcIjExMDExN1wiOiBcIuW5s+iwt+WMulwiLFxuXHQgICAgXCIxMTAyMjhcIjogXCLlr4bkupHljr9cIixcblx0ICAgIFwiMTEwMjI5XCI6IFwi5bu25bqG5Y6/XCIsXG5cdCAgICBcIjExMDIzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMjAwMDBcIjogXCLlpKnmtKVcIixcblx0ICAgIFwiMTIwMTAwXCI6IFwi5aSp5rSl5biCXCIsXG5cdCAgICBcIjEyMDEwMVwiOiBcIuWSjOW5s+WMulwiLFxuXHQgICAgXCIxMjAxMDJcIjogXCLmsrPkuJzljLpcIixcblx0ICAgIFwiMTIwMTAzXCI6IFwi5rKz6KW/5Yy6XCIsXG5cdCAgICBcIjEyMDEwNFwiOiBcIuWNl+W8gOWMulwiLFxuXHQgICAgXCIxMjAxMDVcIjogXCLmsrPljJfljLpcIixcblx0ICAgIFwiMTIwMTA2XCI6IFwi57qi5qGl5Yy6XCIsXG5cdCAgICBcIjEyMDExMFwiOiBcIuS4nOS4veWMulwiLFxuXHQgICAgXCIxMjAxMTFcIjogXCLopb/pnZLljLpcIixcblx0ICAgIFwiMTIwMTEyXCI6IFwi5rSl5Y2X5Yy6XCIsXG5cdCAgICBcIjEyMDExM1wiOiBcIuWMl+i+sOWMulwiLFxuXHQgICAgXCIxMjAxMTRcIjogXCLmrabmuIXljLpcIixcblx0ICAgIFwiMTIwMTE1XCI6IFwi5a6d5Z275Yy6XCIsXG5cdCAgICBcIjEyMDExNlwiOiBcIua7qOa1t+aWsOWMulwiLFxuXHQgICAgXCIxMjAyMjFcIjogXCLlroHmsrPljr9cIixcblx0ICAgIFwiMTIwMjIzXCI6IFwi6Z2Z5rW35Y6/XCIsXG5cdCAgICBcIjEyMDIyNVwiOiBcIuiTn+WOv1wiLFxuXHQgICAgXCIxMjAyMjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwMDAwXCI6IFwi5rKz5YyX55yBXCIsXG5cdCAgICBcIjEzMDEwMFwiOiBcIuefs+WutuW6hOW4glwiLFxuXHQgICAgXCIxMzAxMDJcIjogXCLplb/lronljLpcIixcblx0ICAgIFwiMTMwMTAzXCI6IFwi5qGl5Lic5Yy6XCIsXG5cdCAgICBcIjEzMDEwNFwiOiBcIuahpeilv+WMulwiLFxuXHQgICAgXCIxMzAxMDVcIjogXCLmlrDljY7ljLpcIixcblx0ICAgIFwiMTMwMTA3XCI6IFwi5LqV6ZmJ55+/5Yy6XCIsXG5cdCAgICBcIjEzMDEwOFwiOiBcIuijleWNjuWMulwiLFxuXHQgICAgXCIxMzAxMjFcIjogXCLkupXpmYnljr9cIixcblx0ICAgIFwiMTMwMTIzXCI6IFwi5q2j5a6a5Y6/XCIsXG5cdCAgICBcIjEzMDEyNFwiOiBcIuagvuWfjuWOv1wiLFxuXHQgICAgXCIxMzAxMjVcIjogXCLooYzllJDljr9cIixcblx0ICAgIFwiMTMwMTI2XCI6IFwi54G15a+/5Y6/XCIsXG5cdCAgICBcIjEzMDEyN1wiOiBcIumrmOmCkeWOv1wiLFxuXHQgICAgXCIxMzAxMjhcIjogXCLmt7Hms73ljr9cIixcblx0ICAgIFwiMTMwMTI5XCI6IFwi6LWe55qH5Y6/XCIsXG5cdCAgICBcIjEzMDEzMFwiOiBcIuaXoOaegeWOv1wiLFxuXHQgICAgXCIxMzAxMzFcIjogXCLlubPlsbHljr9cIixcblx0ICAgIFwiMTMwMTMyXCI6IFwi5YWD5rCP5Y6/XCIsXG5cdCAgICBcIjEzMDEzM1wiOiBcIui1teWOv1wiLFxuXHQgICAgXCIxMzAxODFcIjogXCLovpvpm4bluIJcIixcblx0ICAgIFwiMTMwMTgyXCI6IFwi6JeB5Z+O5biCXCIsXG5cdCAgICBcIjEzMDE4M1wiOiBcIuaZi+W3nuW4glwiLFxuXHQgICAgXCIxMzAxODRcIjogXCLmlrDkuZDluIJcIixcblx0ICAgIFwiMTMwMTg1XCI6IFwi6bm/5rOJ5biCXCIsXG5cdCAgICBcIjEzMDE4NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzAyMDBcIjogXCLllJDlsbHluIJcIixcblx0ICAgIFwiMTMwMjAyXCI6IFwi6Lev5Y2X5Yy6XCIsXG5cdCAgICBcIjEzMDIwM1wiOiBcIui3r+WMl+WMulwiLFxuXHQgICAgXCIxMzAyMDRcIjogXCLlj6TlhrbljLpcIixcblx0ICAgIFwiMTMwMjA1XCI6IFwi5byA5bmz5Yy6XCIsXG5cdCAgICBcIjEzMDIwN1wiOiBcIuS4sOWNl+WMulwiLFxuXHQgICAgXCIxMzAyMDhcIjogXCLkuLDmtqbljLpcIixcblx0ICAgIFwiMTMwMjIzXCI6IFwi5rum5Y6/XCIsXG5cdCAgICBcIjEzMDIyNFwiOiBcIua7puWNl+WOv1wiLFxuXHQgICAgXCIxMzAyMjVcIjogXCLkuZDkuq3ljr9cIixcblx0ICAgIFwiMTMwMjI3XCI6IFwi6L+B6KW/5Y6/XCIsXG5cdCAgICBcIjEzMDIyOVwiOiBcIueOieeUsOWOv1wiLFxuXHQgICAgXCIxMzAyMzBcIjogXCLmm7nlpoPnlLjljLpcIixcblx0ICAgIFwiMTMwMjgxXCI6IFwi6YG15YyW5biCXCIsXG5cdCAgICBcIjEzMDI4M1wiOiBcIui/geWuieW4glwiLFxuXHQgICAgXCIxMzAyODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwMzAwXCI6IFwi56em55qH5bKb5biCXCIsXG5cdCAgICBcIjEzMDMwMlwiOiBcIua1t+a4r+WMulwiLFxuXHQgICAgXCIxMzAzMDNcIjogXCLlsbHmtbflhbPljLpcIixcblx0ICAgIFwiMTMwMzA0XCI6IFwi5YyX5oi05rKz5Yy6XCIsXG5cdCAgICBcIjEzMDMyMVwiOiBcIumdkum+mea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIxMzAzMjJcIjogXCLmmIzpu47ljr9cIixcblx0ICAgIFwiMTMwMzIzXCI6IFwi5oqa5a6B5Y6/XCIsXG5cdCAgICBcIjEzMDMyNFwiOiBcIuWNoum+meWOv1wiLFxuXHQgICAgXCIxMzAzOThcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNDAwXCI6IFwi6YKv6YO45biCXCIsXG5cdCAgICBcIjEzMDQwMlwiOiBcIumCr+WxseWMulwiLFxuXHQgICAgXCIxMzA0MDNcIjogXCLkuJvlj7DljLpcIixcblx0ICAgIFwiMTMwNDA0XCI6IFwi5aSN5YW05Yy6XCIsXG5cdCAgICBcIjEzMDQwNlwiOiBcIuWzsOWzsOefv+WMulwiLFxuXHQgICAgXCIxMzA0MjFcIjogXCLpgq/pg7jljr9cIixcblx0ICAgIFwiMTMwNDIzXCI6IFwi5Li05ryz5Y6/XCIsXG5cdCAgICBcIjEzMDQyNFwiOiBcIuaIkOWuieWOv1wiLFxuXHQgICAgXCIxMzA0MjVcIjogXCLlpKflkI3ljr9cIixcblx0ICAgIFwiMTMwNDI2XCI6IFwi5raJ5Y6/XCIsXG5cdCAgICBcIjEzMDQyN1wiOiBcIuejgeWOv1wiLFxuXHQgICAgXCIxMzA0MjhcIjogXCLogqXkuaHljr9cIixcblx0ICAgIFwiMTMwNDI5XCI6IFwi5rC45bm05Y6/XCIsXG5cdCAgICBcIjEzMDQzMFwiOiBcIumCseWOv1wiLFxuXHQgICAgXCIxMzA0MzFcIjogXCLpuKHms73ljr9cIixcblx0ICAgIFwiMTMwNDMyXCI6IFwi5bm/5bmz5Y6/XCIsXG5cdCAgICBcIjEzMDQzM1wiOiBcIummhumZtuWOv1wiLFxuXHQgICAgXCIxMzA0MzRcIjogXCLprY/ljr9cIixcblx0ICAgIFwiMTMwNDM1XCI6IFwi5puy5ZGo5Y6/XCIsXG5cdCAgICBcIjEzMDQ4MVwiOiBcIuatpuWuieW4glwiLFxuXHQgICAgXCIxMzA0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNTAwXCI6IFwi6YKi5Y+w5biCXCIsXG5cdCAgICBcIjEzMDUwMlwiOiBcIuahpeS4nOWMulwiLFxuXHQgICAgXCIxMzA1MDNcIjogXCLmoaXopb/ljLpcIixcblx0ICAgIFwiMTMwNTIxXCI6IFwi6YKi5Y+w5Y6/XCIsXG5cdCAgICBcIjEzMDUyMlwiOiBcIuS4tOWfjuWOv1wiLFxuXHQgICAgXCIxMzA1MjNcIjogXCLlhoXkuJjljr9cIixcblx0ICAgIFwiMTMwNTI0XCI6IFwi5p+P5Lmh5Y6/XCIsXG5cdCAgICBcIjEzMDUyNVwiOiBcIumahuWwp+WOv1wiLFxuXHQgICAgXCIxMzA1MjZcIjogXCLku7vljr9cIixcblx0ICAgIFwiMTMwNTI3XCI6IFwi5Y2X5ZKM5Y6/XCIsXG5cdCAgICBcIjEzMDUyOFwiOiBcIuWugeaZi+WOv1wiLFxuXHQgICAgXCIxMzA1MjlcIjogXCLlt6jpub/ljr9cIixcblx0ICAgIFwiMTMwNTMwXCI6IFwi5paw5rKz5Y6/XCIsXG5cdCAgICBcIjEzMDUzMVwiOiBcIuW5v+Wul+WOv1wiLFxuXHQgICAgXCIxMzA1MzJcIjogXCLlubPkuaHljr9cIixcblx0ICAgIFwiMTMwNTMzXCI6IFwi5aiB5Y6/XCIsXG5cdCAgICBcIjEzMDUzNFwiOiBcIua4heays+WOv1wiLFxuXHQgICAgXCIxMzA1MzVcIjogXCLkuLTopb/ljr9cIixcblx0ICAgIFwiMTMwNTgxXCI6IFwi5Y2X5a6r5biCXCIsXG5cdCAgICBcIjEzMDU4MlwiOiBcIuaymeays+W4glwiLFxuXHQgICAgXCIxMzA1ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNjAwXCI6IFwi5L+d5a6a5biCXCIsXG5cdCAgICBcIjEzMDYwMlwiOiBcIuaWsOW4guWMulwiLFxuXHQgICAgXCIxMzA2MDNcIjogXCLljJfluILljLpcIixcblx0ICAgIFwiMTMwNjA0XCI6IFwi5Y2X5biC5Yy6XCIsXG5cdCAgICBcIjEzMDYyMVwiOiBcIua7oeWfjuWOv1wiLFxuXHQgICAgXCIxMzA2MjJcIjogXCLmuIXoi5Hljr9cIixcblx0ICAgIFwiMTMwNjIzXCI6IFwi5rae5rC05Y6/XCIsXG5cdCAgICBcIjEzMDYyNFwiOiBcIumYnOW5s+WOv1wiLFxuXHQgICAgXCIxMzA2MjVcIjogXCLlvpDmsLTljr9cIixcblx0ICAgIFwiMTMwNjI2XCI6IFwi5a6a5YW05Y6/XCIsXG5cdCAgICBcIjEzMDYyN1wiOiBcIuWUkOWOv1wiLFxuXHQgICAgXCIxMzA2MjhcIjogXCLpq5jpmLPljr9cIixcblx0ICAgIFwiMTMwNjI5XCI6IFwi5a655Z+O5Y6/XCIsXG5cdCAgICBcIjEzMDYzMFwiOiBcIua2nua6kOWOv1wiLFxuXHQgICAgXCIxMzA2MzFcIjogXCLmnJvpg73ljr9cIixcblx0ICAgIFwiMTMwNjMyXCI6IFwi5a6J5paw5Y6/XCIsXG5cdCAgICBcIjEzMDYzM1wiOiBcIuaYk+WOv1wiLFxuXHQgICAgXCIxMzA2MzRcIjogXCLmm7LpmLPljr9cIixcblx0ICAgIFwiMTMwNjM1XCI6IFwi6KCh5Y6/XCIsXG5cdCAgICBcIjEzMDYzNlwiOiBcIumhuuW5s+WOv1wiLFxuXHQgICAgXCIxMzA2MzdcIjogXCLljZrph47ljr9cIixcblx0ICAgIFwiMTMwNjM4XCI6IFwi6ZuE5Y6/XCIsXG5cdCAgICBcIjEzMDY4MVwiOiBcIua2v+W3nuW4glwiLFxuXHQgICAgXCIxMzA2ODJcIjogXCLlrprlt57luIJcIixcblx0ICAgIFwiMTMwNjgzXCI6IFwi5a6J5Zu95biCXCIsXG5cdCAgICBcIjEzMDY4NFwiOiBcIumrmOeikeW6l+W4glwiLFxuXHQgICAgXCIxMzA2OTlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTMwNzAwXCI6IFwi5byg5a625Y+j5biCXCIsXG5cdCAgICBcIjEzMDcwMlwiOiBcIuahpeS4nOWMulwiLFxuXHQgICAgXCIxMzA3MDNcIjogXCLmoaXopb/ljLpcIixcblx0ICAgIFwiMTMwNzA1XCI6IFwi5a6j5YyW5Yy6XCIsXG5cdCAgICBcIjEzMDcwNlwiOiBcIuS4i+iKseWbreWMulwiLFxuXHQgICAgXCIxMzA3MjFcIjogXCLlrqPljJbljr9cIixcblx0ICAgIFwiMTMwNzIyXCI6IFwi5byg5YyX5Y6/XCIsXG5cdCAgICBcIjEzMDcyM1wiOiBcIuW6t+S/neWOv1wiLFxuXHQgICAgXCIxMzA3MjRcIjogXCLmsr3mupDljr9cIixcblx0ICAgIFwiMTMwNzI1XCI6IFwi5bCa5LmJ5Y6/XCIsXG5cdCAgICBcIjEzMDcyNlwiOiBcIuiUmuWOv1wiLFxuXHQgICAgXCIxMzA3MjdcIjogXCLpmLPljp/ljr9cIixcblx0ICAgIFwiMTMwNzI4XCI6IFwi5oCA5a6J5Y6/XCIsXG5cdCAgICBcIjEzMDcyOVwiOiBcIuS4h+WFqOWOv1wiLFxuXHQgICAgXCIxMzA3MzBcIjogXCLmgIDmnaXljr9cIixcblx0ICAgIFwiMTMwNzMxXCI6IFwi5ra/6bm/5Y6/XCIsXG5cdCAgICBcIjEzMDczMlwiOiBcIui1pOWfjuWOv1wiLFxuXHQgICAgXCIxMzA3MzNcIjogXCLltIfnpLzljr9cIixcblx0ICAgIFwiMTMwNzM0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjEzMDgwMFwiOiBcIuaJv+W+t+W4glwiLFxuXHQgICAgXCIxMzA4MDJcIjogXCLlj4zmoaXljLpcIixcblx0ICAgIFwiMTMwODAzXCI6IFwi5Y+M5rum5Yy6XCIsXG5cdCAgICBcIjEzMDgwNFwiOiBcIum5sOaJi+iQpeWtkOefv+WMulwiLFxuXHQgICAgXCIxMzA4MjFcIjogXCLmib/lvrfljr9cIixcblx0ICAgIFwiMTMwODIyXCI6IFwi5YW06ZqG5Y6/XCIsXG5cdCAgICBcIjEzMDgyM1wiOiBcIuW5s+azieWOv1wiLFxuXHQgICAgXCIxMzA4MjRcIjogXCLmu6blubPljr9cIixcblx0ICAgIFwiMTMwODI1XCI6IFwi6ZqG5YyW5Y6/XCIsXG5cdCAgICBcIjEzMDgyNlwiOiBcIuS4sOWugea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIxMzA4MjdcIjogXCLlrr3ln47mu6Hml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMTMwODI4XCI6IFwi5Zu05Zy65ruh5peP6JKZ5Y+k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjEzMDgyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzA5MDBcIjogXCLmsqflt57luIJcIixcblx0ICAgIFwiMTMwOTAyXCI6IFwi5paw5Y2O5Yy6XCIsXG5cdCAgICBcIjEzMDkwM1wiOiBcIui/kOays+WMulwiLFxuXHQgICAgXCIxMzA5MjFcIjogXCLmsqfljr9cIixcblx0ICAgIFwiMTMwOTIyXCI6IFwi6Z2S5Y6/XCIsXG5cdCAgICBcIjEzMDkyM1wiOiBcIuS4nOWFieWOv1wiLFxuXHQgICAgXCIxMzA5MjRcIjogXCLmtbflhbTljr9cIixcblx0ICAgIFwiMTMwOTI1XCI6IFwi55uQ5bGx5Y6/XCIsXG5cdCAgICBcIjEzMDkyNlwiOiBcIuiCg+WugeWOv1wiLFxuXHQgICAgXCIxMzA5MjdcIjogXCLljZfnmq7ljr9cIixcblx0ICAgIFwiMTMwOTI4XCI6IFwi5ZC05qGl5Y6/XCIsXG5cdCAgICBcIjEzMDkyOVwiOiBcIueMruWOv1wiLFxuXHQgICAgXCIxMzA5MzBcIjogXCLlrZ/mnZHlm57ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMTMwOTgxXCI6IFwi5rOK5aS05biCXCIsXG5cdCAgICBcIjEzMDk4MlwiOiBcIuS7u+S4mOW4glwiLFxuXHQgICAgXCIxMzA5ODNcIjogXCLpu4TpqoXluIJcIixcblx0ICAgIFwiMTMwOTg0XCI6IFwi5rKz6Ze05biCXCIsXG5cdCAgICBcIjEzMDk4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzEwMDBcIjogXCLlu4rlnYrluIJcIixcblx0ICAgIFwiMTMxMDAyXCI6IFwi5a6J5qyh5Yy6XCIsXG5cdCAgICBcIjEzMTAwM1wiOiBcIuW5v+mYs+WMulwiLFxuXHQgICAgXCIxMzEwMjJcIjogXCLlm7rlronljr9cIixcblx0ICAgIFwiMTMxMDIzXCI6IFwi5rC45riF5Y6/XCIsXG5cdCAgICBcIjEzMTAyNFwiOiBcIummmeays+WOv1wiLFxuXHQgICAgXCIxMzEwMjVcIjogXCLlpKfln47ljr9cIixcblx0ICAgIFwiMTMxMDI2XCI6IFwi5paH5a6J5Y6/XCIsXG5cdCAgICBcIjEzMTAyOFwiOiBcIuWkp+WOguWbnuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIxMzEwODFcIjogXCLpnLjlt57luIJcIixcblx0ICAgIFwiMTMxMDgyXCI6IFwi5LiJ5rKz5biCXCIsXG5cdCAgICBcIjEzMTA4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxMzExMDBcIjogXCLooaHmsLTluIJcIixcblx0ICAgIFwiMTMxMTAyXCI6IFwi5qGD5Z+O5Yy6XCIsXG5cdCAgICBcIjEzMTEyMVwiOiBcIuaeo+W8uuWOv1wiLFxuXHQgICAgXCIxMzExMjJcIjogXCLmrabpgpHljr9cIixcblx0ICAgIFwiMTMxMTIzXCI6IFwi5q2m5by65Y6/XCIsXG5cdCAgICBcIjEzMTEyNFwiOiBcIumltumYs+WOv1wiLFxuXHQgICAgXCIxMzExMjVcIjogXCLlronlubPljr9cIixcblx0ICAgIFwiMTMxMTI2XCI6IFwi5pWF5Z+O5Y6/XCIsXG5cdCAgICBcIjEzMTEyN1wiOiBcIuaZr+WOv1wiLFxuXHQgICAgXCIxMzExMjhcIjogXCLpmJzln47ljr9cIixcblx0ICAgIFwiMTMxMTgxXCI6IFwi5YaA5bee5biCXCIsXG5cdCAgICBcIjEzMTE4MlwiOiBcIua3seW3nuW4glwiLFxuXHQgICAgXCIxMzExODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQwMDAwXCI6IFwi5bGx6KW/55yBXCIsXG5cdCAgICBcIjE0MDEwMFwiOiBcIuWkquWOn+W4glwiLFxuXHQgICAgXCIxNDAxMDVcIjogXCLlsI/lupfljLpcIixcblx0ICAgIFwiMTQwMTA2XCI6IFwi6L+O5rO95Yy6XCIsXG5cdCAgICBcIjE0MDEwN1wiOiBcIuadj+iKseWyreWMulwiLFxuXHQgICAgXCIxNDAxMDhcIjogXCLlsJbojYnlnarljLpcIixcblx0ICAgIFwiMTQwMTA5XCI6IFwi5LiH5p+P5p6X5Yy6XCIsXG5cdCAgICBcIjE0MDExMFwiOiBcIuaZi+a6kOWMulwiLFxuXHQgICAgXCIxNDAxMjFcIjogXCLmuIXlvpDljr9cIixcblx0ICAgIFwiMTQwMTIyXCI6IFwi6Ziz5puy5Y6/XCIsXG5cdCAgICBcIjE0MDEyM1wiOiBcIuWohOeDpuWOv1wiLFxuXHQgICAgXCIxNDAxODFcIjogXCLlj6TkuqTluIJcIixcblx0ICAgIFwiMTQwMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE0MDIwMFwiOiBcIuWkp+WQjOW4glwiLFxuXHQgICAgXCIxNDAyMDJcIjogXCLln47ljLpcIixcblx0ICAgIFwiMTQwMjAzXCI6IFwi55+/5Yy6XCIsXG5cdCAgICBcIjE0MDIxMVwiOiBcIuWNl+mDiuWMulwiLFxuXHQgICAgXCIxNDAyMTJcIjogXCLmlrDojaPljLpcIixcblx0ICAgIFwiMTQwMjIxXCI6IFwi6Ziz6auY5Y6/XCIsXG5cdCAgICBcIjE0MDIyMlwiOiBcIuWkqemVh+WOv1wiLFxuXHQgICAgXCIxNDAyMjNcIjogXCLlub/ngbXljr9cIixcblx0ICAgIFwiMTQwMjI0XCI6IFwi54G15LiY5Y6/XCIsXG5cdCAgICBcIjE0MDIyNVwiOiBcIua1kea6kOWOv1wiLFxuXHQgICAgXCIxNDAyMjZcIjogXCLlt6bkupHljr9cIixcblx0ICAgIFwiMTQwMjI3XCI6IFwi5aSn5ZCM5Y6/XCIsXG5cdCAgICBcIjE0MDIyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDAzMDBcIjogXCLpmLPms4nluIJcIixcblx0ICAgIFwiMTQwMzAyXCI6IFwi5Z+O5Yy6XCIsXG5cdCAgICBcIjE0MDMwM1wiOiBcIuefv+WMulwiLFxuXHQgICAgXCIxNDAzMTFcIjogXCLpg4rljLpcIixcblx0ICAgIFwiMTQwMzIxXCI6IFwi5bmz5a6a5Y6/XCIsXG5cdCAgICBcIjE0MDMyMlwiOiBcIuebguWOv1wiLFxuXHQgICAgXCIxNDAzMjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQwNDAwXCI6IFwi6ZW/5rK75biCXCIsXG5cdCAgICBcIjE0MDQyMVwiOiBcIumVv+ayu+WOv1wiLFxuXHQgICAgXCIxNDA0MjNcIjogXCLopYTlnqPljr9cIixcblx0ICAgIFwiMTQwNDI0XCI6IFwi5bGv55WZ5Y6/XCIsXG5cdCAgICBcIjE0MDQyNVwiOiBcIuW5s+mhuuWOv1wiLFxuXHQgICAgXCIxNDA0MjZcIjogXCLpu47ln47ljr9cIixcblx0ICAgIFwiMTQwNDI3XCI6IFwi5aO25YWz5Y6/XCIsXG5cdCAgICBcIjE0MDQyOFwiOiBcIumVv+WtkOWOv1wiLFxuXHQgICAgXCIxNDA0MjlcIjogXCLmrabkuaHljr9cIixcblx0ICAgIFwiMTQwNDMwXCI6IFwi5rKB5Y6/XCIsXG5cdCAgICBcIjE0MDQzMVwiOiBcIuaygea6kOWOv1wiLFxuXHQgICAgXCIxNDA0ODFcIjogXCLmvZ7ln47luIJcIixcblx0ICAgIFwiMTQwNDgyXCI6IFwi5Z+O5Yy6XCIsXG5cdCAgICBcIjE0MDQ4M1wiOiBcIumDiuWMulwiLFxuXHQgICAgXCIxNDA0ODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQwNTAwXCI6IFwi5pmL5Z+O5biCXCIsXG5cdCAgICBcIjE0MDUwMlwiOiBcIuWfjuWMulwiLFxuXHQgICAgXCIxNDA1MjFcIjogXCLmsoHmsLTljr9cIixcblx0ICAgIFwiMTQwNTIyXCI6IFwi6Ziz5Z+O5Y6/XCIsXG5cdCAgICBcIjE0MDUyNFwiOiBcIumZteW3neWOv1wiLFxuXHQgICAgXCIxNDA1MjVcIjogXCLms73lt57ljr9cIixcblx0ICAgIFwiMTQwNTgxXCI6IFwi6auY5bmz5biCXCIsXG5cdCAgICBcIjE0MDU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDA2MDBcIjogXCLmnJTlt57luIJcIixcblx0ICAgIFwiMTQwNjAyXCI6IFwi5pyU5Z+O5Yy6XCIsXG5cdCAgICBcIjE0MDYwM1wiOiBcIuW5s+mygeWMulwiLFxuXHQgICAgXCIxNDA2MjFcIjogXCLlsbHpmLTljr9cIixcblx0ICAgIFwiMTQwNjIyXCI6IFwi5bqU5Y6/XCIsXG5cdCAgICBcIjE0MDYyM1wiOiBcIuWPs+eOieWOv1wiLFxuXHQgICAgXCIxNDA2MjRcIjogXCLmgIDku4Hljr9cIixcblx0ICAgIFwiMTQwNjI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE0MDcwMFwiOiBcIuaZi+S4reW4glwiLFxuXHQgICAgXCIxNDA3MDJcIjogXCLmpobmrKHljLpcIixcblx0ICAgIFwiMTQwNzIxXCI6IFwi5qaG56S+5Y6/XCIsXG5cdCAgICBcIjE0MDcyMlwiOiBcIuW3puadg+WOv1wiLFxuXHQgICAgXCIxNDA3MjNcIjogXCLlkozpobrljr9cIixcblx0ICAgIFwiMTQwNzI0XCI6IFwi5piU6Ziz5Y6/XCIsXG5cdCAgICBcIjE0MDcyNVwiOiBcIuWvv+mYs+WOv1wiLFxuXHQgICAgXCIxNDA3MjZcIjogXCLlpKrosLfljr9cIixcblx0ICAgIFwiMTQwNzI3XCI6IFwi56WB5Y6/XCIsXG5cdCAgICBcIjE0MDcyOFwiOiBcIuW5s+mBpeWOv1wiLFxuXHQgICAgXCIxNDA3MjlcIjogXCLngbXnn7Pljr9cIixcblx0ICAgIFwiMTQwNzgxXCI6IFwi5LuL5LyR5biCXCIsXG5cdCAgICBcIjE0MDc4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDA4MDBcIjogXCLov5Dln47luIJcIixcblx0ICAgIFwiMTQwODAyXCI6IFwi55uQ5rmW5Yy6XCIsXG5cdCAgICBcIjE0MDgyMVwiOiBcIuS4tOeMl+WOv1wiLFxuXHQgICAgXCIxNDA4MjJcIjogXCLkuIfojaPljr9cIixcblx0ICAgIFwiMTQwODIzXCI6IFwi6Ze75Zac5Y6/XCIsXG5cdCAgICBcIjE0MDgyNFwiOiBcIueot+WxseWOv1wiLFxuXHQgICAgXCIxNDA4MjVcIjogXCLmlrDnu5vljr9cIixcblx0ICAgIFwiMTQwODI2XCI6IFwi57ub5Y6/XCIsXG5cdCAgICBcIjE0MDgyN1wiOiBcIuWeo+absuWOv1wiLFxuXHQgICAgXCIxNDA4MjhcIjogXCLlpI/ljr9cIixcblx0ICAgIFwiMTQwODI5XCI6IFwi5bmz6ZmG5Y6/XCIsXG5cdCAgICBcIjE0MDgzMFwiOiBcIuiKruWfjuWOv1wiLFxuXHQgICAgXCIxNDA4ODFcIjogXCLmsLjmtY7luIJcIixcblx0ICAgIFwiMTQwODgyXCI6IFwi5rKz5rSl5biCXCIsXG5cdCAgICBcIjE0MDg4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNDA5MDBcIjogXCLlv7vlt57luIJcIixcblx0ICAgIFwiMTQwOTAyXCI6IFwi5b+75bqc5Yy6XCIsXG5cdCAgICBcIjE0MDkyMVwiOiBcIuWumuilhOWOv1wiLFxuXHQgICAgXCIxNDA5MjJcIjogXCLkupTlj7Dljr9cIixcblx0ICAgIFwiMTQwOTIzXCI6IFwi5Luj5Y6/XCIsXG5cdCAgICBcIjE0MDkyNFwiOiBcIue5geWzmeWOv1wiLFxuXHQgICAgXCIxNDA5MjVcIjogXCLlroHmrabljr9cIixcblx0ICAgIFwiMTQwOTI2XCI6IFwi6Z2Z5LmQ5Y6/XCIsXG5cdCAgICBcIjE0MDkyN1wiOiBcIuelnuaxoOWOv1wiLFxuXHQgICAgXCIxNDA5MjhcIjogXCLkupTlr6jljr9cIixcblx0ICAgIFwiMTQwOTI5XCI6IFwi5bKi5bKa5Y6/XCIsXG5cdCAgICBcIjE0MDkzMFwiOiBcIuays+absuWOv1wiLFxuXHQgICAgXCIxNDA5MzFcIjogXCLkv53lvrfljr9cIixcblx0ICAgIFwiMTQwOTMyXCI6IFwi5YGP5YWz5Y6/XCIsXG5cdCAgICBcIjE0MDk4MVwiOiBcIuWOn+W5s+W4glwiLFxuXHQgICAgXCIxNDA5ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTQxMDAwXCI6IFwi5Li05rG+5biCXCIsXG5cdCAgICBcIjE0MTAwMlwiOiBcIuWwp+mDveWMulwiLFxuXHQgICAgXCIxNDEwMjFcIjogXCLmm7LmsoPljr9cIixcblx0ICAgIFwiMTQxMDIyXCI6IFwi57+85Z+O5Y6/XCIsXG5cdCAgICBcIjE0MTAyM1wiOiBcIuilhOaxvuWOv1wiLFxuXHQgICAgXCIxNDEwMjRcIjogXCLmtKrmtJ7ljr9cIixcblx0ICAgIFwiMTQxMDI1XCI6IFwi5Y+k5Y6/XCIsXG5cdCAgICBcIjE0MTAyNlwiOiBcIuWuieazveWOv1wiLFxuXHQgICAgXCIxNDEwMjdcIjogXCLmta7lsbHljr9cIixcblx0ICAgIFwiMTQxMDI4XCI6IFwi5ZCJ5Y6/XCIsXG5cdCAgICBcIjE0MTAyOVwiOiBcIuS5oeWugeWOv1wiLFxuXHQgICAgXCIxNDEwMzBcIjogXCLlpKflroHljr9cIixcblx0ICAgIFwiMTQxMDMxXCI6IFwi6Zqw5Y6/XCIsXG5cdCAgICBcIjE0MTAzMlwiOiBcIuawuOWSjOWOv1wiLFxuXHQgICAgXCIxNDEwMzNcIjogXCLokrLljr9cIixcblx0ICAgIFwiMTQxMDM0XCI6IFwi5rG+6KW/5Y6/XCIsXG5cdCAgICBcIjE0MTA4MVwiOiBcIuS+r+mprOW4glwiLFxuXHQgICAgXCIxNDEwODJcIjogXCLpnI3lt57luIJcIixcblx0ICAgIFwiMTQxMDgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE0MTEwMFwiOiBcIuWQleaigeW4glwiLFxuXHQgICAgXCIxNDExMDJcIjogXCLnprvnn7PljLpcIixcblx0ICAgIFwiMTQxMTIxXCI6IFwi5paH5rC05Y6/XCIsXG5cdCAgICBcIjE0MTEyMlwiOiBcIuS6pOWfjuWOv1wiLFxuXHQgICAgXCIxNDExMjNcIjogXCLlhbTljr9cIixcblx0ICAgIFwiMTQxMTI0XCI6IFwi5Li05Y6/XCIsXG5cdCAgICBcIjE0MTEyNVwiOiBcIuafs+ael+WOv1wiLFxuXHQgICAgXCIxNDExMjZcIjogXCLnn7Pmpbzljr9cIixcblx0ICAgIFwiMTQxMTI3XCI6IFwi5bKa5Y6/XCIsXG5cdCAgICBcIjE0MTEyOFwiOiBcIuaWueWxseWOv1wiLFxuXHQgICAgXCIxNDExMjlcIjogXCLkuK3pmLPljr9cIixcblx0ICAgIFwiMTQxMTMwXCI6IFwi5Lqk5Y+j5Y6/XCIsXG5cdCAgICBcIjE0MTE4MVwiOiBcIuWtneS5ieW4glwiLFxuXHQgICAgXCIxNDExODJcIjogXCLmsb7pmLPluIJcIixcblx0ICAgIFwiMTQxMTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDAwMFwiOiBcIuWGheiSmeWPpOiHquayu+WMulwiLFxuXHQgICAgXCIxNTAxMDBcIjogXCLlkbzlkozmtannibnluIJcIixcblx0ICAgIFwiMTUwMTAyXCI6IFwi5paw5Z+O5Yy6XCIsXG5cdCAgICBcIjE1MDEwM1wiOiBcIuWbnuawkeWMulwiLFxuXHQgICAgXCIxNTAxMDRcIjogXCLnjonms4nljLpcIixcblx0ICAgIFwiMTUwMTA1XCI6IFwi6LWb572V5Yy6XCIsXG5cdCAgICBcIjE1MDEyMVwiOiBcIuWcn+m7mOeJueW3puaXl1wiLFxuXHQgICAgXCIxNTAxMjJcIjogXCLmiZjlhYvmiZjljr9cIixcblx0ICAgIFwiMTUwMTIzXCI6IFwi5ZKM5p6X5qC85bCU5Y6/XCIsXG5cdCAgICBcIjE1MDEyNFwiOiBcIua4heawtOays+WOv1wiLFxuXHQgICAgXCIxNTAxMjVcIjogXCLmrablt53ljr9cIixcblx0ICAgIFwiMTUwMTI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDIwMFwiOiBcIuWMheWktOW4glwiLFxuXHQgICAgXCIxNTAyMDJcIjogXCLkuJzmsrPljLpcIixcblx0ICAgIFwiMTUwMjAzXCI6IFwi5piG6YO95LuR5Yy6XCIsXG5cdCAgICBcIjE1MDIwNFwiOiBcIumdkuWxseWMulwiLFxuXHQgICAgXCIxNTAyMDVcIjogXCLnn7Pmi5DljLpcIixcblx0ICAgIFwiMTUwMjA2XCI6IFwi55m95LqR6YSC5Y2a55+/5Yy6XCIsXG5cdCAgICBcIjE1MDIwN1wiOiBcIuS5neWOn+WMulwiLFxuXHQgICAgXCIxNTAyMjFcIjogXCLlnJ/pu5jnibnlj7Pml5dcIixcblx0ICAgIFwiMTUwMjIyXCI6IFwi5Zu66Ziz5Y6/XCIsXG5cdCAgICBcIjE1MDIyM1wiOiBcIui+vuWwlOe9leiMguaYjuWuieiBlOWQiOaXl1wiLFxuXHQgICAgXCIxNTAyMjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTUwMzAwXCI6IFwi5LmM5rW35biCXCIsXG5cdCAgICBcIjE1MDMwMlwiOiBcIua1t+WLg+a5vuWMulwiLFxuXHQgICAgXCIxNTAzMDNcIjogXCLmtbfljZfljLpcIixcblx0ICAgIFwiMTUwMzA0XCI6IFwi5LmM6L6+5Yy6XCIsXG5cdCAgICBcIjE1MDMwNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNTA0MDBcIjogXCLotaTls7DluIJcIixcblx0ICAgIFwiMTUwNDAyXCI6IFwi57qi5bGx5Yy6XCIsXG5cdCAgICBcIjE1MDQwM1wiOiBcIuWFg+WuneWxseWMulwiLFxuXHQgICAgXCIxNTA0MDRcIjogXCLmnb7lsbHljLpcIixcblx0ICAgIFwiMTUwNDIxXCI6IFwi6Zi/6bKB56eR5bCU5rKB5peXXCIsXG5cdCAgICBcIjE1MDQyMlwiOiBcIuW3tOael+W3puaXl1wiLFxuXHQgICAgXCIxNTA0MjNcIjogXCLlt7Tmnpflj7Pml5dcIixcblx0ICAgIFwiMTUwNDI0XCI6IFwi5p6X6KW/5Y6/XCIsXG5cdCAgICBcIjE1MDQyNVwiOiBcIuWFi+S7gOWFi+iFvuaXl1wiLFxuXHQgICAgXCIxNTA0MjZcIjogXCLnv4HniZvnibnml5dcIixcblx0ICAgIFwiMTUwNDI4XCI6IFwi5ZaA5ZaH5rKB5peXXCIsXG5cdCAgICBcIjE1MDQyOVwiOiBcIuWugeWfjuWOv1wiLFxuXHQgICAgXCIxNTA0MzBcIjogXCLmlZbmsYnml5dcIixcblx0ICAgIFwiMTUwNDMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDUwMFwiOiBcIumAmui+veW4glwiLFxuXHQgICAgXCIxNTA1MDJcIjogXCLnp5HlsJTmsoHljLpcIixcblx0ICAgIFwiMTUwNTIxXCI6IFwi56eR5bCU5rKB5bem57+85Lit5peXXCIsXG5cdCAgICBcIjE1MDUyMlwiOiBcIuenkeWwlOaygeW3pue/vOWQjuaXl1wiLFxuXHQgICAgXCIxNTA1MjNcIjogXCLlvIDpsoHljr9cIixcblx0ICAgIFwiMTUwNTI0XCI6IFwi5bqT5Lym5peXXCIsXG5cdCAgICBcIjE1MDUyNVwiOiBcIuWliOabvOaXl1wiLFxuXHQgICAgXCIxNTA1MjZcIjogXCLmiY7psoHnibnml5dcIixcblx0ICAgIFwiMTUwNTgxXCI6IFwi6ZyN5p6X6YOt5YuS5biCXCIsXG5cdCAgICBcIjE1MDU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNTA2MDBcIjogXCLphILlsJTlpJrmlq/luIJcIixcblx0ICAgIFwiMTUwNjAyXCI6IFwi5Lic6IOc5Yy6XCIsXG5cdCAgICBcIjE1MDYyMVwiOiBcIui+vuaLieeJueaXl1wiLFxuXHQgICAgXCIxNTA2MjJcIjogXCLlh4bmoLzlsJTml5dcIixcblx0ICAgIFwiMTUwNjIzXCI6IFwi6YSC5omY5YWL5YmN5peXXCIsXG5cdCAgICBcIjE1MDYyNFwiOiBcIumEguaJmOWFi+aXl1wiLFxuXHQgICAgXCIxNTA2MjVcIjogXCLmna3plKbml5dcIixcblx0ICAgIFwiMTUwNjI2XCI6IFwi5LmM5a6h5peXXCIsXG5cdCAgICBcIjE1MDYyN1wiOiBcIuS8iumHkemcjea0m+aXl1wiLFxuXHQgICAgXCIxNTA2MjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTUwNzAwXCI6IFwi5ZG85Lym6LSd5bCU5biCXCIsXG5cdCAgICBcIjE1MDcwMlwiOiBcIua1t+aLieWwlOWMulwiLFxuXHQgICAgXCIxNTA3MDNcIjogXCLmiY7otYnor7rlsJTljLpcIixcblx0ICAgIFwiMTUwNzIxXCI6IFwi6Zi/6I2j5peXXCIsXG5cdCAgICBcIjE1MDcyMlwiOiBcIuiOq+WKm+i+vueTpui+vuaWoeWwlOaXj+iHquayu+aXl1wiLFxuXHQgICAgXCIxNTA3MjNcIjogXCLphILkvKbmmKXoh6rmsrvml5dcIixcblx0ICAgIFwiMTUwNzI0XCI6IFwi6YSC5rip5YWL5peP6Ieq5rK75peXXCIsXG5cdCAgICBcIjE1MDcyNVwiOiBcIumZiOW3tOWwlOiZjuaXl1wiLFxuXHQgICAgXCIxNTA3MjZcIjogXCLmlrDlt7TlsJTomY7lt6bml5dcIixcblx0ICAgIFwiMTUwNzI3XCI6IFwi5paw5be05bCU6JmO5Y+z5peXXCIsXG5cdCAgICBcIjE1MDc4MVwiOiBcIua7oea0sumHjOW4glwiLFxuXHQgICAgXCIxNTA3ODJcIjogXCLniZnlhYvnn7PluIJcIixcblx0ICAgIFwiMTUwNzgzXCI6IFwi5omO5YWw5bGv5biCXCIsXG5cdCAgICBcIjE1MDc4NFwiOiBcIumineWwlOWPpOe6s+W4glwiLFxuXHQgICAgXCIxNTA3ODVcIjogXCLmoLnmsrPluIJcIixcblx0ICAgIFwiMTUwNzg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDgwMFwiOiBcIuW3tOW9pua3luWwlOW4glwiLFxuXHQgICAgXCIxNTA4MDJcIjogXCLkuLTmsrPljLpcIixcblx0ICAgIFwiMTUwODIxXCI6IFwi5LqU5Y6f5Y6/XCIsXG5cdCAgICBcIjE1MDgyMlwiOiBcIuejtOWPo+WOv1wiLFxuXHQgICAgXCIxNTA4MjNcIjogXCLkuYzmi4nnibnliY3ml5dcIixcblx0ICAgIFwiMTUwODI0XCI6IFwi5LmM5ouJ54m55Lit5peXXCIsXG5cdCAgICBcIjE1MDgyNVwiOiBcIuS5jOaLieeJueWQjuaXl1wiLFxuXHQgICAgXCIxNTA4MjZcIjogXCLmna3plKblkI7ml5dcIixcblx0ICAgIFwiMTUwODI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MDkwMFwiOiBcIuS5jOWFsOWvn+W4g+W4glwiLFxuXHQgICAgXCIxNTA5MDJcIjogXCLpm4blroHljLpcIixcblx0ICAgIFwiMTUwOTIxXCI6IFwi5Y2T6LWE5Y6/XCIsXG5cdCAgICBcIjE1MDkyMlwiOiBcIuWMluW+t+WOv1wiLFxuXHQgICAgXCIxNTA5MjNcIjogXCLllYbpg73ljr9cIixcblx0ICAgIFwiMTUwOTI0XCI6IFwi5YW05ZKM5Y6/XCIsXG5cdCAgICBcIjE1MDkyNVwiOiBcIuWHieWfjuWOv1wiLFxuXHQgICAgXCIxNTA5MjZcIjogXCLlr5/lk4jlsJTlj7Pnv7zliY3ml5dcIixcblx0ICAgIFwiMTUwOTI3XCI6IFwi5a+f5ZOI5bCU5Y+z57+85Lit5peXXCIsXG5cdCAgICBcIjE1MDkyOFwiOiBcIuWvn+WTiOWwlOWPs+e/vOWQjuaXl1wiLFxuXHQgICAgXCIxNTA5MjlcIjogXCLlm5vlrZDnjovml5dcIixcblx0ICAgIFwiMTUwOTgxXCI6IFwi5Liw6ZWH5biCXCIsXG5cdCAgICBcIjE1MDk4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIxNTIyMDBcIjogXCLlhbTlronnm59cIixcblx0ICAgIFwiMTUyMjAxXCI6IFwi5LmM5YWw5rWp54m55biCXCIsXG5cdCAgICBcIjE1MjIwMlwiOiBcIumYv+WwlOWxseW4glwiLFxuXHQgICAgXCIxNTIyMjFcIjogXCLnp5HlsJTmsoHlj7Pnv7zliY3ml5dcIixcblx0ICAgIFwiMTUyMjIyXCI6IFwi56eR5bCU5rKB5Y+z57+85Lit5peXXCIsXG5cdCAgICBcIjE1MjIyM1wiOiBcIuaJjui1ieeJueaXl1wiLFxuXHQgICAgXCIxNTIyMjRcIjogXCLnqoHms4nljr9cIixcblx0ICAgIFwiMTUyMjI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjE1MjUwMFwiOiBcIumUoeael+mDreWLkuebn1wiLFxuXHQgICAgXCIxNTI1MDFcIjogXCLkuozov57mtannibnluIJcIixcblx0ICAgIFwiMTUyNTAyXCI6IFwi6ZSh5p6X5rWp54m55biCXCIsXG5cdCAgICBcIjE1MjUyMlwiOiBcIumYv+W3tOWYjuaXl1wiLFxuXHQgICAgXCIxNTI1MjNcIjogXCLoi4/lsLznibnlt6bml5dcIixcblx0ICAgIFwiMTUyNTI0XCI6IFwi6IuP5bC854m55Y+z5peXXCIsXG5cdCAgICBcIjE1MjUyNVwiOiBcIuS4nOS5jOePoOephuaygeaXl1wiLFxuXHQgICAgXCIxNTI1MjZcIjogXCLopb/kuYznj6DnqYbmsoHml5dcIixcblx0ICAgIFwiMTUyNTI3XCI6IFwi5aSq5LuG5a+65peXXCIsXG5cdCAgICBcIjE1MjUyOFwiOiBcIumVtum7hOaXl1wiLFxuXHQgICAgXCIxNTI1MjlcIjogXCLmraPplbbnmb3ml5dcIixcblx0ICAgIFwiMTUyNTMwXCI6IFwi5q2j6JOd5peXXCIsXG5cdCAgICBcIjE1MjUzMVwiOiBcIuWkmuS8puWOv1wiLFxuXHQgICAgXCIxNTI1MzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMTUyOTAwXCI6IFwi6Zi/5ouJ5ZaE55ufXCIsXG5cdCAgICBcIjE1MjkyMVwiOiBcIumYv+aLieWWhOW3puaXl1wiLFxuXHQgICAgXCIxNTI5MjJcIjogXCLpmL/mi4nlloTlj7Pml5dcIixcblx0ICAgIFwiMTUyOTIzXCI6IFwi6aKd5rWO57qz5peXXCIsXG5cdCAgICBcIjE1MjkyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMTAwMDBcIjogXCLovr3lroHnnIFcIixcblx0ICAgIFwiMjEwMTAwXCI6IFwi5rKI6Ziz5biCXCIsXG5cdCAgICBcIjIxMDEwMlwiOiBcIuWSjOW5s+WMulwiLFxuXHQgICAgXCIyMTAxMDNcIjogXCLmsojmsrPljLpcIixcblx0ICAgIFwiMjEwMTA0XCI6IFwi5aSn5Lic5Yy6XCIsXG5cdCAgICBcIjIxMDEwNVwiOiBcIueah+WnkeWMulwiLFxuXHQgICAgXCIyMTAxMDZcIjogXCLpk4Hopb/ljLpcIixcblx0ICAgIFwiMjEwMTExXCI6IFwi6IuP5a625bGv5Yy6XCIsXG5cdCAgICBcIjIxMDExMlwiOiBcIuS4nOmZteWMulwiLFxuXHQgICAgXCIyMTAxMTNcIjogXCLmlrDln47lrZDljLpcIixcblx0ICAgIFwiMjEwMTE0XCI6IFwi5LqO5rSq5Yy6XCIsXG5cdCAgICBcIjIxMDEyMlwiOiBcIui+veS4reWOv1wiLFxuXHQgICAgXCIyMTAxMjNcIjogXCLlurflubPljr9cIixcblx0ICAgIFwiMjEwMTI0XCI6IFwi5rOV5bqT5Y6/XCIsXG5cdCAgICBcIjIxMDE4MVwiOiBcIuaWsOawkeW4glwiLFxuXHQgICAgXCIyMTAxODRcIjogXCLmsojljJfmlrDljLpcIixcblx0ICAgIFwiMjEwMTg1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDIwMFwiOiBcIuWkp+i/nuW4glwiLFxuXHQgICAgXCIyMTAyMDJcIjogXCLkuK3lsbHljLpcIixcblx0ICAgIFwiMjEwMjAzXCI6IFwi6KW/5bKX5Yy6XCIsXG5cdCAgICBcIjIxMDIwNFwiOiBcIuaymeays+WPo+WMulwiLFxuXHQgICAgXCIyMTAyMTFcIjogXCLnlJjkupXlrZDljLpcIixcblx0ICAgIFwiMjEwMjEyXCI6IFwi5peF6aG65Y+j5Yy6XCIsXG5cdCAgICBcIjIxMDIxM1wiOiBcIumHkeW3nuWMulwiLFxuXHQgICAgXCIyMTAyMjRcIjogXCLplb/mtbfljr9cIixcblx0ICAgIFwiMjEwMjgxXCI6IFwi55Om5oi/5bqX5biCXCIsXG5cdCAgICBcIjIxMDI4MlwiOiBcIuaZruWFsOW6l+W4glwiLFxuXHQgICAgXCIyMTAyODNcIjogXCLluoTmsrPluIJcIixcblx0ICAgIFwiMjEwMjk4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDMwMFwiOiBcIumejeWxseW4glwiLFxuXHQgICAgXCIyMTAzMDJcIjogXCLpk4HkuJzljLpcIixcblx0ICAgIFwiMjEwMzAzXCI6IFwi6ZOB6KW/5Yy6XCIsXG5cdCAgICBcIjIxMDMwNFwiOiBcIueri+WxseWMulwiLFxuXHQgICAgXCIyMTAzMTFcIjogXCLljYPlsbHljLpcIixcblx0ICAgIFwiMjEwMzIxXCI6IFwi5Y+w5a6J5Y6/XCIsXG5cdCAgICBcIjIxMDMyM1wiOiBcIuWyq+Wyqea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTAzODFcIjogXCLmtbfln47luIJcIixcblx0ICAgIFwiMjEwMzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDQwMFwiOiBcIuaKmumhuuW4glwiLFxuXHQgICAgXCIyMTA0MDJcIjogXCLmlrDmiprljLpcIixcblx0ICAgIFwiMjEwNDAzXCI6IFwi5Lic5rSy5Yy6XCIsXG5cdCAgICBcIjIxMDQwNFwiOiBcIuacm+iKseWMulwiLFxuXHQgICAgXCIyMTA0MTFcIjogXCLpobrln47ljLpcIixcblx0ICAgIFwiMjEwNDIxXCI6IFwi5oqa6aG65Y6/XCIsXG5cdCAgICBcIjIxMDQyMlwiOiBcIuaWsOWuvua7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA0MjNcIjogXCLmuIXljp/mu6Hml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMjEwNDI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDUwMFwiOiBcIuacrOa6quW4glwiLFxuXHQgICAgXCIyMTA1MDJcIjogXCLlubPlsbHljLpcIixcblx0ICAgIFwiMjEwNTAzXCI6IFwi5rqq5rmW5Yy6XCIsXG5cdCAgICBcIjIxMDUwNFwiOiBcIuaYjuWxseWMulwiLFxuXHQgICAgXCIyMTA1MDVcIjogXCLljZfoiqzljLpcIixcblx0ICAgIFwiMjEwNTIxXCI6IFwi5pys5rqq5ruh5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIxMDUyMlwiOiBcIuahk+S7gea7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA1MjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjEwNjAwXCI6IFwi5Li55Lic5biCXCIsXG5cdCAgICBcIjIxMDYwMlwiOiBcIuWFg+WuneWMulwiLFxuXHQgICAgXCIyMTA2MDNcIjogXCLmjK/lhbTljLpcIixcblx0ICAgIFwiMjEwNjA0XCI6IFwi5oyv5a6J5Yy6XCIsXG5cdCAgICBcIjIxMDYyNFwiOiBcIuWuveeUuOa7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA2ODFcIjogXCLkuJzmuK/luIJcIixcblx0ICAgIFwiMjEwNjgyXCI6IFwi5Yek5Z+O5biCXCIsXG5cdCAgICBcIjIxMDY4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMTA3MDBcIjogXCLplKblt57luIJcIixcblx0ICAgIFwiMjEwNzAyXCI6IFwi5Y+k5aGU5Yy6XCIsXG5cdCAgICBcIjIxMDcwM1wiOiBcIuWHjOays+WMulwiLFxuXHQgICAgXCIyMTA3MTFcIjogXCLlpKrlkozljLpcIixcblx0ICAgIFwiMjEwNzI2XCI6IFwi6buR5bGx5Y6/XCIsXG5cdCAgICBcIjIxMDcyN1wiOiBcIuS5ieWOv1wiLFxuXHQgICAgXCIyMTA3ODFcIjogXCLlh4zmtbfluIJcIixcblx0ICAgIFwiMjEwNzgyXCI6IFwi5YyX6ZWH5biCXCIsXG5cdCAgICBcIjIxMDc4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMTA4MDBcIjogXCLokKXlj6PluIJcIixcblx0ICAgIFwiMjEwODAyXCI6IFwi56uZ5YmN5Yy6XCIsXG5cdCAgICBcIjIxMDgwM1wiOiBcIuilv+W4guWMulwiLFxuXHQgICAgXCIyMTA4MDRcIjogXCLpsoXpsbzlnIjljLpcIixcblx0ICAgIFwiMjEwODExXCI6IFwi6ICB6L655Yy6XCIsXG5cdCAgICBcIjIxMDg4MVwiOiBcIuebluW3nuW4glwiLFxuXHQgICAgXCIyMTA4ODJcIjogXCLlpKfnn7PmoaXluIJcIixcblx0ICAgIFwiMjEwODgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMDkwMFwiOiBcIumYnOaWsOW4glwiLFxuXHQgICAgXCIyMTA5MDJcIjogXCLmtbflt57ljLpcIixcblx0ICAgIFwiMjEwOTAzXCI6IFwi5paw6YKx5Yy6XCIsXG5cdCAgICBcIjIxMDkwNFwiOiBcIuWkquW5s+WMulwiLFxuXHQgICAgXCIyMTA5MDVcIjogXCLmuIXmsrPpl6jljLpcIixcblx0ICAgIFwiMjEwOTExXCI6IFwi57uG5rKz5Yy6XCIsXG5cdCAgICBcIjIxMDkyMVwiOiBcIumYnOaWsOiSmeWPpOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMTA5MjJcIjogXCLlvbDmrabljr9cIixcblx0ICAgIFwiMjEwOTIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTAwMFwiOiBcIui+vemYs+W4glwiLFxuXHQgICAgXCIyMTEwMDJcIjogXCLnmb3loZTljLpcIixcblx0ICAgIFwiMjExMDAzXCI6IFwi5paH5Zyj5Yy6XCIsXG5cdCAgICBcIjIxMTAwNFwiOiBcIuWuj+S8n+WMulwiLFxuXHQgICAgXCIyMTEwMDVcIjogXCLlvJPplb/lsq3ljLpcIixcblx0ICAgIFwiMjExMDExXCI6IFwi5aSq5a2Q5rKz5Yy6XCIsXG5cdCAgICBcIjIxMTAyMVwiOiBcIui+vemYs+WOv1wiLFxuXHQgICAgXCIyMTEwODFcIjogXCLnga/loZTluIJcIixcblx0ICAgIFwiMjExMDgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTEwMFwiOiBcIuebmOmUpuW4glwiLFxuXHQgICAgXCIyMTExMDJcIjogXCLlj4zlj7DlrZDljLpcIixcblx0ICAgIFwiMjExMTAzXCI6IFwi5YW06ZqG5Y+w5Yy6XCIsXG5cdCAgICBcIjIxMTEyMVwiOiBcIuWkp+a0vOWOv1wiLFxuXHQgICAgXCIyMTExMjJcIjogXCLnm5jlsbHljr9cIixcblx0ICAgIFwiMjExMTIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTIwMFwiOiBcIumTgeWyreW4glwiLFxuXHQgICAgXCIyMTEyMDJcIjogXCLpk7blt57ljLpcIixcblx0ICAgIFwiMjExMjA0XCI6IFwi5riF5rKz5Yy6XCIsXG5cdCAgICBcIjIxMTIyMVwiOiBcIumTgeWyreWOv1wiLFxuXHQgICAgXCIyMTEyMjNcIjogXCLopb/kuLDljr9cIixcblx0ICAgIFwiMjExMjI0XCI6IFwi5piM5Zu+5Y6/XCIsXG5cdCAgICBcIjIxMTI4MVwiOiBcIuiwg+WFteWxseW4glwiLFxuXHQgICAgXCIyMTEyODJcIjogXCLlvIDljp/luIJcIixcblx0ICAgIFwiMjExMjgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTMwMFwiOiBcIuacnemYs+W4glwiLFxuXHQgICAgXCIyMTEzMDJcIjogXCLlj4zloZTljLpcIixcblx0ICAgIFwiMjExMzAzXCI6IFwi6b6Z5Z+O5Yy6XCIsXG5cdCAgICBcIjIxMTMyMVwiOiBcIuacnemYs+WOv1wiLFxuXHQgICAgXCIyMTEzMjJcIjogXCLlu7rlubPljr9cIixcblx0ICAgIFwiMjExMzI0XCI6IFwi5ZaA5ZaH5rKB5bem57+86JKZ5Y+k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIxMTM4MVwiOiBcIuWMl+elqOW4glwiLFxuXHQgICAgXCIyMTEzODJcIjogXCLlh4zmupDluIJcIixcblx0ICAgIFwiMjExMzgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIxMTQwMFwiOiBcIuiRq+iKpuWym+W4glwiLFxuXHQgICAgXCIyMTE0MDJcIjogXCLov57lsbHljLpcIixcblx0ICAgIFwiMjExNDAzXCI6IFwi6b6Z5riv5Yy6XCIsXG5cdCAgICBcIjIxMTQwNFwiOiBcIuWNl+elqOWMulwiLFxuXHQgICAgXCIyMTE0MjFcIjogXCLnu6XkuK3ljr9cIixcblx0ICAgIFwiMjExNDIyXCI6IFwi5bu65piM5Y6/XCIsXG5cdCAgICBcIjIxMTQ4MVwiOiBcIuWFtOWfjuW4glwiLFxuXHQgICAgXCIyMTE0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjIwMDAwXCI6IFwi5ZCJ5p6X55yBXCIsXG5cdCAgICBcIjIyMDEwMFwiOiBcIumVv+aYpeW4glwiLFxuXHQgICAgXCIyMjAxMDJcIjogXCLljZflhbPljLpcIixcblx0ICAgIFwiMjIwMTAzXCI6IFwi5a695Z+O5Yy6XCIsXG5cdCAgICBcIjIyMDEwNFwiOiBcIuacnemYs+WMulwiLFxuXHQgICAgXCIyMjAxMDVcIjogXCLkuozpgZPljLpcIixcblx0ICAgIFwiMjIwMTA2XCI6IFwi57u/5Zut5Yy6XCIsXG5cdCAgICBcIjIyMDExMlwiOiBcIuWPjOmYs+WMulwiLFxuXHQgICAgXCIyMjAxMjJcIjogXCLlhpzlronljr9cIixcblx0ICAgIFwiMjIwMTgxXCI6IFwi5Lmd5Y+w5biCXCIsXG5cdCAgICBcIjIyMDE4MlwiOiBcIuamhuagkeW4glwiLFxuXHQgICAgXCIyMjAxODNcIjogXCLlvrfmg6DluIJcIixcblx0ICAgIFwiMjIwMTg4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIyMDIwMFwiOiBcIuWQieael+W4glwiLFxuXHQgICAgXCIyMjAyMDJcIjogXCLmmIzpgpHljLpcIixcblx0ICAgIFwiMjIwMjAzXCI6IFwi6b6Z5r2t5Yy6XCIsXG5cdCAgICBcIjIyMDIwNFwiOiBcIuiIueiQpeWMulwiLFxuXHQgICAgXCIyMjAyMTFcIjogXCLkuLDmu6HljLpcIixcblx0ICAgIFwiMjIwMjIxXCI6IFwi5rC45ZCJ5Y6/XCIsXG5cdCAgICBcIjIyMDI4MVwiOiBcIuibn+ays+W4glwiLFxuXHQgICAgXCIyMjAyODJcIjogXCLmoabnlLjluIJcIixcblx0ICAgIFwiMjIwMjgzXCI6IFwi6IiS5YWw5biCXCIsXG5cdCAgICBcIjIyMDI4NFwiOiBcIuejkOefs+W4glwiLFxuXHQgICAgXCIyMjAyODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjIwMzAwXCI6IFwi5Zub5bmz5biCXCIsXG5cdCAgICBcIjIyMDMwMlwiOiBcIumTgeilv+WMulwiLFxuXHQgICAgXCIyMjAzMDNcIjogXCLpk4HkuJzljLpcIixcblx0ICAgIFwiMjIwMzIyXCI6IFwi5qKo5qCR5Y6/XCIsXG5cdCAgICBcIjIyMDMyM1wiOiBcIuS8iumAmua7oeaXj+iHquayu+WOv1wiLFxuXHQgICAgXCIyMjAzODFcIjogXCLlhazkuLvlsq3luIJcIixcblx0ICAgIFwiMjIwMzgyXCI6IFwi5Y+M6L695biCXCIsXG5cdCAgICBcIjIyMDM4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA0MDBcIjogXCLovr3mupDluIJcIixcblx0ICAgIFwiMjIwNDAyXCI6IFwi6b6Z5bGx5Yy6XCIsXG5cdCAgICBcIjIyMDQwM1wiOiBcIuilv+WuieWMulwiLFxuXHQgICAgXCIyMjA0MjFcIjogXCLkuJzkuLDljr9cIixcblx0ICAgIFwiMjIwNDIyXCI6IFwi5Lic6L695Y6/XCIsXG5cdCAgICBcIjIyMDQyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA1MDBcIjogXCLpgJrljJbluIJcIixcblx0ICAgIFwiMjIwNTAyXCI6IFwi5Lic5piM5Yy6XCIsXG5cdCAgICBcIjIyMDUwM1wiOiBcIuS6jOmBk+axn+WMulwiLFxuXHQgICAgXCIyMjA1MjFcIjogXCLpgJrljJbljr9cIixcblx0ICAgIFwiMjIwNTIzXCI6IFwi6L6J5Y2X5Y6/XCIsXG5cdCAgICBcIjIyMDUyNFwiOiBcIuafs+ays+WOv1wiLFxuXHQgICAgXCIyMjA1ODFcIjogXCLmooXmsrPlj6PluIJcIixcblx0ICAgIFwiMjIwNTgyXCI6IFwi6ZuG5a6J5biCXCIsXG5cdCAgICBcIjIyMDU4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA2MDBcIjogXCLnmb3lsbHluIJcIixcblx0ICAgIFwiMjIwNjAyXCI6IFwi5rWR5rGf5Yy6XCIsXG5cdCAgICBcIjIyMDYyMVwiOiBcIuaKmuadvuWOv1wiLFxuXHQgICAgXCIyMjA2MjJcIjogXCLpnZblrofljr9cIixcblx0ICAgIFwiMjIwNjIzXCI6IFwi6ZW/55m95pyd6bKc5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIyMDYyNVwiOiBcIuaxn+a6kOWMulwiLFxuXHQgICAgXCIyMjA2ODFcIjogXCLkuLTmsZ/luIJcIixcblx0ICAgIFwiMjIwNjgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIyMDcwMFwiOiBcIuadvuWOn+W4glwiLFxuXHQgICAgXCIyMjA3MDJcIjogXCLlroHmsZ/ljLpcIixcblx0ICAgIFwiMjIwNzIxXCI6IFwi5YmN6YOt5bCU572X5pav6JKZ5Y+k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjIyMDcyMlwiOiBcIumVv+WyreWOv1wiLFxuXHQgICAgXCIyMjA3MjNcIjogXCLkub7lronljr9cIixcblx0ICAgIFwiMjIwNzI0XCI6IFwi5om25L2Z5biCXCIsXG5cdCAgICBcIjIyMDcyNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMjA4MDBcIjogXCLnmb3ln47luIJcIixcblx0ICAgIFwiMjIwODAyXCI6IFwi5rSu5YyX5Yy6XCIsXG5cdCAgICBcIjIyMDgyMVwiOiBcIumVh+i1ieWOv1wiLFxuXHQgICAgXCIyMjA4MjJcIjogXCLpgJrmpobljr9cIixcblx0ICAgIFwiMjIwODgxXCI6IFwi5rSu5Y2X5biCXCIsXG5cdCAgICBcIjIyMDg4MlwiOiBcIuWkp+WuieW4glwiLFxuXHQgICAgXCIyMjA4ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjIyNDAwXCI6IFwi5bu26L655pyd6bKc5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjIyMjQwMVwiOiBcIuW7tuWQieW4glwiLFxuXHQgICAgXCIyMjI0MDJcIjogXCLlm77ku6zluIJcIixcblx0ICAgIFwiMjIyNDAzXCI6IFwi5pWm5YyW5biCXCIsXG5cdCAgICBcIjIyMjQwNFwiOiBcIuePsuaYpeW4glwiLFxuXHQgICAgXCIyMjI0MDVcIjogXCLpvpnkupXluIJcIixcblx0ICAgIFwiMjIyNDA2XCI6IFwi5ZKM6b6Z5biCXCIsXG5cdCAgICBcIjIyMjQyNFwiOiBcIuaxqua4heWOv1wiLFxuXHQgICAgXCIyMjI0MjZcIjogXCLlronlm77ljr9cIixcblx0ICAgIFwiMjIyNDI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDAwMFwiOiBcIum7kem+meaxn+ecgVwiLFxuXHQgICAgXCIyMzAxMDBcIjogXCLlk4jlsJTmu6jluIJcIixcblx0ICAgIFwiMjMwMTAyXCI6IFwi6YGT6YeM5Yy6XCIsXG5cdCAgICBcIjIzMDEwM1wiOiBcIuWNl+Wyl+WMulwiLFxuXHQgICAgXCIyMzAxMDRcIjogXCLpgZPlpJbljLpcIixcblx0ICAgIFwiMjMwMTA2XCI6IFwi6aaZ5Z2K5Yy6XCIsXG5cdCAgICBcIjIzMDEwOFwiOiBcIuW5s+aIv+WMulwiLFxuXHQgICAgXCIyMzAxMDlcIjogXCLmnb7ljJfljLpcIixcblx0ICAgIFwiMjMwMTExXCI6IFwi5ZG85YWw5Yy6XCIsXG5cdCAgICBcIjIzMDEyM1wiOiBcIuS+neWFsOWOv1wiLFxuXHQgICAgXCIyMzAxMjRcIjogXCLmlrnmraPljr9cIixcblx0ICAgIFwiMjMwMTI1XCI6IFwi5a6+5Y6/XCIsXG5cdCAgICBcIjIzMDEyNlwiOiBcIuW3tOW9puWOv1wiLFxuXHQgICAgXCIyMzAxMjdcIjogXCLmnKjlhbDljr9cIixcblx0ICAgIFwiMjMwMTI4XCI6IFwi6YCa5rKz5Y6/XCIsXG5cdCAgICBcIjIzMDEyOVwiOiBcIuW7tuWvv+WOv1wiLFxuXHQgICAgXCIyMzAxODFcIjogXCLpmL/ln47ljLpcIixcblx0ICAgIFwiMjMwMTgyXCI6IFwi5Y+M5Z+O5biCXCIsXG5cdCAgICBcIjIzMDE4M1wiOiBcIuWwmuW/l+W4glwiLFxuXHQgICAgXCIyMzAxODRcIjogXCLkupTluLjluIJcIixcblx0ICAgIFwiMjMwMTg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDIwMFwiOiBcIum9kOm9kOWTiOWwlOW4glwiLFxuXHQgICAgXCIyMzAyMDJcIjogXCLpvpnmspnljLpcIixcblx0ICAgIFwiMjMwMjAzXCI6IFwi5bu65Y2O5Yy6XCIsXG5cdCAgICBcIjIzMDIwNFwiOiBcIumTgemUi+WMulwiLFxuXHQgICAgXCIyMzAyMDVcIjogXCLmmILmmILmuqrljLpcIixcblx0ICAgIFwiMjMwMjA2XCI6IFwi5a+M5ouJ5bCU5Z+65Yy6XCIsXG5cdCAgICBcIjIzMDIwN1wiOiBcIueivuWtkOWxseWMulwiLFxuXHQgICAgXCIyMzAyMDhcIjogXCLmooXph4zmlq/ovr7mlqHlsJTml4/ljLpcIixcblx0ICAgIFwiMjMwMjIxXCI6IFwi6b6Z5rGf5Y6/XCIsXG5cdCAgICBcIjIzMDIyM1wiOiBcIuS+neWuieWOv1wiLFxuXHQgICAgXCIyMzAyMjRcIjogXCLms7DmnaXljr9cIixcblx0ICAgIFwiMjMwMjI1XCI6IFwi55SY5Y2X5Y6/XCIsXG5cdCAgICBcIjIzMDIyN1wiOiBcIuWvjOijleWOv1wiLFxuXHQgICAgXCIyMzAyMjlcIjogXCLlhYvlsbHljr9cIixcblx0ICAgIFwiMjMwMjMwXCI6IFwi5YWL5Lic5Y6/XCIsXG5cdCAgICBcIjIzMDIzMVwiOiBcIuaLnOazieWOv1wiLFxuXHQgICAgXCIyMzAyODFcIjogXCLorrfmsrPluIJcIixcblx0ICAgIFwiMjMwMjgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDMwMFwiOiBcIum4oeilv+W4glwiLFxuXHQgICAgXCIyMzAzMDJcIjogXCLpuKHlhqDljLpcIixcblx0ICAgIFwiMjMwMzAzXCI6IFwi5oGS5bGx5Yy6XCIsXG5cdCAgICBcIjIzMDMwNFwiOiBcIua7tOmBk+WMulwiLFxuXHQgICAgXCIyMzAzMDVcIjogXCLmoqjmoJHljLpcIixcblx0ICAgIFwiMjMwMzA2XCI6IFwi5Z+O5a2Q5rKz5Yy6XCIsXG5cdCAgICBcIjIzMDMwN1wiOiBcIum6u+WxseWMulwiLFxuXHQgICAgXCIyMzAzMjFcIjogXCLpuKHkuJzljr9cIixcblx0ICAgIFwiMjMwMzgxXCI6IFwi6JmO5p6X5biCXCIsXG5cdCAgICBcIjIzMDM4MlwiOiBcIuWvhuWxseW4glwiLFxuXHQgICAgXCIyMzAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMjMwNDAwXCI6IFwi6bmk5bKX5biCXCIsXG5cdCAgICBcIjIzMDQwMlwiOiBcIuWQkemYs+WMulwiLFxuXHQgICAgXCIyMzA0MDNcIjogXCLlt6XlhpzljLpcIixcblx0ICAgIFwiMjMwNDA0XCI6IFwi5Y2X5bGx5Yy6XCIsXG5cdCAgICBcIjIzMDQwNVwiOiBcIuWFtOWuieWMulwiLFxuXHQgICAgXCIyMzA0MDZcIjogXCLkuJzlsbHljLpcIixcblx0ICAgIFwiMjMwNDA3XCI6IFwi5YW05bGx5Yy6XCIsXG5cdCAgICBcIjIzMDQyMVwiOiBcIuiQneWMl+WOv1wiLFxuXHQgICAgXCIyMzA0MjJcIjogXCLnu6Xmu6jljr9cIixcblx0ICAgIFwiMjMwNDIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDUwMFwiOiBcIuWPjOm4reWxseW4glwiLFxuXHQgICAgXCIyMzA1MDJcIjogXCLlsJblsbHljLpcIixcblx0ICAgIFwiMjMwNTAzXCI6IFwi5bKt5Lic5Yy6XCIsXG5cdCAgICBcIjIzMDUwNVwiOiBcIuWbm+aWueWPsOWMulwiLFxuXHQgICAgXCIyMzA1MDZcIjogXCLlrp3lsbHljLpcIixcblx0ICAgIFwiMjMwNTIxXCI6IFwi6ZuG6LSk5Y6/XCIsXG5cdCAgICBcIjIzMDUyMlwiOiBcIuWPi+iwiuWOv1wiLFxuXHQgICAgXCIyMzA1MjNcIjogXCLlrp3muIXljr9cIixcblx0ICAgIFwiMjMwNTI0XCI6IFwi6aW25rKz5Y6/XCIsXG5cdCAgICBcIjIzMDUyNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzA2MDBcIjogXCLlpKfluobluIJcIixcblx0ICAgIFwiMjMwNjAyXCI6IFwi6JCo5bCU5Zu+5Yy6XCIsXG5cdCAgICBcIjIzMDYwM1wiOiBcIum+meWHpOWMulwiLFxuXHQgICAgXCIyMzA2MDRcIjogXCLorqnog6Hot6/ljLpcIixcblx0ICAgIFwiMjMwNjA1XCI6IFwi57qi5bKX5Yy6XCIsXG5cdCAgICBcIjIzMDYwNlwiOiBcIuWkp+WQjOWMulwiLFxuXHQgICAgXCIyMzA2MjFcIjogXCLogoflt57ljr9cIixcblx0ICAgIFwiMjMwNjIyXCI6IFwi6IKH5rqQ5Y6/XCIsXG5cdCAgICBcIjIzMDYyM1wiOiBcIuael+eUuOWOv1wiLFxuXHQgICAgXCIyMzA2MjRcIjogXCLmnZzlsJTkvK/nibnokpnlj6Tml4/oh6rmsrvljr9cIixcblx0ICAgIFwiMjMwNjI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMDcwMFwiOiBcIuS8iuaYpeW4glwiLFxuXHQgICAgXCIyMzA3MDJcIjogXCLkvIrmmKXljLpcIixcblx0ICAgIFwiMjMwNzAzXCI6IFwi5Y2X5bKU5Yy6XCIsXG5cdCAgICBcIjIzMDcwNFwiOiBcIuWPi+WlveWMulwiLFxuXHQgICAgXCIyMzA3MDVcIjogXCLopb/mnpfljLpcIixcblx0ICAgIFwiMjMwNzA2XCI6IFwi57+g5bOm5Yy6XCIsXG5cdCAgICBcIjIzMDcwN1wiOiBcIuaWsOmdkuWMulwiLFxuXHQgICAgXCIyMzA3MDhcIjogXCLnvo7muqrljLpcIixcblx0ICAgIFwiMjMwNzA5XCI6IFwi6YeR5bGx5bGv5Yy6XCIsXG5cdCAgICBcIjIzMDcxMFwiOiBcIuS6lOiQpeWMulwiLFxuXHQgICAgXCIyMzA3MTFcIjogXCLkuYzpqazmsrPljLpcIixcblx0ICAgIFwiMjMwNzEyXCI6IFwi5rGk5pe65rKz5Yy6XCIsXG5cdCAgICBcIjIzMDcxM1wiOiBcIuW4puWyreWMulwiLFxuXHQgICAgXCIyMzA3MTRcIjogXCLkuYzkvIrlsq3ljLpcIixcblx0ICAgIFwiMjMwNzE1XCI6IFwi57qi5pif5Yy6XCIsXG5cdCAgICBcIjIzMDcxNlwiOiBcIuS4iueUmOWyreWMulwiLFxuXHQgICAgXCIyMzA3MjJcIjogXCLlmInojavljr9cIixcblx0ICAgIFwiMjMwNzgxXCI6IFwi6ZOB5Yqb5biCXCIsXG5cdCAgICBcIjIzMDc4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzA4MDBcIjogXCLkvbPmnKjmlq/luIJcIixcblx0ICAgIFwiMjMwODAzXCI6IFwi5ZCR6Ziz5Yy6XCIsXG5cdCAgICBcIjIzMDgwNFwiOiBcIuWJjei/m+WMulwiLFxuXHQgICAgXCIyMzA4MDVcIjogXCLkuJzpo47ljLpcIixcblx0ICAgIFwiMjMwODExXCI6IFwi6YOK5Yy6XCIsXG5cdCAgICBcIjIzMDgyMlwiOiBcIuahpuWNl+WOv1wiLFxuXHQgICAgXCIyMzA4MjZcIjogXCLmoablt53ljr9cIixcblx0ICAgIFwiMjMwODI4XCI6IFwi5rGk5Y6f5Y6/XCIsXG5cdCAgICBcIjIzMDgzM1wiOiBcIuaKmui/nOWOv1wiLFxuXHQgICAgXCIyMzA4ODFcIjogXCLlkIzmsZ/luIJcIixcblx0ICAgIFwiMjMwODgyXCI6IFwi5a+M6ZSm5biCXCIsXG5cdCAgICBcIjIzMDg4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzA5MDBcIjogXCLkuIPlj7DmsrPluIJcIixcblx0ICAgIFwiMjMwOTAyXCI6IFwi5paw5YW05Yy6XCIsXG5cdCAgICBcIjIzMDkwM1wiOiBcIuahg+WxseWMulwiLFxuXHQgICAgXCIyMzA5MDRcIjogXCLojITlrZDmsrPljLpcIixcblx0ICAgIFwiMjMwOTIxXCI6IFwi5YuD5Yip5Y6/XCIsXG5cdCAgICBcIjIzMDkyMlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzEwMDBcIjogXCLniaHkuLnmsZ/luIJcIixcblx0ICAgIFwiMjMxMDAyXCI6IFwi5Lic5a6J5Yy6XCIsXG5cdCAgICBcIjIzMTAwM1wiOiBcIumYs+aYjuWMulwiLFxuXHQgICAgXCIyMzEwMDRcIjogXCLniLHmsJHljLpcIixcblx0ICAgIFwiMjMxMDA1XCI6IFwi6KW/5a6J5Yy6XCIsXG5cdCAgICBcIjIzMTAyNFwiOiBcIuS4nOWugeWOv1wiLFxuXHQgICAgXCIyMzEwMjVcIjogXCLmnpflj6Pljr9cIixcblx0ICAgIFwiMjMxMDgxXCI6IFwi57ul6Iqs5rKz5biCXCIsXG5cdCAgICBcIjIzMTA4M1wiOiBcIua1t+ael+W4glwiLFxuXHQgICAgXCIyMzEwODRcIjogXCLlroHlronluIJcIixcblx0ICAgIFwiMjMxMDg1XCI6IFwi56mG5qOx5biCXCIsXG5cdCAgICBcIjIzMTA4NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIyMzExMDBcIjogXCLpu5HmsrPluIJcIixcblx0ICAgIFwiMjMxMTAyXCI6IFwi54ix6L6J5Yy6XCIsXG5cdCAgICBcIjIzMTEyMVwiOiBcIuWrqeaxn+WOv1wiLFxuXHQgICAgXCIyMzExMjNcIjogXCLpgIrlhYvljr9cIixcblx0ICAgIFwiMjMxMTI0XCI6IFwi5a2Z5ZC05Y6/XCIsXG5cdCAgICBcIjIzMTE4MVwiOiBcIuWMl+WuieW4glwiLFxuXHQgICAgXCIyMzExODJcIjogXCLkupTlpKfov57msaDluIJcIixcblx0ICAgIFwiMjMxMTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMTIwMFwiOiBcIue7peWMluW4glwiLFxuXHQgICAgXCIyMzEyMDJcIjogXCLljJfmnpfljLpcIixcblx0ICAgIFwiMjMxMjIxXCI6IFwi5pyb5aWO5Y6/XCIsXG5cdCAgICBcIjIzMTIyMlwiOiBcIuWFsOilv+WOv1wiLFxuXHQgICAgXCIyMzEyMjNcIjogXCLpnZLlhojljr9cIixcblx0ICAgIFwiMjMxMjI0XCI6IFwi5bqG5a6J5Y6/XCIsXG5cdCAgICBcIjIzMTIyNVwiOiBcIuaYjuawtOWOv1wiLFxuXHQgICAgXCIyMzEyMjZcIjogXCLnu6Xmo7Hljr9cIixcblx0ICAgIFwiMjMxMjgxXCI6IFwi5a6J6L6+5biCXCIsXG5cdCAgICBcIjIzMTI4MlwiOiBcIuiCh+S4nOW4glwiLFxuXHQgICAgXCIyMzEyODNcIjogXCLmtbfkvKbluIJcIixcblx0ICAgIFwiMjMxMjg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjIzMjcwMFwiOiBcIuWkp+WFtOWuieWyreWcsOWMulwiLFxuXHQgICAgXCIyMzI3MDJcIjogXCLmnb7lsq3ljLpcIixcblx0ICAgIFwiMjMyNzAzXCI6IFwi5paw5p6X5Yy6XCIsXG5cdCAgICBcIjIzMjcwNFwiOiBcIuWRvOS4reWMulwiLFxuXHQgICAgXCIyMzI3MjFcIjogXCLlkbznjpvljr9cIixcblx0ICAgIFwiMjMyNzIyXCI6IFwi5aGU5rKz5Y6/XCIsXG5cdCAgICBcIjIzMjcyM1wiOiBcIua8oOays+WOv1wiLFxuXHQgICAgXCIyMzI3MjRcIjogXCLliqDmoLzovr7lpYfljLpcIixcblx0ICAgIFwiMjMyNzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMxMDAwMFwiOiBcIuS4iua1t1wiLFxuXHQgICAgXCIzMTAxMDBcIjogXCLkuIrmtbfluIJcIixcblx0ICAgIFwiMzEwMTAxXCI6IFwi6buE5rWm5Yy6XCIsXG5cdCAgICBcIjMxMDEwNFwiOiBcIuW+kOaxh+WMulwiLFxuXHQgICAgXCIzMTAxMDVcIjogXCLplb/lroHljLpcIixcblx0ICAgIFwiMzEwMTA2XCI6IFwi6Z2Z5a6J5Yy6XCIsXG5cdCAgICBcIjMxMDEwN1wiOiBcIuaZrumZgOWMulwiLFxuXHQgICAgXCIzMTAxMDhcIjogXCLpl7jljJfljLpcIixcblx0ICAgIFwiMzEwMTA5XCI6IFwi6Jm55Y+j5Yy6XCIsXG5cdCAgICBcIjMxMDExMFwiOiBcIuadqOa1puWMulwiLFxuXHQgICAgXCIzMTAxMTJcIjogXCLpl7XooYzljLpcIixcblx0ICAgIFwiMzEwMTEzXCI6IFwi5a6d5bGx5Yy6XCIsXG5cdCAgICBcIjMxMDExNFwiOiBcIuWYieWumuWMulwiLFxuXHQgICAgXCIzMTAxMTVcIjogXCLmtabkuJzmlrDljLpcIixcblx0ICAgIFwiMzEwMTE2XCI6IFwi6YeR5bGx5Yy6XCIsXG5cdCAgICBcIjMxMDExN1wiOiBcIuadvuaxn+WMulwiLFxuXHQgICAgXCIzMTAxMThcIjogXCLpnZLmtabljLpcIixcblx0ICAgIFwiMzEwMTIwXCI6IFwi5aWJ6LSk5Yy6XCIsXG5cdCAgICBcIjMxMDIzMFwiOiBcIuW0h+aYjuWOv1wiLFxuXHQgICAgXCIzMTAyMzFcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwMDAwXCI6IFwi5rGf6IuP55yBXCIsXG5cdCAgICBcIjMyMDEwMFwiOiBcIuWNl+S6rOW4glwiLFxuXHQgICAgXCIzMjAxMDJcIjogXCLnjoTmrabljLpcIixcblx0ICAgIFwiMzIwMTA0XCI6IFwi56em5reu5Yy6XCIsXG5cdCAgICBcIjMyMDEwNVwiOiBcIuW7uumCuuWMulwiLFxuXHQgICAgXCIzMjAxMDZcIjogXCLpvJPmpbzljLpcIixcblx0ICAgIFwiMzIwMTExXCI6IFwi5rWm5Y+j5Yy6XCIsXG5cdCAgICBcIjMyMDExM1wiOiBcIuaglumcnuWMulwiLFxuXHQgICAgXCIzMjAxMTRcIjogXCLpm6joirHlj7DljLpcIixcblx0ICAgIFwiMzIwMTE1XCI6IFwi5rGf5a6B5Yy6XCIsXG5cdCAgICBcIjMyMDExNlwiOiBcIuWFreWQiOWMulwiLFxuXHQgICAgXCIzMjAxMjRcIjogXCLmuqfmsLTljLpcIixcblx0ICAgIFwiMzIwMTI1XCI6IFwi6auY5rez5Yy6XCIsXG5cdCAgICBcIjMyMDEyNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMjAyMDBcIjogXCLml6DplKHluIJcIixcblx0ICAgIFwiMzIwMjAyXCI6IFwi5bSH5a6J5Yy6XCIsXG5cdCAgICBcIjMyMDIwM1wiOiBcIuWNl+mVv+WMulwiLFxuXHQgICAgXCIzMjAyMDRcIjogXCLljJfloZjljLpcIixcblx0ICAgIFwiMzIwMjA1XCI6IFwi6ZSh5bGx5Yy6XCIsXG5cdCAgICBcIjMyMDIwNlwiOiBcIuaDoOWxseWMulwiLFxuXHQgICAgXCIzMjAyMTFcIjogXCLmu6jmuZbljLpcIixcblx0ICAgIFwiMzIwMjgxXCI6IFwi5rGf6Zi05biCXCIsXG5cdCAgICBcIjMyMDI4MlwiOiBcIuWunOWFtOW4glwiLFxuXHQgICAgXCIzMjAyOTdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwMzAwXCI6IFwi5b6Q5bee5biCXCIsXG5cdCAgICBcIjMyMDMwMlwiOiBcIum8k+alvOWMulwiLFxuXHQgICAgXCIzMjAzMDNcIjogXCLkupHpvpnljLpcIixcblx0ICAgIFwiMzIwMzA1XCI6IFwi6LS+5rGq5Yy6XCIsXG5cdCAgICBcIjMyMDMxMVwiOiBcIuazieWxseWMulwiLFxuXHQgICAgXCIzMjAzMjFcIjogXCLkuLDljr9cIixcblx0ICAgIFwiMzIwMzIyXCI6IFwi5rKb5Y6/XCIsXG5cdCAgICBcIjMyMDMyM1wiOiBcIumTnOWxseWMulwiLFxuXHQgICAgXCIzMjAzMjRcIjogXCLnnaLlroHljr9cIixcblx0ICAgIFwiMzIwMzgxXCI6IFwi5paw5rKC5biCXCIsXG5cdCAgICBcIjMyMDM4MlwiOiBcIumCs+W3nuW4glwiLFxuXHQgICAgXCIzMjAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwNDAwXCI6IFwi5bi45bee5biCXCIsXG5cdCAgICBcIjMyMDQwMlwiOiBcIuWkqeWugeWMulwiLFxuXHQgICAgXCIzMjA0MDRcIjogXCLpkp/mpbzljLpcIixcblx0ICAgIFwiMzIwNDA1XCI6IFwi5oia5aKF5aCw5Yy6XCIsXG5cdCAgICBcIjMyMDQxMVwiOiBcIuaWsOWMl+WMulwiLFxuXHQgICAgXCIzMjA0MTJcIjogXCLmrabov5vljLpcIixcblx0ICAgIFwiMzIwNDgxXCI6IFwi5rqn6Ziz5biCXCIsXG5cdCAgICBcIjMyMDQ4MlwiOiBcIumHkeWdm+W4glwiLFxuXHQgICAgXCIzMjA0ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwNTAwXCI6IFwi6IuP5bee5biCXCIsXG5cdCAgICBcIjMyMDUwNVwiOiBcIuiZjuS4mOWMulwiLFxuXHQgICAgXCIzMjA1MDZcIjogXCLlkLTkuK3ljLpcIixcblx0ICAgIFwiMzIwNTA3XCI6IFwi55u45Z+O5Yy6XCIsXG5cdCAgICBcIjMyMDUwOFwiOiBcIuWnkeiLj+WMulwiLFxuXHQgICAgXCIzMjA1ODFcIjogXCLluLjnhp/luIJcIixcblx0ICAgIFwiMzIwNTgyXCI6IFwi5byg5a625riv5biCXCIsXG5cdCAgICBcIjMyMDU4M1wiOiBcIuaYhuWxseW4glwiLFxuXHQgICAgXCIzMjA1ODRcIjogXCLlkLTmsZ/ljLpcIixcblx0ICAgIFwiMzIwNTg1XCI6IFwi5aSq5LuT5biCXCIsXG5cdCAgICBcIjMyMDU5NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMjA2MDBcIjogXCLljZfpgJrluIJcIixcblx0ICAgIFwiMzIwNjAyXCI6IFwi5bSH5bed5Yy6XCIsXG5cdCAgICBcIjMyMDYxMVwiOiBcIua4r+mXuOWMulwiLFxuXHQgICAgXCIzMjA2MTJcIjogXCLpgJrlt57ljLpcIixcblx0ICAgIFwiMzIwNjIxXCI6IFwi5rW35a6J5Y6/XCIsXG5cdCAgICBcIjMyMDYyM1wiOiBcIuWmguS4nOWOv1wiLFxuXHQgICAgXCIzMjA2ODFcIjogXCLlkK/kuJzluIJcIixcblx0ICAgIFwiMzIwNjgyXCI6IFwi5aaC55qL5biCXCIsXG5cdCAgICBcIjMyMDY4NFwiOiBcIua1t+mXqOW4glwiLFxuXHQgICAgXCIzMjA2OTRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwNzAwXCI6IFwi6L+e5LqR5riv5biCXCIsXG5cdCAgICBcIjMyMDcwM1wiOiBcIui/nuS6keWMulwiLFxuXHQgICAgXCIzMjA3MDVcIjogXCLmlrDmtabljLpcIixcblx0ICAgIFwiMzIwNzA2XCI6IFwi5rW35bee5Yy6XCIsXG5cdCAgICBcIjMyMDcyMVwiOiBcIui1o+amhuWOv1wiLFxuXHQgICAgXCIzMjA3MjJcIjogXCLkuJzmtbfljr9cIixcblx0ICAgIFwiMzIwNzIzXCI6IFwi54GM5LqR5Y6/XCIsXG5cdCAgICBcIjMyMDcyNFwiOiBcIueBjOWNl+WOv1wiLFxuXHQgICAgXCIzMjA3MjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIwODAwXCI6IFwi5reu5a6J5biCXCIsXG5cdCAgICBcIjMyMDgwMlwiOiBcIua4heays+WMulwiLFxuXHQgICAgXCIzMjA4MDNcIjogXCLmt67lronljLpcIixcblx0ICAgIFwiMzIwODA0XCI6IFwi5reu6Zi05Yy6XCIsXG5cdCAgICBcIjMyMDgxMVwiOiBcIua4hea1puWMulwiLFxuXHQgICAgXCIzMjA4MjZcIjogXCLmtp/msLTljr9cIixcblx0ICAgIFwiMzIwODI5XCI6IFwi5rSq5rO95Y6/XCIsXG5cdCAgICBcIjMyMDgzMFwiOiBcIuebseecmeWOv1wiLFxuXHQgICAgXCIzMjA4MzFcIjogXCLph5HmuZbljr9cIixcblx0ICAgIFwiMzIwODMyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMyMDkwMFwiOiBcIuebkOWfjuW4glwiLFxuXHQgICAgXCIzMjA5MDJcIjogXCLkuq3muZbljLpcIixcblx0ICAgIFwiMzIwOTAzXCI6IFwi55uQ6YO95Yy6XCIsXG5cdCAgICBcIjMyMDkyMVwiOiBcIuWTjeawtOWOv1wiLFxuXHQgICAgXCIzMjA5MjJcIjogXCLmu6jmtbfljr9cIixcblx0ICAgIFwiMzIwOTIzXCI6IFwi6Zic5a6B5Y6/XCIsXG5cdCAgICBcIjMyMDkyNFwiOiBcIuWwhOmYs+WOv1wiLFxuXHQgICAgXCIzMjA5MjVcIjogXCLlu7rmuZbljr9cIixcblx0ICAgIFwiMzIwOTgxXCI6IFwi5Lic5Y+w5biCXCIsXG5cdCAgICBcIjMyMDk4MlwiOiBcIuWkp+S4sOW4glwiLFxuXHQgICAgXCIzMjA5ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIxMDAwXCI6IFwi5oms5bee5biCXCIsXG5cdCAgICBcIjMyMTAwMlwiOiBcIuW5v+mZteWMulwiLFxuXHQgICAgXCIzMjEwMDNcIjogXCLpgpfmsZ/ljLpcIixcblx0ICAgIFwiMzIxMDIzXCI6IFwi5a6d5bqU5Y6/XCIsXG5cdCAgICBcIjMyMTA4MVwiOiBcIuS7quW+geW4glwiLFxuXHQgICAgXCIzMjEwODRcIjogXCLpq5jpgq7luIJcIixcblx0ICAgIFwiMzIxMDg4XCI6IFwi5rGf6YO95Yy6XCIsXG5cdCAgICBcIjMyMTA5M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMjExMDBcIjogXCLplYfmsZ/luIJcIixcblx0ICAgIFwiMzIxMTAyXCI6IFwi5Lqs5Y+j5Yy6XCIsXG5cdCAgICBcIjMyMTExMVwiOiBcIua2puW3nuWMulwiLFxuXHQgICAgXCIzMjExMTJcIjogXCLkuLnlvpLljLpcIixcblx0ICAgIFwiMzIxMTgxXCI6IFwi5Li56Ziz5biCXCIsXG5cdCAgICBcIjMyMTE4MlwiOiBcIuaJrOS4reW4glwiLFxuXHQgICAgXCIzMjExODNcIjogXCLlj6XlrrnluIJcIixcblx0ICAgIFwiMzIxMTg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMyMTIwMFwiOiBcIuazsOW3nuW4glwiLFxuXHQgICAgXCIzMjEyMDJcIjogXCLmtbfpmbXljLpcIixcblx0ICAgIFwiMzIxMjAzXCI6IFwi6auY5riv5Yy6XCIsXG5cdCAgICBcIjMyMTI4MVwiOiBcIuWFtOWMluW4glwiLFxuXHQgICAgXCIzMjEyODJcIjogXCLpnZbmsZ/luIJcIixcblx0ICAgIFwiMzIxMjgzXCI6IFwi5rOw5YW05biCXCIsXG5cdCAgICBcIjMyMTI4NFwiOiBcIuWnnOWgsOWMulwiLFxuXHQgICAgXCIzMjEyODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzIxMzAwXCI6IFwi5a6/6L+B5biCXCIsXG5cdCAgICBcIjMyMTMwMlwiOiBcIuWuv+WfjuWMulwiLFxuXHQgICAgXCIzMjEzMTFcIjogXCLlrr/osavljLpcIixcblx0ICAgIFwiMzIxMzIyXCI6IFwi5rKt6Ziz5Y6/XCIsXG5cdCAgICBcIjMyMTMyM1wiOiBcIuazl+mYs+WOv1wiLFxuXHQgICAgXCIzMjEzMjRcIjogXCLms5fmtKrljr9cIixcblx0ICAgIFwiMzIxMzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDAwMFwiOiBcIua1meaxn+ecgVwiLFxuXHQgICAgXCIzMzAxMDBcIjogXCLmna3lt57luIJcIixcblx0ICAgIFwiMzMwMTAyXCI6IFwi5LiK5Z+O5Yy6XCIsXG5cdCAgICBcIjMzMDEwM1wiOiBcIuS4i+WfjuWMulwiLFxuXHQgICAgXCIzMzAxMDRcIjogXCLmsZ/lubLljLpcIixcblx0ICAgIFwiMzMwMTA1XCI6IFwi5oux5aKF5Yy6XCIsXG5cdCAgICBcIjMzMDEwNlwiOiBcIuilv+a5luWMulwiLFxuXHQgICAgXCIzMzAxMDhcIjogXCLmu6jmsZ/ljLpcIixcblx0ICAgIFwiMzMwMTA5XCI6IFwi6JCn5bGx5Yy6XCIsXG5cdCAgICBcIjMzMDExMFwiOiBcIuS9meadreWMulwiLFxuXHQgICAgXCIzMzAxMjJcIjogXCLmoZDlupDljr9cIixcblx0ICAgIFwiMzMwMTI3XCI6IFwi5rez5a6J5Y6/XCIsXG5cdCAgICBcIjMzMDE4MlwiOiBcIuW7uuW+t+W4glwiLFxuXHQgICAgXCIzMzAxODNcIjogXCLlr4zpmLPluIJcIixcblx0ICAgIFwiMzMwMTg1XCI6IFwi5Li05a6J5biCXCIsXG5cdCAgICBcIjMzMDE4NlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzAyMDBcIjogXCLlroHms6LluIJcIixcblx0ICAgIFwiMzMwMjAzXCI6IFwi5rW35puZ5Yy6XCIsXG5cdCAgICBcIjMzMDIwNFwiOiBcIuaxn+S4nOWMulwiLFxuXHQgICAgXCIzMzAyMDVcIjogXCLmsZ/ljJfljLpcIixcblx0ICAgIFwiMzMwMjA2XCI6IFwi5YyX5LuR5Yy6XCIsXG5cdCAgICBcIjMzMDIxMVwiOiBcIumVh+a1t+WMulwiLFxuXHQgICAgXCIzMzAyMTJcIjogXCLphJ7lt57ljLpcIixcblx0ICAgIFwiMzMwMjI1XCI6IFwi6LGh5bGx5Y6/XCIsXG5cdCAgICBcIjMzMDIyNlwiOiBcIuWugea1t+WOv1wiLFxuXHQgICAgXCIzMzAyODFcIjogXCLkvZnlp5rluIJcIixcblx0ICAgIFwiMzMwMjgyXCI6IFwi5oWI5rqq5biCXCIsXG5cdCAgICBcIjMzMDI4M1wiOiBcIuWlieWMluW4glwiLFxuXHQgICAgXCIzMzAyODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzMwMzAwXCI6IFwi5rip5bee5biCXCIsXG5cdCAgICBcIjMzMDMwMlwiOiBcIum5v+WfjuWMulwiLFxuXHQgICAgXCIzMzAzMDNcIjogXCLpvpnmub7ljLpcIixcblx0ICAgIFwiMzMwMzA0XCI6IFwi55Ov5rW35Yy6XCIsXG5cdCAgICBcIjMzMDMyMlwiOiBcIua0nuWktOWOv1wiLFxuXHQgICAgXCIzMzAzMjRcIjogXCLmsLjlmInljr9cIixcblx0ICAgIFwiMzMwMzI2XCI6IFwi5bmz6Ziz5Y6/XCIsXG5cdCAgICBcIjMzMDMyN1wiOiBcIuiLjeWNl+WOv1wiLFxuXHQgICAgXCIzMzAzMjhcIjogXCLmlofmiJDljr9cIixcblx0ICAgIFwiMzMwMzI5XCI6IFwi5rOw6aG65Y6/XCIsXG5cdCAgICBcIjMzMDM4MVwiOiBcIueRnuWuieW4glwiLFxuXHQgICAgXCIzMzAzODJcIjogXCLkuZDmuIXluIJcIixcblx0ICAgIFwiMzMwMzgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDQwMFwiOiBcIuWYieWFtOW4glwiLFxuXHQgICAgXCIzMzA0MDJcIjogXCLljZfmuZbljLpcIixcblx0ICAgIFwiMzMwNDExXCI6IFwi56eA5rSy5Yy6XCIsXG5cdCAgICBcIjMzMDQyMVwiOiBcIuWYieWWhOWOv1wiLFxuXHQgICAgXCIzMzA0MjRcIjogXCLmtbfnm5Dljr9cIixcblx0ICAgIFwiMzMwNDgxXCI6IFwi5rW35a6B5biCXCIsXG5cdCAgICBcIjMzMDQ4MlwiOiBcIuW5s+a5luW4glwiLFxuXHQgICAgXCIzMzA0ODNcIjogXCLmoZDkuaHluIJcIixcblx0ICAgIFwiMzMwNDg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDUwMFwiOiBcIua5luW3nuW4glwiLFxuXHQgICAgXCIzMzA1MDJcIjogXCLlkLTlhbTljLpcIixcblx0ICAgIFwiMzMwNTAzXCI6IFwi5Y2X5rWU5Yy6XCIsXG5cdCAgICBcIjMzMDUyMVwiOiBcIuW+t+a4heWOv1wiLFxuXHQgICAgXCIzMzA1MjJcIjogXCLplb/lhbTljr9cIixcblx0ICAgIFwiMzMwNTIzXCI6IFwi5a6J5ZCJ5Y6/XCIsXG5cdCAgICBcIjMzMDUyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzA2MDBcIjogXCLnu43lhbTluIJcIixcblx0ICAgIFwiMzMwNjAyXCI6IFwi6LaK5Z+O5Yy6XCIsXG5cdCAgICBcIjMzMDYyMVwiOiBcIue7jeWFtOWOv1wiLFxuXHQgICAgXCIzMzA2MjRcIjogXCLmlrDmmIzljr9cIixcblx0ICAgIFwiMzMwNjgxXCI6IFwi6K+45pqo5biCXCIsXG5cdCAgICBcIjMzMDY4MlwiOiBcIuS4iuiZnuW4glwiLFxuXHQgICAgXCIzMzA2ODNcIjogXCLltYrlt57luIJcIixcblx0ICAgIFwiMzMwNjg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMDcwMFwiOiBcIumHkeWNjuW4glwiLFxuXHQgICAgXCIzMzA3MDJcIjogXCLlqbrln47ljLpcIixcblx0ICAgIFwiMzMwNzAzXCI6IFwi6YeR5Lic5Yy6XCIsXG5cdCAgICBcIjMzMDcyM1wiOiBcIuatpuS5ieWOv1wiLFxuXHQgICAgXCIzMzA3MjZcIjogXCLmtabmsZ/ljr9cIixcblx0ICAgIFwiMzMwNzI3XCI6IFwi56OQ5a6J5Y6/XCIsXG5cdCAgICBcIjMzMDc4MVwiOiBcIuWFsOa6quW4glwiLFxuXHQgICAgXCIzMzA3ODJcIjogXCLkuYnkuYzluIJcIixcblx0ICAgIFwiMzMwNzgzXCI6IFwi5Lic6Ziz5biCXCIsXG5cdCAgICBcIjMzMDc4NFwiOiBcIuawuOW6t+W4glwiLFxuXHQgICAgXCIzMzA3ODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzMwODAwXCI6IFwi6KGi5bee5biCXCIsXG5cdCAgICBcIjMzMDgwMlwiOiBcIuafr+WfjuWMulwiLFxuXHQgICAgXCIzMzA4MDNcIjogXCLooaLmsZ/ljLpcIixcblx0ICAgIFwiMzMwODIyXCI6IFwi5bi45bGx5Y6/XCIsXG5cdCAgICBcIjMzMDgyNFwiOiBcIuW8gOWMluWOv1wiLFxuXHQgICAgXCIzMzA4MjVcIjogXCLpvpnmuLjljr9cIixcblx0ICAgIFwiMzMwODgxXCI6IFwi5rGf5bGx5biCXCIsXG5cdCAgICBcIjMzMDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzA5MDBcIjogXCLoiJ/lsbHluIJcIixcblx0ICAgIFwiMzMwOTAyXCI6IFwi5a6a5rW35Yy6XCIsXG5cdCAgICBcIjMzMDkwM1wiOiBcIuaZrumZgOWMulwiLFxuXHQgICAgXCIzMzA5MjFcIjogXCLlsrHlsbHljr9cIixcblx0ICAgIFwiMzMwOTIyXCI6IFwi5bWK5rOX5Y6/XCIsXG5cdCAgICBcIjMzMDkyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzMzEwMDBcIjogXCLlj7Dlt57luIJcIixcblx0ICAgIFwiMzMxMDAyXCI6IFwi5qSS5rGf5Yy6XCIsXG5cdCAgICBcIjMzMTAwM1wiOiBcIum7hOWyqeWMulwiLFxuXHQgICAgXCIzMzEwMDRcIjogXCLot6/moaXljLpcIixcblx0ICAgIFwiMzMxMDIxXCI6IFwi546J546v5Y6/XCIsXG5cdCAgICBcIjMzMTAyMlwiOiBcIuS4iemXqOWOv1wiLFxuXHQgICAgXCIzMzEwMjNcIjogXCLlpKnlj7Dljr9cIixcblx0ICAgIFwiMzMxMDI0XCI6IFwi5LuZ5bGF5Y6/XCIsXG5cdCAgICBcIjMzMTA4MVwiOiBcIua4qeWyreW4glwiLFxuXHQgICAgXCIzMzEwODJcIjogXCLkuLTmtbfluIJcIixcblx0ICAgIFwiMzMxMDgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjMzMTEwMFwiOiBcIuS4veawtOW4glwiLFxuXHQgICAgXCIzMzExMDJcIjogXCLojrLpg73ljLpcIixcblx0ICAgIFwiMzMxMTIxXCI6IFwi6Z2S55Sw5Y6/XCIsXG5cdCAgICBcIjMzMTEyMlwiOiBcIue8meS6keWOv1wiLFxuXHQgICAgXCIzMzExMjNcIjogXCLpgYLmmIzljr9cIixcblx0ICAgIFwiMzMxMTI0XCI6IFwi5p2+6Ziz5Y6/XCIsXG5cdCAgICBcIjMzMTEyNVwiOiBcIuS6keWSjOWOv1wiLFxuXHQgICAgXCIzMzExMjZcIjogXCLluoblhYPljr9cIixcblx0ICAgIFwiMzMxMTI3XCI6IFwi5pmv5a6B55Wy5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjMzMTE4MVwiOiBcIum+meazieW4glwiLFxuXHQgICAgXCIzMzExODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwMDAwXCI6IFwi5a6J5b6955yBXCIsXG5cdCAgICBcIjM0MDEwMFwiOiBcIuWQiOiCpeW4glwiLFxuXHQgICAgXCIzNDAxMDJcIjogXCLnkbbmtbfljLpcIixcblx0ICAgIFwiMzQwMTAzXCI6IFwi5bqQ6Ziz5Yy6XCIsXG5cdCAgICBcIjM0MDEwNFwiOiBcIuicgOWxseWMulwiLFxuXHQgICAgXCIzNDAxMTFcIjogXCLljIXmsrPljLpcIixcblx0ICAgIFwiMzQwMTIxXCI6IFwi6ZW/5Liw5Y6/XCIsXG5cdCAgICBcIjM0MDEyMlwiOiBcIuiCpeS4nOWOv1wiLFxuXHQgICAgXCIzNDAxMjNcIjogXCLogqXopb/ljr9cIixcblx0ICAgIFwiMzQwMTkyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MDIwMFwiOiBcIuiKnOa5luW4glwiLFxuXHQgICAgXCIzNDAyMDJcIjogXCLplZzmuZbljLpcIixcblx0ICAgIFwiMzQwMjAzXCI6IFwi5byL5rGf5Yy6XCIsXG5cdCAgICBcIjM0MDIwN1wiOiBcIum4oOaxn+WMulwiLFxuXHQgICAgXCIzNDAyMDhcIjogXCLkuInlsbHljLpcIixcblx0ICAgIFwiMzQwMjIxXCI6IFwi6Iqc5rmW5Y6/XCIsXG5cdCAgICBcIjM0MDIyMlwiOiBcIue5geaYjOWOv1wiLFxuXHQgICAgXCIzNDAyMjNcIjogXCLljZfpmbXljr9cIixcblx0ICAgIFwiMzQwMjI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MDMwMFwiOiBcIuiajOWfoOW4glwiLFxuXHQgICAgXCIzNDAzMDJcIjogXCLpvpnlrZDmuZbljLpcIixcblx0ICAgIFwiMzQwMzAzXCI6IFwi6JqM5bGx5Yy6XCIsXG5cdCAgICBcIjM0MDMwNFwiOiBcIuemueS8muWMulwiLFxuXHQgICAgXCIzNDAzMTFcIjogXCLmt67kuIrljLpcIixcblx0ICAgIFwiMzQwMzIxXCI6IFwi5oCA6L+c5Y6/XCIsXG5cdCAgICBcIjM0MDMyMlwiOiBcIuS6lOays+WOv1wiLFxuXHQgICAgXCIzNDAzMjNcIjogXCLlm7rplYfljr9cIixcblx0ICAgIFwiMzQwMzI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MDQwMFwiOiBcIua3ruWNl+W4glwiLFxuXHQgICAgXCIzNDA0MDJcIjogXCLlpKfpgJrljLpcIixcblx0ICAgIFwiMzQwNDAzXCI6IFwi55Sw5a625bq15Yy6XCIsXG5cdCAgICBcIjM0MDQwNFwiOiBcIuiwouWutumbhuWMulwiLFxuXHQgICAgXCIzNDA0MDVcIjogXCLlhavlhazlsbHljLpcIixcblx0ICAgIFwiMzQwNDA2XCI6IFwi5r2Y6ZuG5Yy6XCIsXG5cdCAgICBcIjM0MDQyMVwiOiBcIuWHpOWPsOWOv1wiLFxuXHQgICAgXCIzNDA0MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwNTAwXCI6IFwi6ams6Z6N5bGx5biCXCIsXG5cdCAgICBcIjM0MDUwM1wiOiBcIuiKseWxseWMulwiLFxuXHQgICAgXCIzNDA1MDRcIjogXCLpm6jlsbHljLpcIixcblx0ICAgIFwiMzQwNTA2XCI6IFwi5Y2a5pyb5Yy6XCIsXG5cdCAgICBcIjM0MDUyMVwiOiBcIuW9k+a2guWOv1wiLFxuXHQgICAgXCIzNDA1MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwNjAwXCI6IFwi5reu5YyX5biCXCIsXG5cdCAgICBcIjM0MDYwMlwiOiBcIuadnOmbhuWMulwiLFxuXHQgICAgXCIzNDA2MDNcIjogXCLnm7jlsbHljLpcIixcblx0ICAgIFwiMzQwNjA0XCI6IFwi54OI5bGx5Yy6XCIsXG5cdCAgICBcIjM0MDYyMVwiOiBcIua/iea6quWOv1wiLFxuXHQgICAgXCIzNDA2MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwNzAwXCI6IFwi6ZOc6Zm15biCXCIsXG5cdCAgICBcIjM0MDcwMlwiOiBcIumTnOWumOWxseWMulwiLFxuXHQgICAgXCIzNDA3MDNcIjogXCLni67lrZDlsbHljLpcIixcblx0ICAgIFwiMzQwNzExXCI6IFwi6YOK5Yy6XCIsXG5cdCAgICBcIjM0MDcyMVwiOiBcIumTnOmZteWOv1wiLFxuXHQgICAgXCIzNDA3MjJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQwODAwXCI6IFwi5a6J5bqG5biCXCIsXG5cdCAgICBcIjM0MDgwMlwiOiBcIui/juaxn+WMulwiLFxuXHQgICAgXCIzNDA4MDNcIjogXCLlpKfop4LljLpcIixcblx0ICAgIFwiMzQwODExXCI6IFwi5a6c56eA5Yy6XCIsXG5cdCAgICBcIjM0MDgyMlwiOiBcIuaAgOWugeWOv1wiLFxuXHQgICAgXCIzNDA4MjNcIjogXCLmnp7pmLPljr9cIixcblx0ICAgIFwiMzQwODI0XCI6IFwi5r2c5bGx5Y6/XCIsXG5cdCAgICBcIjM0MDgyNVwiOiBcIuWkqua5luWOv1wiLFxuXHQgICAgXCIzNDA4MjZcIjogXCLlrr/mnb7ljr9cIixcblx0ICAgIFwiMzQwODI3XCI6IFwi5pyb5rGf5Y6/XCIsXG5cdCAgICBcIjM0MDgyOFwiOiBcIuWys+ilv+WOv1wiLFxuXHQgICAgXCIzNDA4ODFcIjogXCLmoZDln47luIJcIixcblx0ICAgIFwiMzQwODgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MTAwMFwiOiBcIum7hOWxseW4glwiLFxuXHQgICAgXCIzNDEwMDJcIjogXCLlsa/muqrljLpcIixcblx0ICAgIFwiMzQxMDAzXCI6IFwi6buE5bGx5Yy6XCIsXG5cdCAgICBcIjM0MTAwNFwiOiBcIuW+veW3nuWMulwiLFxuXHQgICAgXCIzNDEwMjFcIjogXCLmrZnljr9cIixcblx0ICAgIFwiMzQxMDIyXCI6IFwi5LyR5a6B5Y6/XCIsXG5cdCAgICBcIjM0MTAyM1wiOiBcIum7n+WOv1wiLFxuXHQgICAgXCIzNDEwMjRcIjogXCLnpYHpl6jljr9cIixcblx0ICAgIFwiMzQxMDI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MTEwMFwiOiBcIua7geW3nuW4glwiLFxuXHQgICAgXCIzNDExMDJcIjogXCLnkIXnkIrljLpcIixcblx0ICAgIFwiMzQxMTAzXCI6IFwi5Y2X6LCv5Yy6XCIsXG5cdCAgICBcIjM0MTEyMlwiOiBcIuadpeWuieWOv1wiLFxuXHQgICAgXCIzNDExMjRcIjogXCLlhajmpJLljr9cIixcblx0ICAgIFwiMzQxMTI1XCI6IFwi5a6a6L+c5Y6/XCIsXG5cdCAgICBcIjM0MTEyNlwiOiBcIuWHpOmYs+WOv1wiLFxuXHQgICAgXCIzNDExODFcIjogXCLlpKnplb/luIJcIixcblx0ICAgIFwiMzQxMTgyXCI6IFwi5piO5YWJ5biCXCIsXG5cdCAgICBcIjM0MTE4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNDEyMDBcIjogXCLpmJzpmLPluIJcIixcblx0ICAgIFwiMzQxMjAyXCI6IFwi6aKN5bee5Yy6XCIsXG5cdCAgICBcIjM0MTIwM1wiOiBcIumijeS4nOWMulwiLFxuXHQgICAgXCIzNDEyMDRcIjogXCLpoo3ms4nljLpcIixcblx0ICAgIFwiMzQxMjIxXCI6IFwi5Li05rOJ5Y6/XCIsXG5cdCAgICBcIjM0MTIyMlwiOiBcIuWkquWSjOWOv1wiLFxuXHQgICAgXCIzNDEyMjVcIjogXCLpmJzljZfljr9cIixcblx0ICAgIFwiMzQxMjI2XCI6IFwi6aKN5LiK5Y6/XCIsXG5cdCAgICBcIjM0MTI4MlwiOiBcIueVjOmmluW4glwiLFxuXHQgICAgXCIzNDEyODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxMzAwXCI6IFwi5a6/5bee5biCXCIsXG5cdCAgICBcIjM0MTMwMlwiOiBcIuWfh+ahpeWMulwiLFxuXHQgICAgXCIzNDEzMjFcIjogXCLnoIDlsbHljr9cIixcblx0ICAgIFwiMzQxMzIyXCI6IFwi6JCn5Y6/XCIsXG5cdCAgICBcIjM0MTMyM1wiOiBcIueBteeSp+WOv1wiLFxuXHQgICAgXCIzNDEzMjRcIjogXCLms5fljr9cIixcblx0ICAgIFwiMzQxMzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM0MTQwMFwiOiBcIuW3oua5luW4glwiLFxuXHQgICAgXCIzNDE0MjFcIjogXCLlupDmsZ/ljr9cIixcblx0ICAgIFwiMzQxNDIyXCI6IFwi5peg5Li65Y6/XCIsXG5cdCAgICBcIjM0MTQyM1wiOiBcIuWQq+WxseWOv1wiLFxuXHQgICAgXCIzNDE0MjRcIjogXCLlkozljr9cIixcblx0ICAgIFwiMzQxNTAwXCI6IFwi5YWt5a6J5biCXCIsXG5cdCAgICBcIjM0MTUwMlwiOiBcIumHkeWuieWMulwiLFxuXHQgICAgXCIzNDE1MDNcIjogXCLoo5XlronljLpcIixcblx0ICAgIFwiMzQxNTIxXCI6IFwi5a+/5Y6/XCIsXG5cdCAgICBcIjM0MTUyMlwiOiBcIumcjemCseWOv1wiLFxuXHQgICAgXCIzNDE1MjNcIjogXCLoiJLln47ljr9cIixcblx0ICAgIFwiMzQxNTI0XCI6IFwi6YeR5a+o5Y6/XCIsXG5cdCAgICBcIjM0MTUyNVwiOiBcIumcjeWxseWOv1wiLFxuXHQgICAgXCIzNDE1MjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxNjAwXCI6IFwi5Lqz5bee5biCXCIsXG5cdCAgICBcIjM0MTYwMlwiOiBcIuiwr+WfjuWMulwiLFxuXHQgICAgXCIzNDE2MjFcIjogXCLmtqHpmLPljr9cIixcblx0ICAgIFwiMzQxNjIyXCI6IFwi6JKZ5Z+O5Y6/XCIsXG5cdCAgICBcIjM0MTYyM1wiOiBcIuWIqei+m+WOv1wiLFxuXHQgICAgXCIzNDE2MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxNzAwXCI6IFwi5rGg5bee5biCXCIsXG5cdCAgICBcIjM0MTcwMlwiOiBcIui0teaxoOWMulwiLFxuXHQgICAgXCIzNDE3MjFcIjogXCLkuJzoh7Pljr9cIixcblx0ICAgIFwiMzQxNzIyXCI6IFwi55+z5Y+w5Y6/XCIsXG5cdCAgICBcIjM0MTcyM1wiOiBcIumdkumYs+WOv1wiLFxuXHQgICAgXCIzNDE3MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzQxODAwXCI6IFwi5a6j5Z+O5biCXCIsXG5cdCAgICBcIjM0MTgwMlwiOiBcIuWuo+W3nuWMulwiLFxuXHQgICAgXCIzNDE4MjFcIjogXCLpg47muqrljr9cIixcblx0ICAgIFwiMzQxODIyXCI6IFwi5bm/5b635Y6/XCIsXG5cdCAgICBcIjM0MTgyM1wiOiBcIuazvuWOv1wiLFxuXHQgICAgXCIzNDE4MjRcIjogXCLnu6nmuqrljr9cIixcblx0ICAgIFwiMzQxODI1XCI6IFwi5peM5b635Y6/XCIsXG5cdCAgICBcIjM0MTg4MVwiOiBcIuWugeWbveW4glwiLFxuXHQgICAgXCIzNDE4ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwMDAwXCI6IFwi56aP5bu655yBXCIsXG5cdCAgICBcIjM1MDEwMFwiOiBcIuemj+W3nuW4glwiLFxuXHQgICAgXCIzNTAxMDJcIjogXCLpvJPmpbzljLpcIixcblx0ICAgIFwiMzUwMTAzXCI6IFwi5Y+w5rGf5Yy6XCIsXG5cdCAgICBcIjM1MDEwNFwiOiBcIuS7k+WxseWMulwiLFxuXHQgICAgXCIzNTAxMDVcIjogXCLpqazlsL7ljLpcIixcblx0ICAgIFwiMzUwMTExXCI6IFwi5pmL5a6J5Yy6XCIsXG5cdCAgICBcIjM1MDEyMVwiOiBcIumXveS+r+WOv1wiLFxuXHQgICAgXCIzNTAxMjJcIjogXCLov57msZ/ljr9cIixcblx0ICAgIFwiMzUwMTIzXCI6IFwi572X5rqQ5Y6/XCIsXG5cdCAgICBcIjM1MDEyNFwiOiBcIumXvea4heWOv1wiLFxuXHQgICAgXCIzNTAxMjVcIjogXCLmsLjms7Dljr9cIixcblx0ICAgIFwiMzUwMTI4XCI6IFwi5bmz5r2t5Y6/XCIsXG5cdCAgICBcIjM1MDE4MVwiOiBcIuemj+a4heW4glwiLFxuXHQgICAgXCIzNTAxODJcIjogXCLplb/kuZDluIJcIixcblx0ICAgIFwiMzUwMTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM1MDIwMFwiOiBcIuWOpumXqOW4glwiLFxuXHQgICAgXCIzNTAyMDNcIjogXCLmgJ3mmI7ljLpcIixcblx0ICAgIFwiMzUwMjA1XCI6IFwi5rW35rKn5Yy6XCIsXG5cdCAgICBcIjM1MDIwNlwiOiBcIua5lumHjOWMulwiLFxuXHQgICAgXCIzNTAyMTFcIjogXCLpm4bnvo7ljLpcIixcblx0ICAgIFwiMzUwMjEyXCI6IFwi5ZCM5a6J5Yy6XCIsXG5cdCAgICBcIjM1MDIxM1wiOiBcIue/lOWuieWMulwiLFxuXHQgICAgXCIzNTAyMTRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwMzAwXCI6IFwi6I6G55Sw5biCXCIsXG5cdCAgICBcIjM1MDMwMlwiOiBcIuWfjuWOouWMulwiLFxuXHQgICAgXCIzNTAzMDNcIjogXCLmtrXmsZ/ljLpcIixcblx0ICAgIFwiMzUwMzA0XCI6IFwi6I2U5Z+O5Yy6XCIsXG5cdCAgICBcIjM1MDMwNVwiOiBcIuengOWxv+WMulwiLFxuXHQgICAgXCIzNTAzMjJcIjogXCLku5nmuLjljr9cIixcblx0ICAgIFwiMzUwMzIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM1MDQwMFwiOiBcIuS4ieaYjuW4glwiLFxuXHQgICAgXCIzNTA0MDJcIjogXCLmooXliJfljLpcIixcblx0ICAgIFwiMzUwNDAzXCI6IFwi5LiJ5YWD5Yy6XCIsXG5cdCAgICBcIjM1MDQyMVwiOiBcIuaYjua6quWOv1wiLFxuXHQgICAgXCIzNTA0MjNcIjogXCLmuIXmtYHljr9cIixcblx0ICAgIFwiMzUwNDI0XCI6IFwi5a6B5YyW5Y6/XCIsXG5cdCAgICBcIjM1MDQyNVwiOiBcIuWkp+eUsOWOv1wiLFxuXHQgICAgXCIzNTA0MjZcIjogXCLlsKTmuqrljr9cIixcblx0ICAgIFwiMzUwNDI3XCI6IFwi5rKZ5Y6/XCIsXG5cdCAgICBcIjM1MDQyOFwiOiBcIuWwhuS5kOWOv1wiLFxuXHQgICAgXCIzNTA0MjlcIjogXCLms7DlroHljr9cIixcblx0ICAgIFwiMzUwNDMwXCI6IFwi5bu65a6B5Y6/XCIsXG5cdCAgICBcIjM1MDQ4MVwiOiBcIuawuOWuieW4glwiLFxuXHQgICAgXCIzNTA0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwNTAwXCI6IFwi5rOJ5bee5biCXCIsXG5cdCAgICBcIjM1MDUwMlwiOiBcIumypOWfjuWMulwiLFxuXHQgICAgXCIzNTA1MDNcIjogXCLkuLDms73ljLpcIixcblx0ICAgIFwiMzUwNTA0XCI6IFwi5rSb5rGf5Yy6XCIsXG5cdCAgICBcIjM1MDUwNVwiOiBcIuaziea4r+WMulwiLFxuXHQgICAgXCIzNTA1MjFcIjogXCLmg6Dlronljr9cIixcblx0ICAgIFwiMzUwNTI0XCI6IFwi5a6J5rqq5Y6/XCIsXG5cdCAgICBcIjM1MDUyNVwiOiBcIuawuOaYpeWOv1wiLFxuXHQgICAgXCIzNTA1MjZcIjogXCLlvrfljJbljr9cIixcblx0ICAgIFwiMzUwNTI3XCI6IFwi6YeR6Zeo5Y6/XCIsXG5cdCAgICBcIjM1MDU4MVwiOiBcIuefs+eLruW4glwiLFxuXHQgICAgXCIzNTA1ODJcIjogXCLmmYvmsZ/luIJcIixcblx0ICAgIFwiMzUwNTgzXCI6IFwi5Y2X5a6J5biCXCIsXG5cdCAgICBcIjM1MDU4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNTA2MDBcIjogXCLmvLPlt57luIJcIixcblx0ICAgIFwiMzUwNjAyXCI6IFwi6IqX5Z+O5Yy6XCIsXG5cdCAgICBcIjM1MDYwM1wiOiBcIum+meaWh+WMulwiLFxuXHQgICAgXCIzNTA2MjJcIjogXCLkupHpnITljr9cIixcblx0ICAgIFwiMzUwNjIzXCI6IFwi5ryz5rWm5Y6/XCIsXG5cdCAgICBcIjM1MDYyNFwiOiBcIuivj+WuieWOv1wiLFxuXHQgICAgXCIzNTA2MjVcIjogXCLplb/ms7Dljr9cIixcblx0ICAgIFwiMzUwNjI2XCI6IFwi5Lic5bGx5Y6/XCIsXG5cdCAgICBcIjM1MDYyN1wiOiBcIuWNl+mdluWOv1wiLFxuXHQgICAgXCIzNTA2MjhcIjogXCLlubPlkozljr9cIixcblx0ICAgIFwiMzUwNjI5XCI6IFwi5Y2O5a6J5Y6/XCIsXG5cdCAgICBcIjM1MDY4MVwiOiBcIum+mea1t+W4glwiLFxuXHQgICAgXCIzNTA2ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwNzAwXCI6IFwi5Y2X5bmz5biCXCIsXG5cdCAgICBcIjM1MDcwMlwiOiBcIuW7tuW5s+WMulwiLFxuXHQgICAgXCIzNTA3MjFcIjogXCLpobrmmIzljr9cIixcblx0ICAgIFwiMzUwNzIyXCI6IFwi5rWm5Z+O5Y6/XCIsXG5cdCAgICBcIjM1MDcyM1wiOiBcIuWFieazveWOv1wiLFxuXHQgICAgXCIzNTA3MjRcIjogXCLmnb7muqrljr9cIixcblx0ICAgIFwiMzUwNzI1XCI6IFwi5pS/5ZKM5Y6/XCIsXG5cdCAgICBcIjM1MDc4MVwiOiBcIumCteatpuW4glwiLFxuXHQgICAgXCIzNTA3ODJcIjogXCLmrablpLflsbHluIJcIixcblx0ICAgIFwiMzUwNzgzXCI6IFwi5bu655Ov5biCXCIsXG5cdCAgICBcIjM1MDc4NFwiOiBcIuW7uumYs+W4glwiLFxuXHQgICAgXCIzNTA3ODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwODAwXCI6IFwi6b6Z5bKp5biCXCIsXG5cdCAgICBcIjM1MDgwMlwiOiBcIuaWsOe9l+WMulwiLFxuXHQgICAgXCIzNTA4MjFcIjogXCLplb/msYDljr9cIixcblx0ICAgIFwiMzUwODIyXCI6IFwi5rC45a6a5Y6/XCIsXG5cdCAgICBcIjM1MDgyM1wiOiBcIuS4iuadreWOv1wiLFxuXHQgICAgXCIzNTA4MjRcIjogXCLmrablubPljr9cIixcblx0ICAgIFwiMzUwODI1XCI6IFwi6L+e5Z+O5Y6/XCIsXG5cdCAgICBcIjM1MDg4MVwiOiBcIua8s+W5s+W4glwiLFxuXHQgICAgXCIzNTA4ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzUwOTAwXCI6IFwi5a6B5b635biCXCIsXG5cdCAgICBcIjM1MDkwMlwiOiBcIuiVieWfjuWMulwiLFxuXHQgICAgXCIzNTA5MjFcIjogXCLpnJ7mtabljr9cIixcblx0ICAgIFwiMzUwOTIyXCI6IFwi5Y+k55Sw5Y6/XCIsXG5cdCAgICBcIjM1MDkyM1wiOiBcIuWxj+WNl+WOv1wiLFxuXHQgICAgXCIzNTA5MjRcIjogXCLlr7/lroHljr9cIixcblx0ICAgIFwiMzUwOTI1XCI6IFwi5ZGo5a6B5Y6/XCIsXG5cdCAgICBcIjM1MDkyNlwiOiBcIuafmOiNo+WOv1wiLFxuXHQgICAgXCIzNTA5ODFcIjogXCLnpo/lronluIJcIixcblx0ICAgIFwiMzUwOTgyXCI6IFwi56aP6byO5biCXCIsXG5cdCAgICBcIjM1MDk4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjAwMDBcIjogXCLmsZ/opb/nnIFcIixcblx0ICAgIFwiMzYwMTAwXCI6IFwi5Y2X5piM5biCXCIsXG5cdCAgICBcIjM2MDEwMlwiOiBcIuS4nOa5luWMulwiLFxuXHQgICAgXCIzNjAxMDNcIjogXCLopb/muZbljLpcIixcblx0ICAgIFwiMzYwMTA0XCI6IFwi6Z2S5LqR6LCx5Yy6XCIsXG5cdCAgICBcIjM2MDEwNVwiOiBcIua5vumHjOWMulwiLFxuXHQgICAgXCIzNjAxMTFcIjogXCLpnZLlsbHmuZbljLpcIixcblx0ICAgIFwiMzYwMTIxXCI6IFwi5Y2X5piM5Y6/XCIsXG5cdCAgICBcIjM2MDEyMlwiOiBcIuaWsOW7uuWOv1wiLFxuXHQgICAgXCIzNjAxMjNcIjogXCLlronkuYnljr9cIixcblx0ICAgIFwiMzYwMTI0XCI6IFwi6L+b6LSk5Y6/XCIsXG5cdCAgICBcIjM2MDEyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjAyMDBcIjogXCLmma/lvrfplYfluIJcIixcblx0ICAgIFwiMzYwMjAyXCI6IFwi5piM5rGf5Yy6XCIsXG5cdCAgICBcIjM2MDIwM1wiOiBcIuePoOWxseWMulwiLFxuXHQgICAgXCIzNjAyMjJcIjogXCLmta7mooHljr9cIixcblx0ICAgIFwiMzYwMjgxXCI6IFwi5LmQ5bmz5biCXCIsXG5cdCAgICBcIjM2MDI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjAzMDBcIjogXCLokI3kuaHluIJcIixcblx0ICAgIFwiMzYwMzAyXCI6IFwi5a6J5rqQ5Yy6XCIsXG5cdCAgICBcIjM2MDMxM1wiOiBcIua5mOS4nOWMulwiLFxuXHQgICAgXCIzNjAzMjFcIjogXCLojrLoirHljr9cIixcblx0ICAgIFwiMzYwMzIyXCI6IFwi5LiK5qCX5Y6/XCIsXG5cdCAgICBcIjM2MDMyM1wiOiBcIuiKpua6quWOv1wiLFxuXHQgICAgXCIzNjAzMjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzYwNDAwXCI6IFwi5Lmd5rGf5biCXCIsXG5cdCAgICBcIjM2MDQwMlwiOiBcIuW6kOWxseWMulwiLFxuXHQgICAgXCIzNjA0MDNcIjogXCLmtZTpmLPljLpcIixcblx0ICAgIFwiMzYwNDIxXCI6IFwi5Lmd5rGf5Y6/XCIsXG5cdCAgICBcIjM2MDQyM1wiOiBcIuatpuWugeWOv1wiLFxuXHQgICAgXCIzNjA0MjRcIjogXCLkv67msLTljr9cIixcblx0ICAgIFwiMzYwNDI1XCI6IFwi5rC45L+u5Y6/XCIsXG5cdCAgICBcIjM2MDQyNlwiOiBcIuW+t+WuieWOv1wiLFxuXHQgICAgXCIzNjA0MjdcIjogXCLmmJ/lrZDljr9cIixcblx0ICAgIFwiMzYwNDI4XCI6IFwi6YO95piM5Y6/XCIsXG5cdCAgICBcIjM2MDQyOVwiOiBcIua5luWPo+WOv1wiLFxuXHQgICAgXCIzNjA0MzBcIjogXCLlva3ms73ljr9cIixcblx0ICAgIFwiMzYwNDgxXCI6IFwi55Ge5piM5biCXCIsXG5cdCAgICBcIjM2MDQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjA0ODNcIjogXCLlhbHpnZLln47luIJcIixcblx0ICAgIFwiMzYwNTAwXCI6IFwi5paw5L2Z5biCXCIsXG5cdCAgICBcIjM2MDUwMlwiOiBcIua4neawtOWMulwiLFxuXHQgICAgXCIzNjA1MjFcIjogXCLliIblrpzljr9cIixcblx0ICAgIFwiMzYwNTIyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM2MDYwMFwiOiBcIum5sOa9reW4glwiLFxuXHQgICAgXCIzNjA2MDJcIjogXCLmnIjmuZbljLpcIixcblx0ICAgIFwiMzYwNjIyXCI6IFwi5L2Z5rGf5Y6/XCIsXG5cdCAgICBcIjM2MDY4MVwiOiBcIui0tea6quW4glwiLFxuXHQgICAgXCIzNjA2ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzYwNzAwXCI6IFwi6LWj5bee5biCXCIsXG5cdCAgICBcIjM2MDcwMlwiOiBcIueroOi0oeWMulwiLFxuXHQgICAgXCIzNjA3MjFcIjogXCLotaPljr9cIixcblx0ICAgIFwiMzYwNzIyXCI6IFwi5L+h5Liw5Y6/XCIsXG5cdCAgICBcIjM2MDcyM1wiOiBcIuWkp+S9meWOv1wiLFxuXHQgICAgXCIzNjA3MjRcIjogXCLkuIrnirnljr9cIixcblx0ICAgIFwiMzYwNzI1XCI6IFwi5bSH5LmJ5Y6/XCIsXG5cdCAgICBcIjM2MDcyNlwiOiBcIuWuiei/nOWOv1wiLFxuXHQgICAgXCIzNjA3MjdcIjogXCLpvpnljZfljr9cIixcblx0ICAgIFwiMzYwNzI4XCI6IFwi5a6a5Y2X5Y6/XCIsXG5cdCAgICBcIjM2MDcyOVwiOiBcIuWFqOWNl+WOv1wiLFxuXHQgICAgXCIzNjA3MzBcIjogXCLlroHpg73ljr9cIixcblx0ICAgIFwiMzYwNzMxXCI6IFwi5LqO6YO95Y6/XCIsXG5cdCAgICBcIjM2MDczMlwiOiBcIuWFtOWbveWOv1wiLFxuXHQgICAgXCIzNjA3MzNcIjogXCLkvJrmmIzljr9cIixcblx0ICAgIFwiMzYwNzM0XCI6IFwi5a+75LmM5Y6/XCIsXG5cdCAgICBcIjM2MDczNVwiOiBcIuefs+WfjuWOv1wiLFxuXHQgICAgXCIzNjA3ODFcIjogXCLnkZ7ph5HluIJcIixcblx0ICAgIFwiMzYwNzgyXCI6IFwi5Y2X5bq35biCXCIsXG5cdCAgICBcIjM2MDc4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjA4MDBcIjogXCLlkInlronluIJcIixcblx0ICAgIFwiMzYwODAyXCI6IFwi5ZCJ5bee5Yy6XCIsXG5cdCAgICBcIjM2MDgwM1wiOiBcIumdkuWOn+WMulwiLFxuXHQgICAgXCIzNjA4MjFcIjogXCLlkInlronljr9cIixcblx0ICAgIFwiMzYwODIyXCI6IFwi5ZCJ5rC05Y6/XCIsXG5cdCAgICBcIjM2MDgyM1wiOiBcIuWzoeaxn+WOv1wiLFxuXHQgICAgXCIzNjA4MjRcIjogXCLmlrDlubLljr9cIixcblx0ICAgIFwiMzYwODI1XCI6IFwi5rC45Liw5Y6/XCIsXG5cdCAgICBcIjM2MDgyNlwiOiBcIuazsOWSjOWOv1wiLFxuXHQgICAgXCIzNjA4MjdcIjogXCLpgYLlt53ljr9cIixcblx0ICAgIFwiMzYwODI4XCI6IFwi5LiH5a6J5Y6/XCIsXG5cdCAgICBcIjM2MDgyOVwiOiBcIuWuieemj+WOv1wiLFxuXHQgICAgXCIzNjA4MzBcIjogXCLmsLjmlrDljr9cIixcblx0ICAgIFwiMzYwODgxXCI6IFwi5LqV5YaI5bGx5biCXCIsXG5cdCAgICBcIjM2MDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjA5MDBcIjogXCLlrpzmmKXluIJcIixcblx0ICAgIFwiMzYwOTAyXCI6IFwi6KKB5bee5Yy6XCIsXG5cdCAgICBcIjM2MDkyMVwiOiBcIuWlieaWsOWOv1wiLFxuXHQgICAgXCIzNjA5MjJcIjogXCLkuIfovb3ljr9cIixcblx0ICAgIFwiMzYwOTIzXCI6IFwi5LiK6auY5Y6/XCIsXG5cdCAgICBcIjM2MDkyNFwiOiBcIuWunOS4sOWOv1wiLFxuXHQgICAgXCIzNjA5MjVcIjogXCLpnZblronljr9cIixcblx0ICAgIFwiMzYwOTI2XCI6IFwi6ZOc6byT5Y6/XCIsXG5cdCAgICBcIjM2MDk4MVwiOiBcIuS4sOWfjuW4glwiLFxuXHQgICAgXCIzNjA5ODJcIjogXCLmqJ/moJHluIJcIixcblx0ICAgIFwiMzYwOTgzXCI6IFwi6auY5a6J5biCXCIsXG5cdCAgICBcIjM2MDk4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNjEwMDBcIjogXCLmiprlt57luIJcIixcblx0ICAgIFwiMzYxMDAyXCI6IFwi5Li05bed5Yy6XCIsXG5cdCAgICBcIjM2MTAyMVwiOiBcIuWNl+WfjuWOv1wiLFxuXHQgICAgXCIzNjEwMjJcIjogXCLpu47lt53ljr9cIixcblx0ICAgIFwiMzYxMDIzXCI6IFwi5Y2X5Liw5Y6/XCIsXG5cdCAgICBcIjM2MTAyNFwiOiBcIuW0h+S7geWOv1wiLFxuXHQgICAgXCIzNjEwMjVcIjogXCLkuZDlronljr9cIixcblx0ICAgIFwiMzYxMDI2XCI6IFwi5a6c6buE5Y6/XCIsXG5cdCAgICBcIjM2MTAyN1wiOiBcIumHkea6quWOv1wiLFxuXHQgICAgXCIzNjEwMjhcIjogXCLotYTmuqrljr9cIixcblx0ICAgIFwiMzYxMDI5XCI6IFwi5Lic5Lmh5Y6/XCIsXG5cdCAgICBcIjM2MTAzMFwiOiBcIuW5v+aYjOWOv1wiLFxuXHQgICAgXCIzNjEwMzFcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzYxMTAwXCI6IFwi5LiK6aW25biCXCIsXG5cdCAgICBcIjM2MTEwMlwiOiBcIuS/oeW3nuWMulwiLFxuXHQgICAgXCIzNjExMjFcIjogXCLkuIrppbbljr9cIixcblx0ICAgIFwiMzYxMTIyXCI6IFwi5bm/5Liw5Y6/XCIsXG5cdCAgICBcIjM2MTEyM1wiOiBcIueOieWxseWOv1wiLFxuXHQgICAgXCIzNjExMjRcIjogXCLpk4XlsbHljr9cIixcblx0ICAgIFwiMzYxMTI1XCI6IFwi5qiq5bOw5Y6/XCIsXG5cdCAgICBcIjM2MTEyNlwiOiBcIuW8i+mYs+WOv1wiLFxuXHQgICAgXCIzNjExMjdcIjogXCLkvZnlubLljr9cIixcblx0ICAgIFwiMzYxMTI4XCI6IFwi6YSx6Ziz5Y6/XCIsXG5cdCAgICBcIjM2MTEyOVwiOiBcIuS4h+W5tOWOv1wiLFxuXHQgICAgXCIzNjExMzBcIjogXCLlqbrmupDljr9cIixcblx0ICAgIFwiMzYxMTgxXCI6IFwi5b635YW05biCXCIsXG5cdCAgICBcIjM2MTE4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzAwMDBcIjogXCLlsbHkuJznnIFcIixcblx0ICAgIFwiMzcwMTAwXCI6IFwi5rWO5Y2X5biCXCIsXG5cdCAgICBcIjM3MDEwMlwiOiBcIuWOhuS4i+WMulwiLFxuXHQgICAgXCIzNzAxMDNcIjogXCLluILkuK3ljLpcIixcblx0ICAgIFwiMzcwMTA0XCI6IFwi5qeQ6I2r5Yy6XCIsXG5cdCAgICBcIjM3MDEwNVwiOiBcIuWkqeahpeWMulwiLFxuXHQgICAgXCIzNzAxMTJcIjogXCLljobln47ljLpcIixcblx0ICAgIFwiMzcwMTEzXCI6IFwi6ZW/5riF5Yy6XCIsXG5cdCAgICBcIjM3MDEyNFwiOiBcIuW5s+mYtOWOv1wiLFxuXHQgICAgXCIzNzAxMjVcIjogXCLmtY7pmLPljr9cIixcblx0ICAgIFwiMzcwMTI2XCI6IFwi5ZWG5rKz5Y6/XCIsXG5cdCAgICBcIjM3MDE4MVwiOiBcIueroOS4mOW4glwiLFxuXHQgICAgXCIzNzAxODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwMjAwXCI6IFwi6Z2S5bKb5biCXCIsXG5cdCAgICBcIjM3MDIwMlwiOiBcIuW4guWNl+WMulwiLFxuXHQgICAgXCIzNzAyMDNcIjogXCLluILljJfljLpcIixcblx0ICAgIFwiMzcwMjExXCI6IFwi6buE5bKb5Yy6XCIsXG5cdCAgICBcIjM3MDIxMlwiOiBcIuW0guWxseWMulwiLFxuXHQgICAgXCIzNzAyMTNcIjogXCLmnY7msqfljLpcIixcblx0ICAgIFwiMzcwMjE0XCI6IFwi5Z+O6Ziz5Yy6XCIsXG5cdCAgICBcIjM3MDI4MVwiOiBcIuiDtuW3nuW4glwiLFxuXHQgICAgXCIzNzAyODJcIjogXCLljbPloqjluIJcIixcblx0ICAgIFwiMzcwMjgzXCI6IFwi5bmz5bqm5biCXCIsXG5cdCAgICBcIjM3MDI4NVwiOiBcIuiOseilv+W4glwiLFxuXHQgICAgXCIzNzAyODZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwMzAwXCI6IFwi5reE5Y2a5biCXCIsXG5cdCAgICBcIjM3MDMwMlwiOiBcIua3hOW3neWMulwiLFxuXHQgICAgXCIzNzAzMDNcIjogXCLlvKDlupfljLpcIixcblx0ICAgIFwiMzcwMzA0XCI6IFwi5Y2a5bGx5Yy6XCIsXG5cdCAgICBcIjM3MDMwNVwiOiBcIuS4tOa3hOWMulwiLFxuXHQgICAgXCIzNzAzMDZcIjogXCLlkajmnZHljLpcIixcblx0ICAgIFwiMzcwMzIxXCI6IFwi5qGT5Y+w5Y6/XCIsXG5cdCAgICBcIjM3MDMyMlwiOiBcIumrmOmdkuWOv1wiLFxuXHQgICAgXCIzNzAzMjNcIjogXCLmsoLmupDljr9cIixcblx0ICAgIFwiMzcwMzI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MDQwMFwiOiBcIuaeo+W6hOW4glwiLFxuXHQgICAgXCIzNzA0MDJcIjogXCLluILkuK3ljLpcIixcblx0ICAgIFwiMzcwNDAzXCI6IFwi6Jab5Z+O5Yy6XCIsXG5cdCAgICBcIjM3MDQwNFwiOiBcIuWzhOWfjuWMulwiLFxuXHQgICAgXCIzNzA0MDVcIjogXCLlj7DlhL/luoTljLpcIixcblx0ICAgIFwiMzcwNDA2XCI6IFwi5bGx5Lqt5Yy6XCIsXG5cdCAgICBcIjM3MDQ4MVwiOiBcIua7leW3nuW4glwiLFxuXHQgICAgXCIzNzA0ODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwNTAwXCI6IFwi5Lic6JCl5biCXCIsXG5cdCAgICBcIjM3MDUwMlwiOiBcIuS4nOiQpeWMulwiLFxuXHQgICAgXCIzNzA1MDNcIjogXCLmsrPlj6PljLpcIixcblx0ICAgIFwiMzcwNTIxXCI6IFwi5Z6m5Yip5Y6/XCIsXG5cdCAgICBcIjM3MDUyMlwiOiBcIuWIqea0peWOv1wiLFxuXHQgICAgXCIzNzA1MjNcIjogXCLlub/ppbbljr9cIixcblx0ICAgIFwiMzcwNTkxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MDYwMFwiOiBcIueDn+WPsOW4glwiLFxuXHQgICAgXCIzNzA2MDJcIjogXCLoip3nvZjljLpcIixcblx0ICAgIFwiMzcwNjExXCI6IFwi56aP5bGx5Yy6XCIsXG5cdCAgICBcIjM3MDYxMlwiOiBcIueJn+W5s+WMulwiLFxuXHQgICAgXCIzNzA2MTNcIjogXCLojrHlsbHljLpcIixcblx0ICAgIFwiMzcwNjM0XCI6IFwi6ZW/5bKb5Y6/XCIsXG5cdCAgICBcIjM3MDY4MVwiOiBcIum+meWPo+W4glwiLFxuXHQgICAgXCIzNzA2ODJcIjogXCLojrHpmLPluIJcIixcblx0ICAgIFwiMzcwNjgzXCI6IFwi6I6x5bee5biCXCIsXG5cdCAgICBcIjM3MDY4NFwiOiBcIuiTrOiOseW4glwiLFxuXHQgICAgXCIzNzA2ODVcIjogXCLmi5vov5zluIJcIixcblx0ICAgIFwiMzcwNjg2XCI6IFwi5qCW6Zye5biCXCIsXG5cdCAgICBcIjM3MDY4N1wiOiBcIua1t+mYs+W4glwiLFxuXHQgICAgXCIzNzA2ODhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcwNzAwXCI6IFwi5r2N5Z2K5biCXCIsXG5cdCAgICBcIjM3MDcwMlwiOiBcIua9jeWfjuWMulwiLFxuXHQgICAgXCIzNzA3MDNcIjogXCLlr5Lkuq3ljLpcIixcblx0ICAgIFwiMzcwNzA0XCI6IFwi5Z2K5a2Q5Yy6XCIsXG5cdCAgICBcIjM3MDcwNVwiOiBcIuWljuaWh+WMulwiLFxuXHQgICAgXCIzNzA3MjRcIjogXCLkuLTmnJDljr9cIixcblx0ICAgIFwiMzcwNzI1XCI6IFwi5piM5LmQ5Y6/XCIsXG5cdCAgICBcIjM3MDc4MVwiOiBcIumdkuW3nuW4glwiLFxuXHQgICAgXCIzNzA3ODJcIjogXCLor7jln47luIJcIixcblx0ICAgIFwiMzcwNzgzXCI6IFwi5a+/5YWJ5biCXCIsXG5cdCAgICBcIjM3MDc4NFwiOiBcIuWuieS4mOW4glwiLFxuXHQgICAgXCIzNzA3ODVcIjogXCLpq5jlr4bluIJcIixcblx0ICAgIFwiMzcwNzg2XCI6IFwi5piM6YKR5biCXCIsXG5cdCAgICBcIjM3MDc4N1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzA4MDBcIjogXCLmtY7lroHluIJcIixcblx0ICAgIFwiMzcwODAyXCI6IFwi5biC5Lit5Yy6XCIsXG5cdCAgICBcIjM3MDgxMVwiOiBcIuS7u+WfjuWMulwiLFxuXHQgICAgXCIzNzA4MjZcIjogXCLlvq7lsbHljr9cIixcblx0ICAgIFwiMzcwODI3XCI6IFwi6bG85Y+w5Y6/XCIsXG5cdCAgICBcIjM3MDgyOFwiOiBcIumHkeS5oeWOv1wiLFxuXHQgICAgXCIzNzA4MjlcIjogXCLlmInnpaXljr9cIixcblx0ICAgIFwiMzcwODMwXCI6IFwi5rG25LiK5Y6/XCIsXG5cdCAgICBcIjM3MDgzMVwiOiBcIuazl+awtOWOv1wiLFxuXHQgICAgXCIzNzA4MzJcIjogXCLmooHlsbHljr9cIixcblx0ICAgIFwiMzcwODgxXCI6IFwi5puy6Zic5biCXCIsXG5cdCAgICBcIjM3MDg4MlwiOiBcIuWFluW3nuW4glwiLFxuXHQgICAgXCIzNzA4ODNcIjogXCLpgrnln47luIJcIixcblx0ICAgIFwiMzcwODg0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MDkwMFwiOiBcIuazsOWuieW4glwiLFxuXHQgICAgXCIzNzA5MDJcIjogXCLms7DlsbHljLpcIixcblx0ICAgIFwiMzcwOTAzXCI6IFwi5bKx5bKz5Yy6XCIsXG5cdCAgICBcIjM3MDkyMVwiOiBcIuWugemYs+WOv1wiLFxuXHQgICAgXCIzNzA5MjNcIjogXCLkuJzlubPljr9cIixcblx0ICAgIFwiMzcwOTgyXCI6IFwi5paw5rOw5biCXCIsXG5cdCAgICBcIjM3MDk4M1wiOiBcIuiCpeWfjuW4glwiLFxuXHQgICAgXCIzNzA5ODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxMDAwXCI6IFwi5aiB5rW35biCXCIsXG5cdCAgICBcIjM3MTAwMlwiOiBcIueOr+e/oOWMulwiLFxuXHQgICAgXCIzNzEwODFcIjogXCLmlofnmbvluIJcIixcblx0ICAgIFwiMzcxMDgyXCI6IFwi6I2j5oiQ5biCXCIsXG5cdCAgICBcIjM3MTA4M1wiOiBcIuS5s+WxseW4glwiLFxuXHQgICAgXCIzNzEwODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxMTAwXCI6IFwi5pel54Wn5biCXCIsXG5cdCAgICBcIjM3MTEwMlwiOiBcIuS4nOa4r+WMulwiLFxuXHQgICAgXCIzNzExMDNcIjogXCLlsprlsbHljLpcIixcblx0ICAgIFwiMzcxMTIxXCI6IFwi5LqU6I6y5Y6/XCIsXG5cdCAgICBcIjM3MTEyMlwiOiBcIuiOkuWOv1wiLFxuXHQgICAgXCIzNzExMjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxMjAwXCI6IFwi6I6x6Iqc5biCXCIsXG5cdCAgICBcIjM3MTIwMlwiOiBcIuiOseWfjuWMulwiLFxuXHQgICAgXCIzNzEyMDNcIjogXCLpkqLln47ljLpcIixcblx0ICAgIFwiMzcxMjA0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MTMwMFwiOiBcIuS4tOayguW4glwiLFxuXHQgICAgXCIzNzEzMDJcIjogXCLlhbDlsbHljLpcIixcblx0ICAgIFwiMzcxMzExXCI6IFwi572X5bqE5Yy6XCIsXG5cdCAgICBcIjM3MTMxMlwiOiBcIuays+S4nOWMulwiLFxuXHQgICAgXCIzNzEzMjFcIjogXCLmsoLljZfljr9cIixcblx0ICAgIFwiMzcxMzIyXCI6IFwi6YOv5Z+O5Y6/XCIsXG5cdCAgICBcIjM3MTMyM1wiOiBcIuayguawtOWOv1wiLFxuXHQgICAgXCIzNzEzMjRcIjogXCLoi43lsbHljr9cIixcblx0ICAgIFwiMzcxMzI1XCI6IFwi6LS55Y6/XCIsXG5cdCAgICBcIjM3MTMyNlwiOiBcIuW5s+mCkeWOv1wiLFxuXHQgICAgXCIzNzEzMjdcIjogXCLojpLljZfljr9cIixcblx0ICAgIFwiMzcxMzI4XCI6IFwi6JKZ6Zi05Y6/XCIsXG5cdCAgICBcIjM3MTMyOVwiOiBcIuS4tOayreWOv1wiLFxuXHQgICAgXCIzNzEzMzBcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiMzcxNDAwXCI6IFwi5b635bee5biCXCIsXG5cdCAgICBcIjM3MTQwMlwiOiBcIuW+t+WfjuWMulwiLFxuXHQgICAgXCIzNzE0MjFcIjogXCLpmbXljr9cIixcblx0ICAgIFwiMzcxNDIyXCI6IFwi5a6B5rSl5Y6/XCIsXG5cdCAgICBcIjM3MTQyM1wiOiBcIuW6huS6keWOv1wiLFxuXHQgICAgXCIzNzE0MjRcIjogXCLkuLTpgpHljr9cIixcblx0ICAgIFwiMzcxNDI1XCI6IFwi6b2Q5rKz5Y6/XCIsXG5cdCAgICBcIjM3MTQyNlwiOiBcIuW5s+WOn+WOv1wiLFxuXHQgICAgXCIzNzE0MjdcIjogXCLlpI/mtKXljr9cIixcblx0ICAgIFwiMzcxNDI4XCI6IFwi5q2m5Z+O5Y6/XCIsXG5cdCAgICBcIjM3MTQ4MVwiOiBcIuS5kOmZteW4glwiLFxuXHQgICAgXCIzNzE0ODJcIjogXCLnprnln47luIJcIixcblx0ICAgIFwiMzcxNDgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjM3MTUwMFwiOiBcIuiBiuWfjuW4glwiLFxuXHQgICAgXCIzNzE1MDJcIjogXCLkuJzmmIzlupzljLpcIixcblx0ICAgIFwiMzcxNTIxXCI6IFwi6Ziz6LC35Y6/XCIsXG5cdCAgICBcIjM3MTUyMlwiOiBcIuiOmOWOv1wiLFxuXHQgICAgXCIzNzE1MjNcIjogXCLojIzlubPljr9cIixcblx0ICAgIFwiMzcxNTI0XCI6IFwi5Lic6Zi/5Y6/XCIsXG5cdCAgICBcIjM3MTUyNVwiOiBcIuWGoOWOv1wiLFxuXHQgICAgXCIzNzE1MjZcIjogXCLpq5jllJDljr9cIixcblx0ICAgIFwiMzcxNTgxXCI6IFwi5Li05riF5biCXCIsXG5cdCAgICBcIjM3MTU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzE2MDBcIjogXCLmu6jlt57luIJcIixcblx0ICAgIFwiMzcxNjAyXCI6IFwi5ruo5Z+O5Yy6XCIsXG5cdCAgICBcIjM3MTYyMVwiOiBcIuaDoOawkeWOv1wiLFxuXHQgICAgXCIzNzE2MjJcIjogXCLpmLPkv6Hljr9cIixcblx0ICAgIFwiMzcxNjIzXCI6IFwi5peg5qOj5Y6/XCIsXG5cdCAgICBcIjM3MTYyNFwiOiBcIuayvuWMluWOv1wiLFxuXHQgICAgXCIzNzE2MjVcIjogXCLljZrlhbTljr9cIixcblx0ICAgIFwiMzcxNjI2XCI6IFwi6YK55bmz5Y6/XCIsXG5cdCAgICBcIjM3MTYyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCIzNzE3MDBcIjogXCLoj4/ms73luIJcIixcblx0ICAgIFwiMzcxNzAyXCI6IFwi54mh5Li55Yy6XCIsXG5cdCAgICBcIjM3MTcyMVwiOiBcIuabueWOv1wiLFxuXHQgICAgXCIzNzE3MjJcIjogXCLljZXljr9cIixcblx0ICAgIFwiMzcxNzIzXCI6IFwi5oiQ5q2m5Y6/XCIsXG5cdCAgICBcIjM3MTcyNFwiOiBcIuW3qOmHjuWOv1wiLFxuXHQgICAgXCIzNzE3MjVcIjogXCLpg5Pln47ljr9cIixcblx0ICAgIFwiMzcxNzI2XCI6IFwi6YSE5Z+O5Y6/XCIsXG5cdCAgICBcIjM3MTcyN1wiOiBcIuWumumZtuWOv1wiLFxuXHQgICAgXCIzNzE3MjhcIjogXCLkuJzmmI7ljr9cIixcblx0ICAgIFwiMzcxNzI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDAwMFwiOiBcIuays+WNl+ecgVwiLFxuXHQgICAgXCI0MTAxMDBcIjogXCLpg5Hlt57luIJcIixcblx0ICAgIFwiNDEwMTAyXCI6IFwi5Lit5Y6f5Yy6XCIsXG5cdCAgICBcIjQxMDEwM1wiOiBcIuS6jOS4g+WMulwiLFxuXHQgICAgXCI0MTAxMDRcIjogXCLnrqHln47lm57ml4/ljLpcIixcblx0ICAgIFwiNDEwMTA1XCI6IFwi6YeR5rC05Yy6XCIsXG5cdCAgICBcIjQxMDEwNlwiOiBcIuS4iuihl+WMulwiLFxuXHQgICAgXCI0MTAxMDhcIjogXCLmg6DmtY7ljLpcIixcblx0ICAgIFwiNDEwMTIyXCI6IFwi5Lit54mf5Y6/XCIsXG5cdCAgICBcIjQxMDE4MVwiOiBcIuW3qeS5ieW4glwiLFxuXHQgICAgXCI0MTAxODJcIjogXCLojaXpmLPluIJcIixcblx0ICAgIFwiNDEwMTgzXCI6IFwi5paw5a+G5biCXCIsXG5cdCAgICBcIjQxMDE4NFwiOiBcIuaWsOmDkeW4glwiLFxuXHQgICAgXCI0MTAxODVcIjogXCLnmbvlsIHluIJcIixcblx0ICAgIFwiNDEwMTg4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDIwMFwiOiBcIuW8gOWwgeW4glwiLFxuXHQgICAgXCI0MTAyMDJcIjogXCLpvpnkuq3ljLpcIixcblx0ICAgIFwiNDEwMjAzXCI6IFwi6aG65rKz5Zue5peP5Yy6XCIsXG5cdCAgICBcIjQxMDIwNFwiOiBcIum8k+alvOWMulwiLFxuXHQgICAgXCI0MTAyMDVcIjogXCLnprnnjovlj7DljLpcIixcblx0ICAgIFwiNDEwMjExXCI6IFwi6YeR5piO5Yy6XCIsXG5cdCAgICBcIjQxMDIyMVwiOiBcIuadnuWOv1wiLFxuXHQgICAgXCI0MTAyMjJcIjogXCLpgJrorrjljr9cIixcblx0ICAgIFwiNDEwMjIzXCI6IFwi5bCJ5rCP5Y6/XCIsXG5cdCAgICBcIjQxMDIyNFwiOiBcIuW8gOWwgeWOv1wiLFxuXHQgICAgXCI0MTAyMjVcIjogXCLlhbDogIPljr9cIixcblx0ICAgIFwiNDEwMjI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDMwMFwiOiBcIua0m+mYs+W4glwiLFxuXHQgICAgXCI0MTAzMDJcIjogXCLogIHln47ljLpcIixcblx0ICAgIFwiNDEwMzAzXCI6IFwi6KW/5bel5Yy6XCIsXG5cdCAgICBcIjQxMDMwNFwiOiBcIueAjeays+WbnuaXj+WMulwiLFxuXHQgICAgXCI0MTAzMDVcIjogXCLmtqfopb/ljLpcIixcblx0ICAgIFwiNDEwMzA2XCI6IFwi5ZCJ5Yip5Yy6XCIsXG5cdCAgICBcIjQxMDMwN1wiOiBcIua0m+m+meWMulwiLFxuXHQgICAgXCI0MTAzMjJcIjogXCLlrZ/mtKXljr9cIixcblx0ICAgIFwiNDEwMzIzXCI6IFwi5paw5a6J5Y6/XCIsXG5cdCAgICBcIjQxMDMyNFwiOiBcIuagvuW3neWOv1wiLFxuXHQgICAgXCI0MTAzMjVcIjogXCLltanljr9cIixcblx0ICAgIFwiNDEwMzI2XCI6IFwi5rGd6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMDMyN1wiOiBcIuWunOmYs+WOv1wiLFxuXHQgICAgXCI0MTAzMjhcIjogXCLmtJvlroHljr9cIixcblx0ICAgIFwiNDEwMzI5XCI6IFwi5LyK5bed5Y6/XCIsXG5cdCAgICBcIjQxMDM4MVwiOiBcIuWBg+W4iOW4glwiLFxuXHQgICAgXCI0MTA0MDBcIjogXCLlubPpobblsbHluIJcIixcblx0ICAgIFwiNDEwNDAyXCI6IFwi5paw5Y2O5Yy6XCIsXG5cdCAgICBcIjQxMDQwM1wiOiBcIuWNq+S4nOWMulwiLFxuXHQgICAgXCI0MTA0MDRcIjogXCLnn7PpvpnljLpcIixcblx0ICAgIFwiNDEwNDExXCI6IFwi5rmb5rKz5Yy6XCIsXG5cdCAgICBcIjQxMDQyMVwiOiBcIuWuneS4sOWOv1wiLFxuXHQgICAgXCI0MTA0MjJcIjogXCLlj7bljr9cIixcblx0ICAgIFwiNDEwNDIzXCI6IFwi6bKB5bGx5Y6/XCIsXG5cdCAgICBcIjQxMDQyNVwiOiBcIumDj+WOv1wiLFxuXHQgICAgXCI0MTA0ODFcIjogXCLoiJ7pkqLluIJcIixcblx0ICAgIFwiNDEwNDgyXCI6IFwi5rGd5bee5biCXCIsXG5cdCAgICBcIjQxMDQ4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTA1MDBcIjogXCLlronpmLPluIJcIixcblx0ICAgIFwiNDEwNTAyXCI6IFwi5paH5bOw5Yy6XCIsXG5cdCAgICBcIjQxMDUwM1wiOiBcIuWMl+WFs+WMulwiLFxuXHQgICAgXCI0MTA1MDVcIjogXCLmrrfpg73ljLpcIixcblx0ICAgIFwiNDEwNTA2XCI6IFwi6b6Z5a6J5Yy6XCIsXG5cdCAgICBcIjQxMDUyMlwiOiBcIuWuiemYs+WOv1wiLFxuXHQgICAgXCI0MTA1MjNcIjogXCLmsaTpmLTljr9cIixcblx0ICAgIFwiNDEwNTI2XCI6IFwi5ruR5Y6/XCIsXG5cdCAgICBcIjQxMDUyN1wiOiBcIuWGhem7hOWOv1wiLFxuXHQgICAgXCI0MTA1ODFcIjogXCLmnpflt57luIJcIixcblx0ICAgIFwiNDEwNTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDYwMFwiOiBcIum5pOWjgeW4glwiLFxuXHQgICAgXCI0MTA2MDJcIjogXCLpuaTlsbHljLpcIixcblx0ICAgIFwiNDEwNjAzXCI6IFwi5bGx5Z+O5Yy6XCIsXG5cdCAgICBcIjQxMDYxMVwiOiBcIua3h+a7qOWMulwiLFxuXHQgICAgXCI0MTA2MjFcIjogXCLmtZrljr9cIixcblx0ICAgIFwiNDEwNjIyXCI6IFwi5reH5Y6/XCIsXG5cdCAgICBcIjQxMDYyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTA3MDBcIjogXCLmlrDkuaHluIJcIixcblx0ICAgIFwiNDEwNzAyXCI6IFwi57qi5peX5Yy6XCIsXG5cdCAgICBcIjQxMDcwM1wiOiBcIuWNq+a7qOWMulwiLFxuXHQgICAgXCI0MTA3MDRcIjogXCLlh6Tms4nljLpcIixcblx0ICAgIFwiNDEwNzExXCI6IFwi54mn6YeO5Yy6XCIsXG5cdCAgICBcIjQxMDcyMVwiOiBcIuaWsOS5oeWOv1wiLFxuXHQgICAgXCI0MTA3MjRcIjogXCLojrflmInljr9cIixcblx0ICAgIFwiNDEwNzI1XCI6IFwi5Y6f6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMDcyNlwiOiBcIuW7tua0peWOv1wiLFxuXHQgICAgXCI0MTA3MjdcIjogXCLlsIHkuJjljr9cIixcblx0ICAgIFwiNDEwNzI4XCI6IFwi6ZW/5Z6j5Y6/XCIsXG5cdCAgICBcIjQxMDc4MVwiOiBcIuWNq+i+ieW4glwiLFxuXHQgICAgXCI0MTA3ODJcIjogXCLovonljr/luIJcIixcblx0ICAgIFwiNDEwNzgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMDgwMFwiOiBcIueEpuS9nOW4glwiLFxuXHQgICAgXCI0MTA4MDJcIjogXCLop6PmlL7ljLpcIixcblx0ICAgIFwiNDEwODAzXCI6IFwi5Lit56uZ5Yy6XCIsXG5cdCAgICBcIjQxMDgwNFwiOiBcIumprOadkeWMulwiLFxuXHQgICAgXCI0MTA4MTFcIjogXCLlsbHpmLPljLpcIixcblx0ICAgIFwiNDEwODIxXCI6IFwi5L+u5q2m5Y6/XCIsXG5cdCAgICBcIjQxMDgyMlwiOiBcIuWNmueIseWOv1wiLFxuXHQgICAgXCI0MTA4MjNcIjogXCLmrabpmZ/ljr9cIixcblx0ICAgIFwiNDEwODI1XCI6IFwi5rip5Y6/XCIsXG5cdCAgICBcIjQxMDg4MVwiOiBcIua1jua6kOW4glwiLFxuXHQgICAgXCI0MTA4ODJcIjogXCLmsoHpmLPluIJcIixcblx0ICAgIFwiNDEwODgzXCI6IFwi5a2f5bee5biCXCIsXG5cdCAgICBcIjQxMDg4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTA5MDBcIjogXCLmv67pmLPluIJcIixcblx0ICAgIFwiNDEwOTAyXCI6IFwi5Y2O6b6Z5Yy6XCIsXG5cdCAgICBcIjQxMDkyMlwiOiBcIua4heS4sOWOv1wiLFxuXHQgICAgXCI0MTA5MjNcIjogXCLljZfkuZDljr9cIixcblx0ICAgIFwiNDEwOTI2XCI6IFwi6IyD5Y6/XCIsXG5cdCAgICBcIjQxMDkyN1wiOiBcIuWPsOWJjeWOv1wiLFxuXHQgICAgXCI0MTA5MjhcIjogXCLmv67pmLPljr9cIixcblx0ICAgIFwiNDEwOTI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMTAwMFwiOiBcIuiuuOaYjOW4glwiLFxuXHQgICAgXCI0MTEwMDJcIjogXCLprY/pg73ljLpcIixcblx0ICAgIFwiNDExMDIzXCI6IFwi6K645piM5Y6/XCIsXG5cdCAgICBcIjQxMTAyNFwiOiBcIumEoumZteWOv1wiLFxuXHQgICAgXCI0MTEwMjVcIjogXCLopYTln47ljr9cIixcblx0ICAgIFwiNDExMDgxXCI6IFwi56a55bee5biCXCIsXG5cdCAgICBcIjQxMTA4MlwiOiBcIumVv+iRm+W4glwiLFxuXHQgICAgXCI0MTEwODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDExMTAwXCI6IFwi5ryv5rKz5biCXCIsXG5cdCAgICBcIjQxMTEwMlwiOiBcIua6kOaxh+WMulwiLFxuXHQgICAgXCI0MTExMDNcIjogXCLpg77ln47ljLpcIixcblx0ICAgIFwiNDExMTA0XCI6IFwi5Y+s6Zm15Yy6XCIsXG5cdCAgICBcIjQxMTEyMVwiOiBcIuiInumYs+WOv1wiLFxuXHQgICAgXCI0MTExMjJcIjogXCLkuLTpoo3ljr9cIixcblx0ICAgIFwiNDExMTIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQxMTIwMFwiOiBcIuS4iemXqOWzoeW4glwiLFxuXHQgICAgXCI0MTEyMDJcIjogXCLmuZbmu6jljLpcIixcblx0ICAgIFwiNDExMjIxXCI6IFwi5riR5rGg5Y6/XCIsXG5cdCAgICBcIjQxMTIyMlwiOiBcIumZleWOv1wiLFxuXHQgICAgXCI0MTEyMjRcIjogXCLljaLmsI/ljr9cIixcblx0ICAgIFwiNDExMjgxXCI6IFwi5LmJ6ams5biCXCIsXG5cdCAgICBcIjQxMTI4MlwiOiBcIueBteWuneW4glwiLFxuXHQgICAgXCI0MTEyODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDExMzAwXCI6IFwi5Y2X6Ziz5biCXCIsXG5cdCAgICBcIjQxMTMwMlwiOiBcIuWum+WfjuWMulwiLFxuXHQgICAgXCI0MTEzMDNcIjogXCLljafpvpnljLpcIixcblx0ICAgIFwiNDExMzIxXCI6IFwi5Y2X5Y+s5Y6/XCIsXG5cdCAgICBcIjQxMTMyMlwiOiBcIuaWueWfjuWOv1wiLFxuXHQgICAgXCI0MTEzMjNcIjogXCLopb/ls6Hljr9cIixcblx0ICAgIFwiNDExMzI0XCI6IFwi6ZWH5bmz5Y6/XCIsXG5cdCAgICBcIjQxMTMyNVwiOiBcIuWGheS5oeWOv1wiLFxuXHQgICAgXCI0MTEzMjZcIjogXCLmt4Xlt53ljr9cIixcblx0ICAgIFwiNDExMzI3XCI6IFwi56S+5peX5Y6/XCIsXG5cdCAgICBcIjQxMTMyOFwiOiBcIuWUkOays+WOv1wiLFxuXHQgICAgXCI0MTEzMjlcIjogXCLmlrDph47ljr9cIixcblx0ICAgIFwiNDExMzMwXCI6IFwi5qGQ5p+P5Y6/XCIsXG5cdCAgICBcIjQxMTM4MVwiOiBcIumCk+W3nuW4glwiLFxuXHQgICAgXCI0MTEzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDExNDAwXCI6IFwi5ZWG5LiY5biCXCIsXG5cdCAgICBcIjQxMTQwMlwiOiBcIuaigeWbreWMulwiLFxuXHQgICAgXCI0MTE0MDNcIjogXCLnnaLpmLPljLpcIixcblx0ICAgIFwiNDExNDIxXCI6IFwi5rCR5p2D5Y6/XCIsXG5cdCAgICBcIjQxMTQyMlwiOiBcIuedouWOv1wiLFxuXHQgICAgXCI0MTE0MjNcIjogXCLlroHpmbXljr9cIixcblx0ICAgIFwiNDExNDI0XCI6IFwi5p+Y5Z+O5Y6/XCIsXG5cdCAgICBcIjQxMTQyNVwiOiBcIuiZnuWfjuWOv1wiLFxuXHQgICAgXCI0MTE0MjZcIjogXCLlpI/pgpHljr9cIixcblx0ICAgIFwiNDExNDgxXCI6IFwi5rC45Z+O5biCXCIsXG5cdCAgICBcIjQxMTQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTE1MDBcIjogXCLkv6HpmLPluIJcIixcblx0ICAgIFwiNDExNTAyXCI6IFwi5rWJ5rKz5Yy6XCIsXG5cdCAgICBcIjQxMTUwM1wiOiBcIuW5s+ahpeWMulwiLFxuXHQgICAgXCI0MTE1MjFcIjogXCLnvZflsbHljr9cIixcblx0ICAgIFwiNDExNTIyXCI6IFwi5YWJ5bGx5Y6/XCIsXG5cdCAgICBcIjQxMTUyM1wiOiBcIuaWsOWOv1wiLFxuXHQgICAgXCI0MTE1MjRcIjogXCLllYbln47ljr9cIixcblx0ICAgIFwiNDExNTI1XCI6IFwi5Zu65aeL5Y6/XCIsXG5cdCAgICBcIjQxMTUyNlwiOiBcIua9ouW3neWOv1wiLFxuXHQgICAgXCI0MTE1MjdcIjogXCLmt67mu6jljr9cIixcblx0ICAgIFwiNDExNTI4XCI6IFwi5oGv5Y6/XCIsXG5cdCAgICBcIjQxMTUyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTE2MDBcIjogXCLlkajlj6PluIJcIixcblx0ICAgIFwiNDExNjAyXCI6IFwi5bed5rGH5Yy6XCIsXG5cdCAgICBcIjQxMTYyMVwiOiBcIuaJtuayn+WOv1wiLFxuXHQgICAgXCI0MTE2MjJcIjogXCLopb/ljY7ljr9cIixcblx0ICAgIFwiNDExNjIzXCI6IFwi5ZWG5rC05Y6/XCIsXG5cdCAgICBcIjQxMTYyNFwiOiBcIuayiOS4mOWOv1wiLFxuXHQgICAgXCI0MTE2MjVcIjogXCLpg7jln47ljr9cIixcblx0ICAgIFwiNDExNjI2XCI6IFwi5reu6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMTYyN1wiOiBcIuWkquW6t+WOv1wiLFxuXHQgICAgXCI0MTE2MjhcIjogXCLpub/pgpHljr9cIixcblx0ICAgIFwiNDExNjgxXCI6IFwi6aG55Z+O5biCXCIsXG5cdCAgICBcIjQxMTY4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MTE3MDBcIjogXCLpqbvpqazlupfluIJcIixcblx0ICAgIFwiNDExNzAyXCI6IFwi6am/5Z+O5Yy6XCIsXG5cdCAgICBcIjQxMTcyMVwiOiBcIuilv+W5s+WOv1wiLFxuXHQgICAgXCI0MTE3MjJcIjogXCLkuIrolKHljr9cIixcblx0ICAgIFwiNDExNzIzXCI6IFwi5bmz6IiG5Y6/XCIsXG5cdCAgICBcIjQxMTcyNFwiOiBcIuato+mYs+WOv1wiLFxuXHQgICAgXCI0MTE3MjVcIjogXCLnoa7lsbHljr9cIixcblx0ICAgIFwiNDExNzI2XCI6IFwi5rOM6Ziz5Y6/XCIsXG5cdCAgICBcIjQxMTcyN1wiOiBcIuaxneWNl+WOv1wiLFxuXHQgICAgXCI0MTE3MjhcIjogXCLpgYLlubPljr9cIixcblx0ICAgIFwiNDExNzI5XCI6IFwi5paw6JSh5Y6/XCIsXG5cdCAgICBcIjQxMTczMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjAwMDBcIjogXCLmuZbljJfnnIFcIixcblx0ICAgIFwiNDIwMTAwXCI6IFwi5q2m5rGJ5biCXCIsXG5cdCAgICBcIjQyMDEwMlwiOiBcIuaxn+WyuOWMulwiLFxuXHQgICAgXCI0MjAxMDNcIjogXCLmsZ/msYnljLpcIixcblx0ICAgIFwiNDIwMTA0XCI6IFwi56Ga5Y+j5Yy6XCIsXG5cdCAgICBcIjQyMDEwNVwiOiBcIuaxiemYs+WMulwiLFxuXHQgICAgXCI0MjAxMDZcIjogXCLmrabmmIzljLpcIixcblx0ICAgIFwiNDIwMTA3XCI6IFwi6Z2S5bGx5Yy6XCIsXG5cdCAgICBcIjQyMDExMVwiOiBcIua0quWxseWMulwiLFxuXHQgICAgXCI0MjAxMTJcIjogXCLkuJzopb/muZbljLpcIixcblx0ICAgIFwiNDIwMTEzXCI6IFwi5rGJ5Y2X5Yy6XCIsXG5cdCAgICBcIjQyMDExNFwiOiBcIuiUoeeUuOWMulwiLFxuXHQgICAgXCI0MjAxMTVcIjogXCLmsZ/lpI/ljLpcIixcblx0ICAgIFwiNDIwMTE2XCI6IFwi6buE6ZmC5Yy6XCIsXG5cdCAgICBcIjQyMDExN1wiOiBcIuaWsOa0suWMulwiLFxuXHQgICAgXCI0MjAxMThcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIwMjAwXCI6IFwi6buE55+z5biCXCIsXG5cdCAgICBcIjQyMDIwMlwiOiBcIum7hOefs+a4r+WMulwiLFxuXHQgICAgXCI0MjAyMDNcIjogXCLopb/loZ7lsbHljLpcIixcblx0ICAgIFwiNDIwMjA0XCI6IFwi5LiL6ZmG5Yy6XCIsXG5cdCAgICBcIjQyMDIwNVwiOiBcIumTgeWxseWMulwiLFxuXHQgICAgXCI0MjAyMjJcIjogXCLpmLPmlrDljr9cIixcblx0ICAgIFwiNDIwMjgxXCI6IFwi5aSn5Ya25biCXCIsXG5cdCAgICBcIjQyMDI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjAzMDBcIjogXCLljYHloLDluIJcIixcblx0ICAgIFwiNDIwMzAyXCI6IFwi6IyF566t5Yy6XCIsXG5cdCAgICBcIjQyMDMwM1wiOiBcIuW8oOa5vuWMulwiLFxuXHQgICAgXCI0MjAzMjFcIjogXCLpg6fljr9cIixcblx0ICAgIFwiNDIwMzIyXCI6IFwi6YOn6KW/5Y6/XCIsXG5cdCAgICBcIjQyMDMyM1wiOiBcIuerueWxseWOv1wiLFxuXHQgICAgXCI0MjAzMjRcIjogXCLnq7nmuqrljr9cIixcblx0ICAgIFwiNDIwMzI1XCI6IFwi5oi/5Y6/XCIsXG5cdCAgICBcIjQyMDM4MVwiOiBcIuS4ueaxn+WPo+W4glwiLFxuXHQgICAgXCI0MjAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIwNTAwXCI6IFwi5a6c5piM5biCXCIsXG5cdCAgICBcIjQyMDUwMlwiOiBcIuilv+mZteWMulwiLFxuXHQgICAgXCI0MjA1MDNcIjogXCLkvI3lrrblspfljLpcIixcblx0ICAgIFwiNDIwNTA0XCI6IFwi54K55Yab5Yy6XCIsXG5cdCAgICBcIjQyMDUwNVwiOiBcIueMh+S6reWMulwiLFxuXHQgICAgXCI0MjA1MDZcIjogXCLlpLfpmbXljLpcIixcblx0ICAgIFwiNDIwNTI1XCI6IFwi6L+c5a6J5Y6/XCIsXG5cdCAgICBcIjQyMDUyNlwiOiBcIuWFtOWxseWOv1wiLFxuXHQgICAgXCI0MjA1MjdcIjogXCLnp63lvZLljr9cIixcblx0ICAgIFwiNDIwNTI4XCI6IFwi6ZW/6Ziz5Zyf5a625peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQyMDUyOVwiOiBcIuS6lOWzsOWcn+WutuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MjA1ODFcIjogXCLlrpzpg73luIJcIixcblx0ICAgIFwiNDIwNTgyXCI6IFwi5b2T6Ziz5biCXCIsXG5cdCAgICBcIjQyMDU4M1wiOiBcIuaeneaxn+W4glwiLFxuXHQgICAgXCI0MjA1ODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIwNjAwXCI6IFwi6KWE6Ziz5biCXCIsXG5cdCAgICBcIjQyMDYwMlwiOiBcIuilhOWfjuWMulwiLFxuXHQgICAgXCI0MjA2MDZcIjogXCLmqIrln47ljLpcIixcblx0ICAgIFwiNDIwNjA3XCI6IFwi6KWE5bee5Yy6XCIsXG5cdCAgICBcIjQyMDYyNFwiOiBcIuWNl+a8s+WOv1wiLFxuXHQgICAgXCI0MjA2MjVcIjogXCLosLfln47ljr9cIixcblx0ICAgIFwiNDIwNjI2XCI6IFwi5L+d5bq35Y6/XCIsXG5cdCAgICBcIjQyMDY4MlwiOiBcIuiAgeays+WPo+W4glwiLFxuXHQgICAgXCI0MjA2ODNcIjogXCLmnqPpmLPluIJcIixcblx0ICAgIFwiNDIwNjg0XCI6IFwi5a6c5Z+O5biCXCIsXG5cdCAgICBcIjQyMDY4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjA3MDBcIjogXCLphILlt57luIJcIixcblx0ICAgIFwiNDIwNzAyXCI6IFwi5qKB5a2Q5rmW5Yy6XCIsXG5cdCAgICBcIjQyMDcwM1wiOiBcIuWNjuWuueWMulwiLFxuXHQgICAgXCI0MjA3MDRcIjogXCLphILln47ljLpcIixcblx0ICAgIFwiNDIwNzA1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQyMDgwMFwiOiBcIuiNhumXqOW4glwiLFxuXHQgICAgXCI0MjA4MDJcIjogXCLkuJzlrp3ljLpcIixcblx0ICAgIFwiNDIwODA0XCI6IFwi5o6H5YiA5Yy6XCIsXG5cdCAgICBcIjQyMDgyMVwiOiBcIuS6rOWxseWOv1wiLFxuXHQgICAgXCI0MjA4MjJcIjogXCLmspnmtIvljr9cIixcblx0ICAgIFwiNDIwODgxXCI6IFwi6ZKf56Wl5biCXCIsXG5cdCAgICBcIjQyMDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjA5MDBcIjogXCLlrZ3mhJ/luIJcIixcblx0ICAgIFwiNDIwOTAyXCI6IFwi5a2d5Y2X5Yy6XCIsXG5cdCAgICBcIjQyMDkyMVwiOiBcIuWtneaYjOWOv1wiLFxuXHQgICAgXCI0MjA5MjJcIjogXCLlpKfmgp/ljr9cIixcblx0ICAgIFwiNDIwOTIzXCI6IFwi5LqR5qKm5Y6/XCIsXG5cdCAgICBcIjQyMDk4MVwiOiBcIuW6lOWfjuW4glwiLFxuXHQgICAgXCI0MjA5ODJcIjogXCLlronpmYbluIJcIixcblx0ICAgIFwiNDIwOTg0XCI6IFwi5rGJ5bed5biCXCIsXG5cdCAgICBcIjQyMDk4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjEwMDBcIjogXCLojYblt57luIJcIixcblx0ICAgIFwiNDIxMDAyXCI6IFwi5rKZ5biC5Yy6XCIsXG5cdCAgICBcIjQyMTAwM1wiOiBcIuiNhuW3nuWMulwiLFxuXHQgICAgXCI0MjEwMjJcIjogXCLlhazlronljr9cIixcblx0ICAgIFwiNDIxMDIzXCI6IFwi55uR5Yip5Y6/XCIsXG5cdCAgICBcIjQyMTAyNFwiOiBcIuaxn+mZteWOv1wiLFxuXHQgICAgXCI0MjEwODFcIjogXCLnn7PpppbluIJcIixcblx0ICAgIFwiNDIxMDgzXCI6IFwi5rSq5rmW5biCXCIsXG5cdCAgICBcIjQyMTA4N1wiOiBcIuadvua7i+W4glwiLFxuXHQgICAgXCI0MjEwODhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIxMTAwXCI6IFwi6buE5YaI5biCXCIsXG5cdCAgICBcIjQyMTEwMlwiOiBcIum7hOW3nuWMulwiLFxuXHQgICAgXCI0MjExMjFcIjogXCLlm6Lpo47ljr9cIixcblx0ICAgIFwiNDIxMTIyXCI6IFwi57qi5a6J5Y6/XCIsXG5cdCAgICBcIjQyMTEyM1wiOiBcIue9l+eUsOWOv1wiLFxuXHQgICAgXCI0MjExMjRcIjogXCLoi7HlsbHljr9cIixcblx0ICAgIFwiNDIxMTI1XCI6IFwi5rWg5rC05Y6/XCIsXG5cdCAgICBcIjQyMTEyNlwiOiBcIuiVsuaYpeWOv1wiLFxuXHQgICAgXCI0MjExMjdcIjogXCLpu4TmooXljr9cIixcblx0ICAgIFwiNDIxMTgxXCI6IFwi6bq75Z+O5biCXCIsXG5cdCAgICBcIjQyMTE4MlwiOiBcIuatpueptOW4glwiLFxuXHQgICAgXCI0MjExODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDIxMjAwXCI6IFwi5ZK45a6B5biCXCIsXG5cdCAgICBcIjQyMTIwMlwiOiBcIuWSuOWuieWMulwiLFxuXHQgICAgXCI0MjEyMjFcIjogXCLlmInpsbzljr9cIixcblx0ICAgIFwiNDIxMjIyXCI6IFwi6YCa5Z+O5Y6/XCIsXG5cdCAgICBcIjQyMTIyM1wiOiBcIuW0h+mYs+WOv1wiLFxuXHQgICAgXCI0MjEyMjRcIjogXCLpgJrlsbHljr9cIixcblx0ICAgIFwiNDIxMjgxXCI6IFwi6LWk5aOB5biCXCIsXG5cdCAgICBcIjQyMTI4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjEzMDBcIjogXCLpmo/lt57luIJcIixcblx0ICAgIFwiNDIxMzAyXCI6IFwi5pu+6YO95Yy6XCIsXG5cdCAgICBcIjQyMTMyMVwiOiBcIumaj+WOv1wiLFxuXHQgICAgXCI0MjEzODFcIjogXCLlub/msLTluIJcIixcblx0ICAgIFwiNDIxMzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQyMjgwMFwiOiBcIuaBqeaWveWcn+WutuaXj+iLl+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI0MjI4MDFcIjogXCLmganmlr3luIJcIixcblx0ICAgIFwiNDIyODAyXCI6IFwi5Yip5bed5biCXCIsXG5cdCAgICBcIjQyMjgyMlwiOiBcIuW7uuWni+WOv1wiLFxuXHQgICAgXCI0MjI4MjNcIjogXCLlt7TkuJzljr9cIixcblx0ICAgIFwiNDIyODI1XCI6IFwi5a6j5oGp5Y6/XCIsXG5cdCAgICBcIjQyMjgyNlwiOiBcIuWSuOS4sOWOv1wiLFxuXHQgICAgXCI0MjI4MjdcIjogXCLmnaXlh6Tljr9cIixcblx0ICAgIFwiNDIyODI4XCI6IFwi6bmk5bOw5Y6/XCIsXG5cdCAgICBcIjQyMjgyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MjkwMDRcIjogXCLku5nmoYPluIJcIixcblx0ICAgIFwiNDI5MDA1XCI6IFwi5r2c5rGf5biCXCIsXG5cdCAgICBcIjQyOTAwNlwiOiBcIuWkqemXqOW4glwiLFxuXHQgICAgXCI0MjkwMjFcIjogXCLnpZ7lhpzmnrbmnpfljLpcIixcblx0ICAgIFwiNDMwMDAwXCI6IFwi5rmW5Y2X55yBXCIsXG5cdCAgICBcIjQzMDEwMFwiOiBcIumVv+aymeW4glwiLFxuXHQgICAgXCI0MzAxMDJcIjogXCLoipnok4nljLpcIixcblx0ICAgIFwiNDMwMTAzXCI6IFwi5aSp5b+D5Yy6XCIsXG5cdCAgICBcIjQzMDEwNFwiOiBcIuWys+m6k+WMulwiLFxuXHQgICAgXCI0MzAxMDVcIjogXCLlvIDnpo/ljLpcIixcblx0ICAgIFwiNDMwMTExXCI6IFwi6Zuo6Iqx5Yy6XCIsXG5cdCAgICBcIjQzMDEyMVwiOiBcIumVv+aymeWOv1wiLFxuXHQgICAgXCI0MzAxMjJcIjogXCLmnJvln47ljLpcIixcblx0ICAgIFwiNDMwMTI0XCI6IFwi5a6B5Lmh5Y6/XCIsXG5cdCAgICBcIjQzMDE4MVwiOiBcIua1j+mYs+W4glwiLFxuXHQgICAgXCI0MzAxODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMwMjAwXCI6IFwi5qCq5rSy5biCXCIsXG5cdCAgICBcIjQzMDIwMlwiOiBcIuiNt+WhmOWMulwiLFxuXHQgICAgXCI0MzAyMDNcIjogXCLoiqbmt57ljLpcIixcblx0ICAgIFwiNDMwMjA0XCI6IFwi55+z5bOw5Yy6XCIsXG5cdCAgICBcIjQzMDIxMVwiOiBcIuWkqeWFg+WMulwiLFxuXHQgICAgXCI0MzAyMjFcIjogXCLmoKrmtLLljr9cIixcblx0ICAgIFwiNDMwMjIzXCI6IFwi5pS45Y6/XCIsXG5cdCAgICBcIjQzMDIyNFwiOiBcIuiMtumZteWOv1wiLFxuXHQgICAgXCI0MzAyMjVcIjogXCLngo7pmbXljr9cIixcblx0ICAgIFwiNDMwMjgxXCI6IFwi6Ya06Zm15biCXCIsXG5cdCAgICBcIjQzMDI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzAzMDBcIjogXCLmuZjmva3luIJcIixcblx0ICAgIFwiNDMwMzAyXCI6IFwi6Zuo5rmW5Yy6XCIsXG5cdCAgICBcIjQzMDMwNFwiOiBcIuWys+WhmOWMulwiLFxuXHQgICAgXCI0MzAzMjFcIjogXCLmuZjmva3ljr9cIixcblx0ICAgIFwiNDMwMzgxXCI6IFwi5rmY5Lmh5biCXCIsXG5cdCAgICBcIjQzMDM4MlwiOiBcIumftuWxseW4glwiLFxuXHQgICAgXCI0MzAzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMwNDAwXCI6IFwi6KGh6Ziz5biCXCIsXG5cdCAgICBcIjQzMDQwNVwiOiBcIuePoOaZluWMulwiLFxuXHQgICAgXCI0MzA0MDZcIjogXCLpm4Hls7DljLpcIixcblx0ICAgIFwiNDMwNDA3XCI6IFwi55+z6byT5Yy6XCIsXG5cdCAgICBcIjQzMDQwOFwiOiBcIuiSuOa5mOWMulwiLFxuXHQgICAgXCI0MzA0MTJcIjogXCLljZflsrPljLpcIixcblx0ICAgIFwiNDMwNDIxXCI6IFwi6KGh6Ziz5Y6/XCIsXG5cdCAgICBcIjQzMDQyMlwiOiBcIuihoeWNl+WOv1wiLFxuXHQgICAgXCI0MzA0MjNcIjogXCLooaHlsbHljr9cIixcblx0ICAgIFwiNDMwNDI0XCI6IFwi6KGh5Lic5Y6/XCIsXG5cdCAgICBcIjQzMDQyNlwiOiBcIuelgeS4nOWOv1wiLFxuXHQgICAgXCI0MzA0ODFcIjogXCLogJLpmLPluIJcIixcblx0ICAgIFwiNDMwNDgyXCI6IFwi5bi45a6B5biCXCIsXG5cdCAgICBcIjQzMDQ4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzA1MDBcIjogXCLpgrXpmLPluIJcIixcblx0ICAgIFwiNDMwNTAyXCI6IFwi5Y+M5riF5Yy6XCIsXG5cdCAgICBcIjQzMDUwM1wiOiBcIuWkp+elpeWMulwiLFxuXHQgICAgXCI0MzA1MTFcIjogXCLljJfloZTljLpcIixcblx0ICAgIFwiNDMwNTIxXCI6IFwi6YK15Lic5Y6/XCIsXG5cdCAgICBcIjQzMDUyMlwiOiBcIuaWsOmCteWOv1wiLFxuXHQgICAgXCI0MzA1MjNcIjogXCLpgrXpmLPljr9cIixcblx0ICAgIFwiNDMwNTI0XCI6IFwi6ZqG5Zue5Y6/XCIsXG5cdCAgICBcIjQzMDUyNVwiOiBcIua0nuWPo+WOv1wiLFxuXHQgICAgXCI0MzA1MjdcIjogXCLnu6XlroHljr9cIixcblx0ICAgIFwiNDMwNTI4XCI6IFwi5paw5a6B5Y6/XCIsXG5cdCAgICBcIjQzMDUyOVwiOiBcIuWfjuatpeiLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzA1ODFcIjogXCLmrablhojluIJcIixcblx0ICAgIFwiNDMwNTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQzMDYwMFwiOiBcIuWys+mYs+W4glwiLFxuXHQgICAgXCI0MzA2MDJcIjogXCLlsrPpmLPmpbzljLpcIixcblx0ICAgIFwiNDMwNjAzXCI6IFwi5LqR5rqq5Yy6XCIsXG5cdCAgICBcIjQzMDYxMVwiOiBcIuWQm+WxseWMulwiLFxuXHQgICAgXCI0MzA2MjFcIjogXCLlsrPpmLPljr9cIixcblx0ICAgIFwiNDMwNjIzXCI6IFwi5Y2O5a655Y6/XCIsXG5cdCAgICBcIjQzMDYyNFwiOiBcIua5mOmYtOWOv1wiLFxuXHQgICAgXCI0MzA2MjZcIjogXCLlubPmsZ/ljr9cIixcblx0ICAgIFwiNDMwNjgxXCI6IFwi5rGo572X5biCXCIsXG5cdCAgICBcIjQzMDY4MlwiOiBcIuS4tOa5mOW4glwiLFxuXHQgICAgXCI0MzA2ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMwNzAwXCI6IFwi5bi45b635biCXCIsXG5cdCAgICBcIjQzMDcwMlwiOiBcIuatpumZteWMulwiLFxuXHQgICAgXCI0MzA3MDNcIjogXCLpvI7ln47ljLpcIixcblx0ICAgIFwiNDMwNzIxXCI6IFwi5a6J5Lmh5Y6/XCIsXG5cdCAgICBcIjQzMDcyMlwiOiBcIuaxieWvv+WOv1wiLFxuXHQgICAgXCI0MzA3MjNcIjogXCLmvqfljr9cIixcblx0ICAgIFwiNDMwNzI0XCI6IFwi5Li05r6n5Y6/XCIsXG5cdCAgICBcIjQzMDcyNVwiOiBcIuahg+a6kOWOv1wiLFxuXHQgICAgXCI0MzA3MjZcIjogXCLnn7Ppl6jljr9cIixcblx0ICAgIFwiNDMwNzgxXCI6IFwi5rSl5biC5biCXCIsXG5cdCAgICBcIjQzMDc4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzA4MDBcIjogXCLlvKDlrrbnlYzluIJcIixcblx0ICAgIFwiNDMwODAyXCI6IFwi5rC45a6a5Yy6XCIsXG5cdCAgICBcIjQzMDgxMVwiOiBcIuatpumZtea6kOWMulwiLFxuXHQgICAgXCI0MzA4MjFcIjogXCLmhYjliKnljr9cIixcblx0ICAgIFwiNDMwODIyXCI6IFwi5qGR5qSN5Y6/XCIsXG5cdCAgICBcIjQzMDgyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzA5MDBcIjogXCLnm4rpmLPluIJcIixcblx0ICAgIFwiNDMwOTAyXCI6IFwi6LWE6Ziz5Yy6XCIsXG5cdCAgICBcIjQzMDkwM1wiOiBcIui1q+WxseWMulwiLFxuXHQgICAgXCI0MzA5MjFcIjogXCLljZfljr9cIixcblx0ICAgIFwiNDMwOTIyXCI6IFwi5qGD5rGf5Y6/XCIsXG5cdCAgICBcIjQzMDkyM1wiOiBcIuWuieWMluWOv1wiLFxuXHQgICAgXCI0MzA5ODFcIjogXCLmsoXmsZ/luIJcIixcblx0ICAgIFwiNDMwOTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQzMTAwMFwiOiBcIumDtOW3nuW4glwiLFxuXHQgICAgXCI0MzEwMDJcIjogXCLljJfmuZbljLpcIixcblx0ICAgIFwiNDMxMDAzXCI6IFwi6IuP5LuZ5Yy6XCIsXG5cdCAgICBcIjQzMTAyMVwiOiBcIuahgumYs+WOv1wiLFxuXHQgICAgXCI0MzEwMjJcIjogXCLlrpznq6Dljr9cIixcblx0ICAgIFwiNDMxMDIzXCI6IFwi5rC45YW05Y6/XCIsXG5cdCAgICBcIjQzMTAyNFwiOiBcIuWYieemvuWOv1wiLFxuXHQgICAgXCI0MzEwMjVcIjogXCLkuLTmrabljr9cIixcblx0ICAgIFwiNDMxMDI2XCI6IFwi5rGd5Z+O5Y6/XCIsXG5cdCAgICBcIjQzMTAyN1wiOiBcIuahguS4nOWOv1wiLFxuXHQgICAgXCI0MzEwMjhcIjogXCLlronku4Hljr9cIixcblx0ICAgIFwiNDMxMDgxXCI6IFwi6LWE5YW05biCXCIsXG5cdCAgICBcIjQzMTA4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzExMDBcIjogXCLmsLjlt57luIJcIixcblx0ICAgIFwiNDMxMTAyXCI6IFwi6Zu26Zm15Yy6XCIsXG5cdCAgICBcIjQzMTEwM1wiOiBcIuWGt+awtOa7qeWMulwiLFxuXHQgICAgXCI0MzExMjFcIjogXCLnpYHpmLPljr9cIixcblx0ICAgIFwiNDMxMTIyXCI6IFwi5Lic5a6J5Y6/XCIsXG5cdCAgICBcIjQzMTEyM1wiOiBcIuWPjOeJjOWOv1wiLFxuXHQgICAgXCI0MzExMjRcIjogXCLpgZPljr9cIixcblx0ICAgIFwiNDMxMTI1XCI6IFwi5rGf5rC45Y6/XCIsXG5cdCAgICBcIjQzMTEyNlwiOiBcIuWugei/nOWOv1wiLFxuXHQgICAgXCI0MzExMjdcIjogXCLok53lsbHljr9cIixcblx0ICAgIFwiNDMxMTI4XCI6IFwi5paw55Sw5Y6/XCIsXG5cdCAgICBcIjQzMTEyOVwiOiBcIuaxn+WNjueRtuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzExMzBcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMxMjAwXCI6IFwi5oCA5YyW5biCXCIsXG5cdCAgICBcIjQzMTIwMlwiOiBcIum5pOWfjuWMulwiLFxuXHQgICAgXCI0MzEyMjFcIjogXCLkuK3mlrnljr9cIixcblx0ICAgIFwiNDMxMjIyXCI6IFwi5rKF6Zm15Y6/XCIsXG5cdCAgICBcIjQzMTIyM1wiOiBcIui+sOa6quWOv1wiLFxuXHQgICAgXCI0MzEyMjRcIjogXCLmuobmtabljr9cIixcblx0ICAgIFwiNDMxMjI1XCI6IFwi5Lya5ZCM5Y6/XCIsXG5cdCAgICBcIjQzMTIyNlwiOiBcIum6u+mYs+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzEyMjdcIjogXCLmlrDmmYPkvpfml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDMxMjI4XCI6IFwi6Iq35rGf5L6X5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQzMTIyOVwiOiBcIumdluW3nuiLl+aXj+S+l+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0MzEyMzBcIjogXCLpgJrpgZPkvpfml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDMxMjgxXCI6IFwi5rSq5rGf5biCXCIsXG5cdCAgICBcIjQzMTI4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0MzEzMDBcIjogXCLlqITlupXluIJcIixcblx0ICAgIFwiNDMxMzAyXCI6IFwi5aiE5pif5Yy6XCIsXG5cdCAgICBcIjQzMTMyMVwiOiBcIuWPjOWzsOWOv1wiLFxuXHQgICAgXCI0MzEzMjJcIjogXCLmlrDljJbljr9cIixcblx0ICAgIFwiNDMxMzgxXCI6IFwi5Ya35rC05rGf5biCXCIsXG5cdCAgICBcIjQzMTM4MlwiOiBcIua2n+a6kOW4glwiLFxuXHQgICAgXCI0MzEzODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDMzMTAwXCI6IFwi5rmY6KW/5Zyf5a625peP6IuX5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjQzMzEwMVwiOiBcIuWQiemmluW4glwiLFxuXHQgICAgXCI0MzMxMjJcIjogXCLms7jmuqrljr9cIixcblx0ICAgIFwiNDMzMTIzXCI6IFwi5Yek5Yew5Y6/XCIsXG5cdCAgICBcIjQzMzEyNFwiOiBcIuiKseWeo+WOv1wiLFxuXHQgICAgXCI0MzMxMjVcIjogXCLkv53pnZbljr9cIixcblx0ICAgIFwiNDMzMTI2XCI6IFwi5Y+k5LiI5Y6/XCIsXG5cdCAgICBcIjQzMzEyN1wiOiBcIuawuOmhuuWOv1wiLFxuXHQgICAgXCI0MzMxMzBcIjogXCLpvpnlsbHljr9cIixcblx0ICAgIFwiNDMzMTMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDAwMFwiOiBcIuW5v+S4nOecgVwiLFxuXHQgICAgXCI0NDAxMDBcIjogXCLlub/lt57luIJcIixcblx0ICAgIFwiNDQwMTAzXCI6IFwi6I2U5rm+5Yy6XCIsXG5cdCAgICBcIjQ0MDEwNFwiOiBcIui2iuengOWMulwiLFxuXHQgICAgXCI0NDAxMDVcIjogXCLmtbfnj6DljLpcIixcblx0ICAgIFwiNDQwMTA2XCI6IFwi5aSp5rKz5Yy6XCIsXG5cdCAgICBcIjQ0MDExMVwiOiBcIueZveS6keWMulwiLFxuXHQgICAgXCI0NDAxMTJcIjogXCLpu4Tln5TljLpcIixcblx0ICAgIFwiNDQwMTEzXCI6IFwi55Wq56a65Yy6XCIsXG5cdCAgICBcIjQ0MDExNFwiOiBcIuiKsemDveWMulwiLFxuXHQgICAgXCI0NDAxMTVcIjogXCLljZfmspnljLpcIixcblx0ICAgIFwiNDQwMTE2XCI6IFwi6JCd5bKX5Yy6XCIsXG5cdCAgICBcIjQ0MDE4M1wiOiBcIuWinuWfjuW4glwiLFxuXHQgICAgXCI0NDAxODRcIjogXCLku47ljJbluIJcIixcblx0ICAgIFwiNDQwMTg5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDIwMFwiOiBcIumftuWFs+W4glwiLFxuXHQgICAgXCI0NDAyMDNcIjogXCLmrabmsZ/ljLpcIixcblx0ICAgIFwiNDQwMjA0XCI6IFwi5rWI5rGf5Yy6XCIsXG5cdCAgICBcIjQ0MDIwNVwiOiBcIuabsuaxn+WMulwiLFxuXHQgICAgXCI0NDAyMjJcIjogXCLlp4vlhbTljr9cIixcblx0ICAgIFwiNDQwMjI0XCI6IFwi5LuB5YyW5Y6/XCIsXG5cdCAgICBcIjQ0MDIyOVwiOiBcIue/gea6kOWOv1wiLFxuXHQgICAgXCI0NDAyMzJcIjogXCLkubPmupDnkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDQwMjMzXCI6IFwi5paw5Liw5Y6/XCIsXG5cdCAgICBcIjQ0MDI4MVwiOiBcIuS5kOaYjOW4glwiLFxuXHQgICAgXCI0NDAyODJcIjogXCLljZfpm4TluIJcIixcblx0ICAgIFwiNDQwMjgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDMwMFwiOiBcIua3seWcs+W4glwiLFxuXHQgICAgXCI0NDAzMDNcIjogXCLnvZfmuZbljLpcIixcblx0ICAgIFwiNDQwMzA0XCI6IFwi56aP55Sw5Yy6XCIsXG5cdCAgICBcIjQ0MDMwNVwiOiBcIuWNl+WxseWMulwiLFxuXHQgICAgXCI0NDAzMDZcIjogXCLlrp3lronljLpcIixcblx0ICAgIFwiNDQwMzA3XCI6IFwi6b6Z5bKX5Yy6XCIsXG5cdCAgICBcIjQ0MDMwOFwiOiBcIuebkOeUsOWMulwiLFxuXHQgICAgXCI0NDAzMDlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwMzIwXCI6IFwi5YWJ5piO5paw5Yy6XCIsXG5cdCAgICBcIjQ0MDMyMVwiOiBcIuWdquWxseaWsOWMulwiLFxuXHQgICAgXCI0NDAzMjJcIjogXCLlpKfpuY/mlrDljLpcIixcblx0ICAgIFwiNDQwMzIzXCI6IFwi6b6Z5Y2O5paw5Yy6XCIsXG5cdCAgICBcIjQ0MDQwMFwiOiBcIuePoOa1t+W4glwiLFxuXHQgICAgXCI0NDA0MDJcIjogXCLpppnmtLLljLpcIixcblx0ICAgIFwiNDQwNDAzXCI6IFwi5paX6Zeo5Yy6XCIsXG5cdCAgICBcIjQ0MDQwNFwiOiBcIumHkea5vuWMulwiLFxuXHQgICAgXCI0NDA0ODhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwNTAwXCI6IFwi5rGV5aS05biCXCIsXG5cdCAgICBcIjQ0MDUwN1wiOiBcIum+mea5luWMulwiLFxuXHQgICAgXCI0NDA1MTFcIjogXCLph5HlubPljLpcIixcblx0ICAgIFwiNDQwNTEyXCI6IFwi5r+g5rGf5Yy6XCIsXG5cdCAgICBcIjQ0MDUxM1wiOiBcIua9rumYs+WMulwiLFxuXHQgICAgXCI0NDA1MTRcIjogXCLmva7ljZfljLpcIixcblx0ICAgIFwiNDQwNTE1XCI6IFwi5r6E5rW35Yy6XCIsXG5cdCAgICBcIjQ0MDUyM1wiOiBcIuWNl+a+s+WOv1wiLFxuXHQgICAgXCI0NDA1MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwNjAwXCI6IFwi5L2b5bGx5biCXCIsXG5cdCAgICBcIjQ0MDYwNFwiOiBcIuemheWfjuWMulwiLFxuXHQgICAgXCI0NDA2MDVcIjogXCLljZfmtbfljLpcIixcblx0ICAgIFwiNDQwNjA2XCI6IFwi6aG65b635Yy6XCIsXG5cdCAgICBcIjQ0MDYwN1wiOiBcIuS4ieawtOWMulwiLFxuXHQgICAgXCI0NDA2MDhcIjogXCLpq5jmmI7ljLpcIixcblx0ICAgIFwiNDQwNjA5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDcwMFwiOiBcIuaxn+mXqOW4glwiLFxuXHQgICAgXCI0NDA3MDNcIjogXCLok6zmsZ/ljLpcIixcblx0ICAgIFwiNDQwNzA0XCI6IFwi5rGf5rW35Yy6XCIsXG5cdCAgICBcIjQ0MDcwNVwiOiBcIuaWsOS8muWMulwiLFxuXHQgICAgXCI0NDA3ODFcIjogXCLlj7DlsbHluIJcIixcblx0ICAgIFwiNDQwNzgzXCI6IFwi5byA5bmz5biCXCIsXG5cdCAgICBcIjQ0MDc4NFwiOiBcIum5pOWxseW4glwiLFxuXHQgICAgXCI0NDA3ODVcIjogXCLmganlubPluIJcIixcblx0ICAgIFwiNDQwNzg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MDgwMFwiOiBcIua5m+axn+W4glwiLFxuXHQgICAgXCI0NDA4MDJcIjogXCLotaTlnY7ljLpcIixcblx0ICAgIFwiNDQwODAzXCI6IFwi6Zye5bGx5Yy6XCIsXG5cdCAgICBcIjQ0MDgwNFwiOiBcIuWdoeWktOWMulwiLFxuXHQgICAgXCI0NDA4MTFcIjogXCLpurvnq6DljLpcIixcblx0ICAgIFwiNDQwODIzXCI6IFwi6YGC5rqq5Y6/XCIsXG5cdCAgICBcIjQ0MDgyNVwiOiBcIuW+kOmXu+WOv1wiLFxuXHQgICAgXCI0NDA4ODFcIjogXCLlu4nmsZ/luIJcIixcblx0ICAgIFwiNDQwODgyXCI6IFwi6Zu35bee5biCXCIsXG5cdCAgICBcIjQ0MDg4M1wiOiBcIuWQtOW3neW4glwiLFxuXHQgICAgXCI0NDA4ODRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQwOTAwXCI6IFwi6IyC5ZCN5biCXCIsXG5cdCAgICBcIjQ0MDkwMlwiOiBcIuiMguWNl+WMulwiLFxuXHQgICAgXCI0NDA5MDNcIjogXCLojILmuK/ljLpcIixcblx0ICAgIFwiNDQwOTIzXCI6IFwi55S155m95Y6/XCIsXG5cdCAgICBcIjQ0MDk4MVwiOiBcIumrmOW3nuW4glwiLFxuXHQgICAgXCI0NDA5ODJcIjogXCLljJblt57luIJcIixcblx0ICAgIFwiNDQwOTgzXCI6IFwi5L+h5a6c5biCXCIsXG5cdCAgICBcIjQ0MDk4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDEyMDBcIjogXCLogofluobluIJcIixcblx0ICAgIFwiNDQxMjAyXCI6IFwi56uv5bee5Yy6XCIsXG5cdCAgICBcIjQ0MTIwM1wiOiBcIum8jua5luWMulwiLFxuXHQgICAgXCI0NDEyMjNcIjogXCLlub/lroHljr9cIixcblx0ICAgIFwiNDQxMjI0XCI6IFwi5oCA6ZuG5Y6/XCIsXG5cdCAgICBcIjQ0MTIyNVwiOiBcIuWwgeW8gOWOv1wiLFxuXHQgICAgXCI0NDEyMjZcIjogXCLlvrfluobljr9cIixcblx0ICAgIFwiNDQxMjgzXCI6IFwi6auY6KaB5biCXCIsXG5cdCAgICBcIjQ0MTI4NFwiOiBcIuWbm+S8muW4glwiLFxuXHQgICAgXCI0NDEyODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDQxMzAwXCI6IFwi5oOg5bee5biCXCIsXG5cdCAgICBcIjQ0MTMwMlwiOiBcIuaDoOWfjuWMulwiLFxuXHQgICAgXCI0NDEzMDNcIjogXCLmg6DpmLPljLpcIixcblx0ICAgIFwiNDQxMzIyXCI6IFwi5Y2a572X5Y6/XCIsXG5cdCAgICBcIjQ0MTMyM1wiOiBcIuaDoOS4nOWOv1wiLFxuXHQgICAgXCI0NDEzMjRcIjogXCLpvpnpl6jljr9cIixcblx0ICAgIFwiNDQxMzI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MTQwMFwiOiBcIuaiheW3nuW4glwiLFxuXHQgICAgXCI0NDE0MDJcIjogXCLmooXmsZ/ljLpcIixcblx0ICAgIFwiNDQxNDIxXCI6IFwi5qKF5Y6/XCIsXG5cdCAgICBcIjQ0MTQyMlwiOiBcIuWkp+WflOWOv1wiLFxuXHQgICAgXCI0NDE0MjNcIjogXCLkuLDpobrljr9cIixcblx0ICAgIFwiNDQxNDI0XCI6IFwi5LqU5Y2O5Y6/XCIsXG5cdCAgICBcIjQ0MTQyNlwiOiBcIuW5s+i/nOWOv1wiLFxuXHQgICAgXCI0NDE0MjdcIjogXCLolYnlsq3ljr9cIixcblx0ICAgIFwiNDQxNDgxXCI6IFwi5YW05a6B5biCXCIsXG5cdCAgICBcIjQ0MTQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDE1MDBcIjogXCLmsZXlsL7luIJcIixcblx0ICAgIFwiNDQxNTAyXCI6IFwi5Z+O5Yy6XCIsXG5cdCAgICBcIjQ0MTUyMVwiOiBcIua1t+S4sOWOv1wiLFxuXHQgICAgXCI0NDE1MjNcIjogXCLpmYbmsrPljr9cIixcblx0ICAgIFwiNDQxNTgxXCI6IFwi6ZmG5Liw5biCXCIsXG5cdCAgICBcIjQ0MTU4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDE2MDBcIjogXCLmsrPmupDluIJcIixcblx0ICAgIFwiNDQxNjAyXCI6IFwi5rqQ5Z+O5Yy6XCIsXG5cdCAgICBcIjQ0MTYyMVwiOiBcIue0q+mHkeWOv1wiLFxuXHQgICAgXCI0NDE2MjJcIjogXCLpvpnlt53ljr9cIixcblx0ICAgIFwiNDQxNjIzXCI6IFwi6L+e5bmz5Y6/XCIsXG5cdCAgICBcIjQ0MTYyNFwiOiBcIuWSjOW5s+WOv1wiLFxuXHQgICAgXCI0NDE2MjVcIjogXCLkuJzmupDljr9cIixcblx0ICAgIFwiNDQxNjI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MTcwMFwiOiBcIumYs+axn+W4glwiLFxuXHQgICAgXCI0NDE3MDJcIjogXCLmsZ/ln47ljLpcIixcblx0ICAgIFwiNDQxNzIxXCI6IFwi6Ziz6KW/5Y6/XCIsXG5cdCAgICBcIjQ0MTcyM1wiOiBcIumYs+S4nOWOv1wiLFxuXHQgICAgXCI0NDE3ODFcIjogXCLpmLPmmKXluIJcIixcblx0ICAgIFwiNDQxNzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0MTgwMFwiOiBcIua4hei/nOW4glwiLFxuXHQgICAgXCI0NDE4MDJcIjogXCLmuIXln47ljLpcIixcblx0ICAgIFwiNDQxODIxXCI6IFwi5L2b5YaI5Y6/XCIsXG5cdCAgICBcIjQ0MTgyM1wiOiBcIumYs+WxseWOv1wiLFxuXHQgICAgXCI0NDE4MjVcIjogXCLov57lsbHlo67ml4/nkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDQxODI2XCI6IFwi6L+e5Y2X55G25peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ0MTgyN1wiOiBcIua4heaWsOWMulwiLFxuXHQgICAgXCI0NDE4ODFcIjogXCLoi7HlvrfluIJcIixcblx0ICAgIFwiNDQxODgyXCI6IFwi6L+e5bee5biCXCIsXG5cdCAgICBcIjQ0MTg4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDE5MDBcIjogXCLkuJzojp7luIJcIixcblx0ICAgIFwiNDQyMDAwXCI6IFwi5Lit5bGx5biCXCIsXG5cdCAgICBcIjQ0MjEwMVwiOiBcIuS4nOaymee+pOWym1wiLFxuXHQgICAgXCI0NDUxMDBcIjogXCLmva7lt57luIJcIixcblx0ICAgIFwiNDQ1MTAyXCI6IFwi5rmY5qGl5Yy6XCIsXG5cdCAgICBcIjQ0NTEyMVwiOiBcIua9ruWuieWMulwiLFxuXHQgICAgXCI0NDUxMjJcIjogXCLppbblubPljr9cIixcblx0ICAgIFwiNDQ1MTg2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ0NTIwMFwiOiBcIuaPremYs+W4glwiLFxuXHQgICAgXCI0NDUyMDJcIjogXCLmppXln47ljLpcIixcblx0ICAgIFwiNDQ1MjIxXCI6IFwi5o+t5Lic5Yy6XCIsXG5cdCAgICBcIjQ0NTIyMlwiOiBcIuaPreilv+WOv1wiLFxuXHQgICAgXCI0NDUyMjRcIjogXCLmg6DmnaXljr9cIixcblx0ICAgIFwiNDQ1MjgxXCI6IFwi5pmu5a6B5biCXCIsXG5cdCAgICBcIjQ0NTI4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NDUzMDBcIjogXCLkupHmta7luIJcIixcblx0ICAgIFwiNDQ1MzAyXCI6IFwi5LqR5Z+O5Yy6XCIsXG5cdCAgICBcIjQ0NTMyMVwiOiBcIuaWsOWFtOWOv1wiLFxuXHQgICAgXCI0NDUzMjJcIjogXCLpg4HljZfljr9cIixcblx0ICAgIFwiNDQ1MzIzXCI6IFwi5LqR5a6J5Y6/XCIsXG5cdCAgICBcIjQ0NTM4MVwiOiBcIue9l+WumuW4glwiLFxuXHQgICAgXCI0NDUzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUwMDAwXCI6IFwi5bm/6KW/5aOu5peP6Ieq5rK75Yy6XCIsXG5cdCAgICBcIjQ1MDEwMFwiOiBcIuWNl+WugeW4glwiLFxuXHQgICAgXCI0NTAxMDJcIjogXCLlhbTlroHljLpcIixcblx0ICAgIFwiNDUwMTAzXCI6IFwi6Z2S56eA5Yy6XCIsXG5cdCAgICBcIjQ1MDEwNVwiOiBcIuaxn+WNl+WMulwiLFxuXHQgICAgXCI0NTAxMDdcIjogXCLopb/kuaHloZjljLpcIixcblx0ICAgIFwiNDUwMTA4XCI6IFwi6Imv5bqG5Yy6XCIsXG5cdCAgICBcIjQ1MDEwOVwiOiBcIumCleWugeWMulwiLFxuXHQgICAgXCI0NTAxMjJcIjogXCLmrabpuKPljr9cIixcblx0ICAgIFwiNDUwMTIzXCI6IFwi6ZqG5a6J5Y6/XCIsXG5cdCAgICBcIjQ1MDEyNFwiOiBcIumprOWxseWOv1wiLFxuXHQgICAgXCI0NTAxMjVcIjogXCLkuIrmnpfljr9cIixcblx0ICAgIFwiNDUwMTI2XCI6IFwi5a6+6Ziz5Y6/XCIsXG5cdCAgICBcIjQ1MDEyN1wiOiBcIuaoquWOv1wiLFxuXHQgICAgXCI0NTAxMjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUwMjAwXCI6IFwi5p+z5bee5biCXCIsXG5cdCAgICBcIjQ1MDIwMlwiOiBcIuWfjuS4reWMulwiLFxuXHQgICAgXCI0NTAyMDNcIjogXCLpsbzls7DljLpcIixcblx0ICAgIFwiNDUwMjA0XCI6IFwi5p+z5Y2X5Yy6XCIsXG5cdCAgICBcIjQ1MDIwNVwiOiBcIuafs+WMl+WMulwiLFxuXHQgICAgXCI0NTAyMjFcIjogXCLmn7PmsZ/ljr9cIixcblx0ICAgIFwiNDUwMjIyXCI6IFwi5p+z5Z+O5Y6/XCIsXG5cdCAgICBcIjQ1MDIyM1wiOiBcIum5v+WvqOWOv1wiLFxuXHQgICAgXCI0NTAyMjRcIjogXCLono3lronljr9cIixcblx0ICAgIFwiNDUwMjI1XCI6IFwi6J6N5rC06IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MDIyNlwiOiBcIuS4ieaxn+S+l+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NTAyMjdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUwMzAwXCI6IFwi5qGC5p6X5biCXCIsXG5cdCAgICBcIjQ1MDMwMlwiOiBcIuengOWzsOWMulwiLFxuXHQgICAgXCI0NTAzMDNcIjogXCLlj6DlvanljLpcIixcblx0ICAgIFwiNDUwMzA0XCI6IFwi6LGh5bGx5Yy6XCIsXG5cdCAgICBcIjQ1MDMwNVwiOiBcIuS4g+aYn+WMulwiLFxuXHQgICAgXCI0NTAzMTFcIjogXCLpm4HlsbHljLpcIixcblx0ICAgIFwiNDUwMzIxXCI6IFwi6Ziz5pyU5Y6/XCIsXG5cdCAgICBcIjQ1MDMyMlwiOiBcIuS4tOahguWMulwiLFxuXHQgICAgXCI0NTAzMjNcIjogXCLngbXlt53ljr9cIixcblx0ICAgIFwiNDUwMzI0XCI6IFwi5YWo5bee5Y6/XCIsXG5cdCAgICBcIjQ1MDMyNVwiOiBcIuWFtOWuieWOv1wiLFxuXHQgICAgXCI0NTAzMjZcIjogXCLmsLjnpo/ljr9cIixcblx0ICAgIFwiNDUwMzI3XCI6IFwi54GM6Ziz5Y6/XCIsXG5cdCAgICBcIjQ1MDMyOFwiOiBcIum+meiDnOWQhOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NTAzMjlcIjogXCLotYTmupDljr9cIixcblx0ICAgIFwiNDUwMzMwXCI6IFwi5bmz5LmQ5Y6/XCIsXG5cdCAgICBcIjQ1MDMzMVwiOiBcIuiNlOa1puWOv1wiLFxuXHQgICAgXCI0NTAzMzJcIjogXCLmga3ln47nkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUwMzMzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDQwMFwiOiBcIuaip+W3nuW4glwiLFxuXHQgICAgXCI0NTA0MDNcIjogXCLkuIfnp4DljLpcIixcblx0ICAgIFwiNDUwNDA1XCI6IFwi6ZW/5rSy5Yy6XCIsXG5cdCAgICBcIjQ1MDQwNlwiOiBcIum+meWcqeWMulwiLFxuXHQgICAgXCI0NTA0MjFcIjogXCLoi43moqfljr9cIixcblx0ICAgIFwiNDUwNDIyXCI6IFwi6Jek5Y6/XCIsXG5cdCAgICBcIjQ1MDQyM1wiOiBcIuiSmeWxseWOv1wiLFxuXHQgICAgXCI0NTA0ODFcIjogXCLlspHmuqrluIJcIixcblx0ICAgIFwiNDUwNDgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDUwMFwiOiBcIuWMl+a1t+W4glwiLFxuXHQgICAgXCI0NTA1MDJcIjogXCLmtbfln47ljLpcIixcblx0ICAgIFwiNDUwNTAzXCI6IFwi6ZO25rW35Yy6XCIsXG5cdCAgICBcIjQ1MDUxMlwiOiBcIumTgeWxsea4r+WMulwiLFxuXHQgICAgXCI0NTA1MjFcIjogXCLlkIjmtabljr9cIixcblx0ICAgIFwiNDUwNTIyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDYwMFwiOiBcIumYsuWfjua4r+W4glwiLFxuXHQgICAgXCI0NTA2MDJcIjogXCLmuK/lj6PljLpcIixcblx0ICAgIFwiNDUwNjAzXCI6IFwi6Ziy5Z+O5Yy6XCIsXG5cdCAgICBcIjQ1MDYyMVwiOiBcIuS4iuaAneWOv1wiLFxuXHQgICAgXCI0NTA2ODFcIjogXCLkuJzlhbTluIJcIixcblx0ICAgIFwiNDUwNjgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDcwMFwiOiBcIumSpuW3nuW4glwiLFxuXHQgICAgXCI0NTA3MDJcIjogXCLpkqbljZfljLpcIixcblx0ICAgIFwiNDUwNzAzXCI6IFwi6ZKm5YyX5Yy6XCIsXG5cdCAgICBcIjQ1MDcyMVwiOiBcIueBteWxseWOv1wiLFxuXHQgICAgXCI0NTA3MjJcIjogXCLmtabljJfljr9cIixcblx0ICAgIFwiNDUwNzIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MDgwMFwiOiBcIui0tea4r+W4glwiLFxuXHQgICAgXCI0NTA4MDJcIjogXCLmuK/ljJfljLpcIixcblx0ICAgIFwiNDUwODAzXCI6IFwi5riv5Y2X5Yy6XCIsXG5cdCAgICBcIjQ1MDgwNFwiOiBcIuimg+WhmOWMulwiLFxuXHQgICAgXCI0NTA4MjFcIjogXCLlubPljZfljr9cIixcblx0ICAgIFwiNDUwODgxXCI6IFwi5qGC5bmz5biCXCIsXG5cdCAgICBcIjQ1MDg4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTA5MDBcIjogXCLnjonmnpfluIJcIixcblx0ICAgIFwiNDUwOTAyXCI6IFwi546J5bee5Yy6XCIsXG5cdCAgICBcIjQ1MDkwM1wiOiBcIuemj+e7teWMulwiLFxuXHQgICAgXCI0NTA5MjFcIjogXCLlrrnljr9cIixcblx0ICAgIFwiNDUwOTIyXCI6IFwi6ZmG5bed5Y6/XCIsXG5cdCAgICBcIjQ1MDkyM1wiOiBcIuWNmueZveWOv1wiLFxuXHQgICAgXCI0NTA5MjRcIjogXCLlhbTkuJrljr9cIixcblx0ICAgIFwiNDUwOTgxXCI6IFwi5YyX5rWB5biCXCIsXG5cdCAgICBcIjQ1MDk4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTEwMDBcIjogXCLnmb7oibLluIJcIixcblx0ICAgIFwiNDUxMDAyXCI6IFwi5Y+z5rGf5Yy6XCIsXG5cdCAgICBcIjQ1MTAyMVwiOiBcIueUsOmYs+WOv1wiLFxuXHQgICAgXCI0NTEwMjJcIjogXCLnlLDkuJzljr9cIixcblx0ICAgIFwiNDUxMDIzXCI6IFwi5bmz5p6c5Y6/XCIsXG5cdCAgICBcIjQ1MTAyNFwiOiBcIuW+t+S/neWOv1wiLFxuXHQgICAgXCI0NTEwMjVcIjogXCLpnZbopb/ljr9cIixcblx0ICAgIFwiNDUxMDI2XCI6IFwi6YKj5Z2h5Y6/XCIsXG5cdCAgICBcIjQ1MTAyN1wiOiBcIuWHjOS6keWOv1wiLFxuXHQgICAgXCI0NTEwMjhcIjogXCLkuZDkuJrljr9cIixcblx0ICAgIFwiNDUxMDI5XCI6IFwi55Sw5p6X5Y6/XCIsXG5cdCAgICBcIjQ1MTAzMFwiOiBcIuilv+ael+WOv1wiLFxuXHQgICAgXCI0NTEwMzFcIjogXCLpmobmnpflkITml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMDMyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjQ1MTEwMFwiOiBcIui0uuW3nuW4glwiLFxuXHQgICAgXCI0NTExMDJcIjogXCLlhavmraXljLpcIixcblx0ICAgIFwiNDUxMTE5XCI6IFwi5bmz5qGC566h55CG5Yy6XCIsXG5cdCAgICBcIjQ1MTEyMVwiOiBcIuaYreW5s+WOv1wiLFxuXHQgICAgXCI0NTExMjJcIjogXCLpkp/lsbHljr9cIixcblx0ICAgIFwiNDUxMTIzXCI6IFwi5a+M5bed55G25peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MTEyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTEyMDBcIjogXCLmsrPmsaDluIJcIixcblx0ICAgIFwiNDUxMjAyXCI6IFwi6YeR5Z+O5rGf5Yy6XCIsXG5cdCAgICBcIjQ1MTIyMVwiOiBcIuWNl+S4ueWOv1wiLFxuXHQgICAgXCI0NTEyMjJcIjogXCLlpKnls6jljr9cIixcblx0ICAgIFwiNDUxMjIzXCI6IFwi5Yek5bGx5Y6/XCIsXG5cdCAgICBcIjQ1MTIyNFwiOiBcIuS4nOWFsOWOv1wiLFxuXHQgICAgXCI0NTEyMjVcIjogXCLnvZfln47ku6vkvazml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMjI2XCI6IFwi546v5rGf5q+b5Y2X5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MTIyN1wiOiBcIuW3tOmprOeRtuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NTEyMjhcIjogXCLpg73lronnkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMjI5XCI6IFwi5aSn5YyW55G25peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ1MTI4MVwiOiBcIuWunOW3nuW4glwiLFxuXHQgICAgXCI0NTEyODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDUxMzAwXCI6IFwi5p2l5a6+5biCXCIsXG5cdCAgICBcIjQ1MTMwMlwiOiBcIuWFtOWuvuWMulwiLFxuXHQgICAgXCI0NTEzMjFcIjogXCLlv7vln47ljr9cIixcblx0ICAgIFwiNDUxMzIyXCI6IFwi6LGh5bee5Y6/XCIsXG5cdCAgICBcIjQ1MTMyM1wiOiBcIuatpuWuo+WOv1wiLFxuXHQgICAgXCI0NTEzMjRcIjogXCLph5Hnp4Dnkbbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDUxMzgxXCI6IFwi5ZCI5bGx5biCXCIsXG5cdCAgICBcIjQ1MTM4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NTE0MDBcIjogXCLltIflt6bluIJcIixcblx0ICAgIFwiNDUxNDAyXCI6IFwi5rGf5bee5Yy6XCIsXG5cdCAgICBcIjQ1MTQyMVwiOiBcIuaJtue7peWOv1wiLFxuXHQgICAgXCI0NTE0MjJcIjogXCLlroHmmI7ljr9cIixcblx0ICAgIFwiNDUxNDIzXCI6IFwi6b6Z5bee5Y6/XCIsXG5cdCAgICBcIjQ1MTQyNFwiOiBcIuWkp+aWsOWOv1wiLFxuXHQgICAgXCI0NTE0MjVcIjogXCLlpKnnrYnljr9cIixcblx0ICAgIFwiNDUxNDgxXCI6IFwi5Yet56Wl5biCXCIsXG5cdCAgICBcIjQ1MTQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI0NjAwMDBcIjogXCLmtbfljZfnnIFcIixcblx0ICAgIFwiNDYwMTAwXCI6IFwi5rW35Y+j5biCXCIsXG5cdCAgICBcIjQ2MDEwNVwiOiBcIuengOiLseWMulwiLFxuXHQgICAgXCI0NjAxMDZcIjogXCLpvpnljY7ljLpcIixcblx0ICAgIFwiNDYwMTA3XCI6IFwi55C85bGx5Yy6XCIsXG5cdCAgICBcIjQ2MDEwOFwiOiBcIue+juWFsOWMulwiLFxuXHQgICAgXCI0NjAxMDlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNDYwMjAwXCI6IFwi5LiJ5Lqa5biCXCIsXG5cdCAgICBcIjQ2MDMwMFwiOiBcIuS4ieaymeW4glwiLFxuXHQgICAgXCI0NjAzMjFcIjogXCLopb/mspnnvqTlsptcIixcblx0ICAgIFwiNDYwMzIyXCI6IFwi5Y2X5rKZ576k5bKbXCIsXG5cdCAgICBcIjQ2MDMyM1wiOiBcIuS4reaymee+pOWym+eahOWym+ekgeWPiuWFtua1t+Wfn1wiLFxuXHQgICAgXCI0NjkwMDFcIjogXCLkupTmjIflsbHluIJcIixcblx0ICAgIFwiNDY5MDAyXCI6IFwi55C85rW35biCXCIsXG5cdCAgICBcIjQ2OTAwM1wiOiBcIuWEi+W3nuW4glwiLFxuXHQgICAgXCI0NjkwMDVcIjogXCLmlofmmIzluIJcIixcblx0ICAgIFwiNDY5MDA2XCI6IFwi5LiH5a6B5biCXCIsXG5cdCAgICBcIjQ2OTAwN1wiOiBcIuS4nOaWueW4glwiLFxuXHQgICAgXCI0NjkwMjVcIjogXCLlrprlronljr9cIixcblx0ICAgIFwiNDY5MDI2XCI6IFwi5bGv5piM5Y6/XCIsXG5cdCAgICBcIjQ2OTAyN1wiOiBcIua+hOi/iOWOv1wiLFxuXHQgICAgXCI0NjkwMjhcIjogXCLkuLTpq5jljr9cIixcblx0ICAgIFwiNDY5MDMwXCI6IFwi55m95rKZ6buO5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ2OTAzMVwiOiBcIuaYjOaxn+m7juaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NjkwMzNcIjogXCLkuZDkuJzpu47ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDY5MDM0XCI6IFwi6Zm15rC06buO5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjQ2OTAzNVwiOiBcIuS/neS6rem7juaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI0NjkwMzZcIjogXCLnkLzkuK3pu47ml4/oi5fml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNDcxMDA1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUwMDAwMFwiOiBcIumHjeW6hlwiLFxuXHQgICAgXCI1MDAxMDBcIjogXCLph43luobluIJcIixcblx0ICAgIFwiNTAwMTAxXCI6IFwi5LiH5bee5Yy6XCIsXG5cdCAgICBcIjUwMDEwMlwiOiBcIua2qumZteWMulwiLFxuXHQgICAgXCI1MDAxMDNcIjogXCLmuJ3kuK3ljLpcIixcblx0ICAgIFwiNTAwMTA0XCI6IFwi5aSn5rih5Y+j5Yy6XCIsXG5cdCAgICBcIjUwMDEwNVwiOiBcIuaxn+WMl+WMulwiLFxuXHQgICAgXCI1MDAxMDZcIjogXCLmspnlnarlnZ3ljLpcIixcblx0ICAgIFwiNTAwMTA3XCI6IFwi5Lmd6b6Z5Z2h5Yy6XCIsXG5cdCAgICBcIjUwMDEwOFwiOiBcIuWNl+WyuOWMulwiLFxuXHQgICAgXCI1MDAxMDlcIjogXCLljJfnoprljLpcIixcblx0ICAgIFwiNTAwMTEwXCI6IFwi5LiH55ub5Yy6XCIsXG5cdCAgICBcIjUwMDExMVwiOiBcIuWPjOahpeWMulwiLFxuXHQgICAgXCI1MDAxMTJcIjogXCLmuJ3ljJfljLpcIixcblx0ICAgIFwiNTAwMTEzXCI6IFwi5be05Y2X5Yy6XCIsXG5cdCAgICBcIjUwMDExNFwiOiBcIum7lOaxn+WMulwiLFxuXHQgICAgXCI1MDAxMTVcIjogXCLplb/lr7/ljLpcIixcblx0ICAgIFwiNTAwMjIyXCI6IFwi57am5rGf5Yy6XCIsXG5cdCAgICBcIjUwMDIyM1wiOiBcIua9vOWNl+WOv1wiLFxuXHQgICAgXCI1MDAyMjRcIjogXCLpk5zmooHljr9cIixcblx0ICAgIFwiNTAwMjI1XCI6IFwi5aSn6Laz5Yy6XCIsXG5cdCAgICBcIjUwMDIyNlwiOiBcIuiNo+aYjOWOv1wiLFxuXHQgICAgXCI1MDAyMjdcIjogXCLnkqflsbHljr9cIixcblx0ICAgIFwiNTAwMjI4XCI6IFwi5qKB5bmz5Y6/XCIsXG5cdCAgICBcIjUwMDIyOVwiOiBcIuWfjuWPo+WOv1wiLFxuXHQgICAgXCI1MDAyMzBcIjogXCLkuLDpg73ljr9cIixcblx0ICAgIFwiNTAwMjMxXCI6IFwi5Z6r5rGf5Y6/XCIsXG5cdCAgICBcIjUwMDIzMlwiOiBcIuatpumahuWOv1wiLFxuXHQgICAgXCI1MDAyMzNcIjogXCLlv6Dljr9cIixcblx0ICAgIFwiNTAwMjM0XCI6IFwi5byA5Y6/XCIsXG5cdCAgICBcIjUwMDIzNVwiOiBcIuS6kemYs+WOv1wiLFxuXHQgICAgXCI1MDAyMzZcIjogXCLlpYnoioLljr9cIixcblx0ICAgIFwiNTAwMjM3XCI6IFwi5ber5bGx5Y6/XCIsXG5cdCAgICBcIjUwMDIzOFwiOiBcIuW3q+a6quWOv1wiLFxuXHQgICAgXCI1MDAyNDBcIjogXCLnn7Pmn7HlnJ/lrrbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTAwMjQxXCI6IFwi56eA5bGx5Zyf5a625peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUwMDI0MlwiOiBcIumFiemYs+Wcn+WutuaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MDAyNDNcIjogXCLlva3msLToi5fml4/lnJ/lrrbml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTAwMzgxXCI6IFwi5rGf5rSl5Yy6XCIsXG5cdCAgICBcIjUwMDM4MlwiOiBcIuWQiOW3neWMulwiLFxuXHQgICAgXCI1MDAzODNcIjogXCLmsLjlt53ljLpcIixcblx0ICAgIFwiNTAwMzg0XCI6IFwi5Y2X5bed5Yy6XCIsXG5cdCAgICBcIjUwMDM4NVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTAwMDBcIjogXCLlm5vlt53nnIFcIixcblx0ICAgIFwiNTEwMTAwXCI6IFwi5oiQ6YO95biCXCIsXG5cdCAgICBcIjUxMDEwNFwiOiBcIumUpuaxn+WMulwiLFxuXHQgICAgXCI1MTAxMDVcIjogXCLpnZLnvorljLpcIixcblx0ICAgIFwiNTEwMTA2XCI6IFwi6YeR54mb5Yy6XCIsXG5cdCAgICBcIjUxMDEwN1wiOiBcIuatpuS+r+WMulwiLFxuXHQgICAgXCI1MTAxMDhcIjogXCLmiJDljY7ljLpcIixcblx0ICAgIFwiNTEwMTEyXCI6IFwi6b6Z5rOJ6am/5Yy6XCIsXG5cdCAgICBcIjUxMDExM1wiOiBcIumdkueZveaxn+WMulwiLFxuXHQgICAgXCI1MTAxMTRcIjogXCLmlrDpg73ljLpcIixcblx0ICAgIFwiNTEwMTE1XCI6IFwi5rip5rGf5Yy6XCIsXG5cdCAgICBcIjUxMDEyMVwiOiBcIumHkeWgguWOv1wiLFxuXHQgICAgXCI1MTAxMjJcIjogXCLlj4zmtYHljr9cIixcblx0ICAgIFwiNTEwMTI0XCI6IFwi6YOr5Y6/XCIsXG5cdCAgICBcIjUxMDEyOVwiOiBcIuWkp+mCkeWOv1wiLFxuXHQgICAgXCI1MTAxMzFcIjogXCLokrLmsZ/ljr9cIixcblx0ICAgIFwiNTEwMTMyXCI6IFwi5paw5rSl5Y6/XCIsXG5cdCAgICBcIjUxMDE4MVwiOiBcIumDveaxn+WgsOW4glwiLFxuXHQgICAgXCI1MTAxODJcIjogXCLlva3lt57luIJcIixcblx0ICAgIFwiNTEwMTgzXCI6IFwi6YKb5bSD5biCXCIsXG5cdCAgICBcIjUxMDE4NFwiOiBcIuW0h+W3nuW4glwiLFxuXHQgICAgXCI1MTAxODVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEwMzAwXCI6IFwi6Ieq6LSh5biCXCIsXG5cdCAgICBcIjUxMDMwMlwiOiBcIuiHqua1geS6leWMulwiLFxuXHQgICAgXCI1MTAzMDNcIjogXCLotKHkupXljLpcIixcblx0ICAgIFwiNTEwMzA0XCI6IFwi5aSn5a6J5Yy6XCIsXG5cdCAgICBcIjUxMDMxMVwiOiBcIuayv+a7qeWMulwiLFxuXHQgICAgXCI1MTAzMjFcIjogXCLojaPljr9cIixcblx0ICAgIFwiNTEwMzIyXCI6IFwi5a+M6aG65Y6/XCIsXG5cdCAgICBcIjUxMDMyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTA0MDBcIjogXCLmlIDmnp3oirHluIJcIixcblx0ICAgIFwiNTEwNDAyXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjUxMDQwM1wiOiBcIuilv+WMulwiLFxuXHQgICAgXCI1MTA0MTFcIjogXCLku4HlkozljLpcIixcblx0ICAgIFwiNTEwNDIxXCI6IFwi57Gz5piT5Y6/XCIsXG5cdCAgICBcIjUxMDQyMlwiOiBcIuebkOi+ueWOv1wiLFxuXHQgICAgXCI1MTA0MjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEwNTAwXCI6IFwi5rO45bee5biCXCIsXG5cdCAgICBcIjUxMDUwMlwiOiBcIuaxn+mYs+WMulwiLFxuXHQgICAgXCI1MTA1MDNcIjogXCLnurPmuqrljLpcIixcblx0ICAgIFwiNTEwNTA0XCI6IFwi6b6Z6ams5r2t5Yy6XCIsXG5cdCAgICBcIjUxMDUyMVwiOiBcIuazuOWOv1wiLFxuXHQgICAgXCI1MTA1MjJcIjogXCLlkIjmsZ/ljr9cIixcblx0ICAgIFwiNTEwNTI0XCI6IFwi5Y+Z5rC45Y6/XCIsXG5cdCAgICBcIjUxMDUyNVwiOiBcIuWPpOiUuuWOv1wiLFxuXHQgICAgXCI1MTA1MjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEwNjAwXCI6IFwi5b636Ziz5biCXCIsXG5cdCAgICBcIjUxMDYwM1wiOiBcIuaXjOmYs+WMulwiLFxuXHQgICAgXCI1MTA2MjNcIjogXCLkuK3msZ/ljr9cIixcblx0ICAgIFwiNTEwNjI2XCI6IFwi572X5rGf5Y6/XCIsXG5cdCAgICBcIjUxMDY4MVwiOiBcIuW5v+axieW4glwiLFxuXHQgICAgXCI1MTA2ODJcIjogXCLku4DpgqHluIJcIixcblx0ICAgIFwiNTEwNjgzXCI6IFwi57u156u55biCXCIsXG5cdCAgICBcIjUxMDY4NFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTA3MDBcIjogXCLnu7XpmLPluIJcIixcblx0ICAgIFwiNTEwNzAzXCI6IFwi5raq5Z+O5Yy6XCIsXG5cdCAgICBcIjUxMDcwNFwiOiBcIua4uOS7meWMulwiLFxuXHQgICAgXCI1MTA3MjJcIjogXCLkuInlj7Dljr9cIixcblx0ICAgIFwiNTEwNzIzXCI6IFwi55uQ5Lqt5Y6/XCIsXG5cdCAgICBcIjUxMDcyNFwiOiBcIuWuieWOv1wiLFxuXHQgICAgXCI1MTA3MjVcIjogXCLmopPmvbzljr9cIixcblx0ICAgIFwiNTEwNzI2XCI6IFwi5YyX5bed576M5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUxMDcyN1wiOiBcIuW5s+atpuWOv1wiLFxuXHQgICAgXCI1MTA3ODFcIjogXCLmsZ/msrnluIJcIixcblx0ICAgIFwiNTEwNzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMDgwMFwiOiBcIuW5v+WFg+W4glwiLFxuXHQgICAgXCI1MTA4MDJcIjogXCLliKnlt57ljLpcIixcblx0ICAgIFwiNTEwODExXCI6IFwi5pit5YyW5Yy6XCIsXG5cdCAgICBcIjUxMDgxMlwiOiBcIuacneWkqeWMulwiLFxuXHQgICAgXCI1MTA4MjFcIjogXCLml7roi43ljr9cIixcblx0ICAgIFwiNTEwODIyXCI6IFwi6Z2S5bed5Y6/XCIsXG5cdCAgICBcIjUxMDgyM1wiOiBcIuWJkemYgeWOv1wiLFxuXHQgICAgXCI1MTA4MjRcIjogXCLoi43muqrljr9cIixcblx0ICAgIFwiNTEwODI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMDkwMFwiOiBcIumBguWugeW4glwiLFxuXHQgICAgXCI1MTA5MDNcIjogXCLoiLnlsbHljLpcIixcblx0ICAgIFwiNTEwOTA0XCI6IFwi5a6J5bGF5Yy6XCIsXG5cdCAgICBcIjUxMDkyMVwiOiBcIuiTrOa6quWOv1wiLFxuXHQgICAgXCI1MTA5MjJcIjogXCLlsITmtKrljr9cIixcblx0ICAgIFwiNTEwOTIzXCI6IFwi5aSn6Iux5Y6/XCIsXG5cdCAgICBcIjUxMDkyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTEwMDBcIjogXCLlhoXmsZ/luIJcIixcblx0ICAgIFwiNTExMDAyXCI6IFwi5biC5Lit5Yy6XCIsXG5cdCAgICBcIjUxMTAxMVwiOiBcIuS4nOWFtOWMulwiLFxuXHQgICAgXCI1MTEwMjRcIjogXCLlqIHov5zljr9cIixcblx0ICAgIFwiNTExMDI1XCI6IFwi6LWE5Lit5Y6/XCIsXG5cdCAgICBcIjUxMTAyOFwiOiBcIumahuaYjOWOv1wiLFxuXHQgICAgXCI1MTEwMjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTExMTAwXCI6IFwi5LmQ5bGx5biCXCIsXG5cdCAgICBcIjUxMTEwMlwiOiBcIuW4guS4reWMulwiLFxuXHQgICAgXCI1MTExMTFcIjogXCLmspnmub7ljLpcIixcblx0ICAgIFwiNTExMTEyXCI6IFwi5LqU6YCa5qGl5Yy6XCIsXG5cdCAgICBcIjUxMTExM1wiOiBcIumHkeWPo+ays+WMulwiLFxuXHQgICAgXCI1MTExMjNcIjogXCLnio3kuLrljr9cIixcblx0ICAgIFwiNTExMTI0XCI6IFwi5LqV56CU5Y6/XCIsXG5cdCAgICBcIjUxMTEyNlwiOiBcIuWkueaxn+WOv1wiLFxuXHQgICAgXCI1MTExMjlcIjogXCLmspDlt53ljr9cIixcblx0ICAgIFwiNTExMTMyXCI6IFwi5bOo6L655b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUxMTEzM1wiOiBcIumprOi+ueW9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MTExODFcIjogXCLls6jnnInlsbHluIJcIixcblx0ICAgIFwiNTExMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMTMwMFwiOiBcIuWNl+WFheW4glwiLFxuXHQgICAgXCI1MTEzMDJcIjogXCLpobrluobljLpcIixcblx0ICAgIFwiNTExMzAzXCI6IFwi6auY5Z2q5Yy6XCIsXG5cdCAgICBcIjUxMTMwNFwiOiBcIuWYiemZteWMulwiLFxuXHQgICAgXCI1MTEzMjFcIjogXCLljZfpg6jljr9cIixcblx0ICAgIFwiNTExMzIyXCI6IFwi6JCl5bGx5Y6/XCIsXG5cdCAgICBcIjUxMTMyM1wiOiBcIuiTrOWuieWOv1wiLFxuXHQgICAgXCI1MTEzMjRcIjogXCLku6rpmYfljr9cIixcblx0ICAgIFwiNTExMzI1XCI6IFwi6KW/5YWF5Y6/XCIsXG5cdCAgICBcIjUxMTM4MVwiOiBcIumYhuS4reW4glwiLFxuXHQgICAgXCI1MTEzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTExNDAwXCI6IFwi55yJ5bGx5biCXCIsXG5cdCAgICBcIjUxMTQwMlwiOiBcIuS4nOWdoeWMulwiLFxuXHQgICAgXCI1MTE0MjFcIjogXCLku4Hlr7/ljr9cIixcblx0ICAgIFwiNTExNDIyXCI6IFwi5b2t5bGx5Y6/XCIsXG5cdCAgICBcIjUxMTQyM1wiOiBcIua0qumbheWOv1wiLFxuXHQgICAgXCI1MTE0MjRcIjogXCLkuLnmo7Hljr9cIixcblx0ICAgIFwiNTExNDI1XCI6IFwi6Z2S56We5Y6/XCIsXG5cdCAgICBcIjUxMTQyNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTE1MDBcIjogXCLlrpzlrr7luIJcIixcblx0ICAgIFwiNTExNTAyXCI6IFwi57+g5bGP5Yy6XCIsXG5cdCAgICBcIjUxMTUyMVwiOiBcIuWunOWuvuWOv1wiLFxuXHQgICAgXCI1MTE1MjJcIjogXCLljZfmuqrljLpcIixcblx0ICAgIFwiNTExNTIzXCI6IFwi5rGf5a6J5Y6/XCIsXG5cdCAgICBcIjUxMTUyNFwiOiBcIumVv+WugeWOv1wiLFxuXHQgICAgXCI1MTE1MjVcIjogXCLpq5jljr9cIixcblx0ICAgIFwiNTExNTI2XCI6IFwi54+Z5Y6/XCIsXG5cdCAgICBcIjUxMTUyN1wiOiBcIuetoOi/nuWOv1wiLFxuXHQgICAgXCI1MTE1MjhcIjogXCLlhbTmlofljr9cIixcblx0ICAgIFwiNTExNTI5XCI6IFwi5bGP5bGx5Y6/XCIsXG5cdCAgICBcIjUxMTUzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTE2MDBcIjogXCLlub/lronluIJcIixcblx0ICAgIFwiNTExNjAyXCI6IFwi5bm/5a6J5Yy6XCIsXG5cdCAgICBcIjUxMTYwM1wiOiBcIuWJjemUi+WMulwiLFxuXHQgICAgXCI1MTE2MjFcIjogXCLlsrPmsaDljr9cIixcblx0ICAgIFwiNTExNjIyXCI6IFwi5q2m6IOc5Y6/XCIsXG5cdCAgICBcIjUxMTYyM1wiOiBcIumCu+awtOWOv1wiLFxuXHQgICAgXCI1MTE2ODFcIjogXCLljY7ok6XluIJcIixcblx0ICAgIFwiNTExNjgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMTcwMFwiOiBcIui+vuW3nuW4glwiLFxuXHQgICAgXCI1MTE3MDJcIjogXCLpgJrlt53ljLpcIixcblx0ICAgIFwiNTExNzIxXCI6IFwi6L6+5bed5Yy6XCIsXG5cdCAgICBcIjUxMTcyMlwiOiBcIuWuo+axieWOv1wiLFxuXHQgICAgXCI1MTE3MjNcIjogXCLlvIDmsZ/ljr9cIixcblx0ICAgIFwiNTExNzI0XCI6IFwi5aSn56u55Y6/XCIsXG5cdCAgICBcIjUxMTcyNVwiOiBcIua4oOWOv1wiLFxuXHQgICAgXCI1MTE3ODFcIjogXCLkuIfmupDluIJcIixcblx0ICAgIFwiNTExNzgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUxMTgwMFwiOiBcIumbheWuieW4glwiLFxuXHQgICAgXCI1MTE4MDJcIjogXCLpm6jln47ljLpcIixcblx0ICAgIFwiNTExODIxXCI6IFwi5ZCN5bGx5Yy6XCIsXG5cdCAgICBcIjUxMTgyMlwiOiBcIuiNpee7j+WOv1wiLFxuXHQgICAgXCI1MTE4MjNcIjogXCLmsYnmupDljr9cIixcblx0ICAgIFwiNTExODI0XCI6IFwi55+z5qOJ5Y6/XCIsXG5cdCAgICBcIjUxMTgyNVwiOiBcIuWkqeWFqOWOv1wiLFxuXHQgICAgXCI1MTE4MjZcIjogXCLoiqblsbHljr9cIixcblx0ICAgIFwiNTExODI3XCI6IFwi5a6d5YW05Y6/XCIsXG5cdCAgICBcIjUxMTgyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTE5MDBcIjogXCLlt7TkuK3luIJcIixcblx0ICAgIFwiNTExOTAyXCI6IFwi5be05bee5Yy6XCIsXG5cdCAgICBcIjUxMTkwM1wiOiBcIuaBqemYs+WMulwiLFxuXHQgICAgXCI1MTE5MjFcIjogXCLpgJrmsZ/ljr9cIixcblx0ICAgIFwiNTExOTIyXCI6IFwi5Y2X5rGf5Y6/XCIsXG5cdCAgICBcIjUxMTkyM1wiOiBcIuW5s+aYjOWOv1wiLFxuXHQgICAgXCI1MTE5MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEyMDAwXCI6IFwi6LWE6Ziz5biCXCIsXG5cdCAgICBcIjUxMjAwMlwiOiBcIumbgeaxn+WMulwiLFxuXHQgICAgXCI1MTIwMjFcIjogXCLlronlsrPljr9cIixcblx0ICAgIFwiNTEyMDIyXCI6IFwi5LmQ6Iez5Y6/XCIsXG5cdCAgICBcIjUxMjA4MVwiOiBcIueugOmYs+W4glwiLFxuXHQgICAgXCI1MTIwODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEzMjAwXCI6IFwi6Zi/5Z2d6JeP5peP576M5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUxMzIyMVwiOiBcIuaxtuW3neWOv1wiLFxuXHQgICAgXCI1MTMyMjJcIjogXCLnkIbljr9cIixcblx0ICAgIFwiNTEzMjIzXCI6IFwi6IyC5Y6/XCIsXG5cdCAgICBcIjUxMzIyNFwiOiBcIuadvua9mOWOv1wiLFxuXHQgICAgXCI1MTMyMjVcIjogXCLkuZ3lr6jmsp/ljr9cIixcblx0ICAgIFwiNTEzMjI2XCI6IFwi6YeR5bed5Y6/XCIsXG5cdCAgICBcIjUxMzIyN1wiOiBcIuWwj+mHkeWOv1wiLFxuXHQgICAgXCI1MTMyMjhcIjogXCLpu5HmsLTljr9cIixcblx0ICAgIFwiNTEzMjI5XCI6IFwi6ams5bCU5bq35Y6/XCIsXG5cdCAgICBcIjUxMzIzMFwiOiBcIuWjpOWhmOWOv1wiLFxuXHQgICAgXCI1MTMyMzFcIjogXCLpmL/lnZ3ljr9cIixcblx0ICAgIFwiNTEzMjMyXCI6IFwi6Iul5bCU55uW5Y6/XCIsXG5cdCAgICBcIjUxMzIzM1wiOiBcIue6ouWOn+WOv1wiLFxuXHQgICAgXCI1MTMyMzRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTEzMzAwXCI6IFwi55SY5a2c6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUxMzMyMVwiOiBcIuW6t+WumuWOv1wiLFxuXHQgICAgXCI1MTMzMjJcIjogXCLms7jlrprljr9cIixcblx0ICAgIFwiNTEzMzIzXCI6IFwi5Li55be05Y6/XCIsXG5cdCAgICBcIjUxMzMyNFwiOiBcIuS5nem+meWOv1wiLFxuXHQgICAgXCI1MTMzMjVcIjogXCLpm4XmsZ/ljr9cIixcblx0ICAgIFwiNTEzMzI2XCI6IFwi6YGT5a2a5Y6/XCIsXG5cdCAgICBcIjUxMzMyN1wiOiBcIueCiemcjeWOv1wiLFxuXHQgICAgXCI1MTMzMjhcIjogXCLnlJjlrZzljr9cIixcblx0ICAgIFwiNTEzMzI5XCI6IFwi5paw6b6Z5Y6/XCIsXG5cdCAgICBcIjUxMzMzMFwiOiBcIuW+t+agvOWOv1wiLFxuXHQgICAgXCI1MTMzMzFcIjogXCLnmb3njonljr9cIixcblx0ICAgIFwiNTEzMzMyXCI6IFwi55+z5rig5Y6/XCIsXG5cdCAgICBcIjUxMzMzM1wiOiBcIuiJsui+vuWOv1wiLFxuXHQgICAgXCI1MTMzMzRcIjogXCLnkIbloZjljr9cIixcblx0ICAgIFwiNTEzMzM1XCI6IFwi5be05aGY5Y6/XCIsXG5cdCAgICBcIjUxMzMzNlwiOiBcIuS5oeWfjuWOv1wiLFxuXHQgICAgXCI1MTMzMzdcIjogXCLnqLvln47ljr9cIixcblx0ICAgIFwiNTEzMzM4XCI6IFwi5b6X6I2j5Y6/XCIsXG5cdCAgICBcIjUxMzMzOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MTM0MDBcIjogXCLlh4nlsbHlvZ3ml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNTEzNDAxXCI6IFwi6KW/5piM5biCXCIsXG5cdCAgICBcIjUxMzQyMlwiOiBcIuacqOmHjOiXj+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MTM0MjNcIjogXCLnm5DmupDljr9cIixcblx0ICAgIFwiNTEzNDI0XCI6IFwi5b635piM5Y6/XCIsXG5cdCAgICBcIjUxMzQyNVwiOiBcIuS8mueQhuWOv1wiLFxuXHQgICAgXCI1MTM0MjZcIjogXCLkvJrkuJzljr9cIixcblx0ICAgIFwiNTEzNDI3XCI6IFwi5a6B5Y2X5Y6/XCIsXG5cdCAgICBcIjUxMzQyOFwiOiBcIuaZruagvOWOv1wiLFxuXHQgICAgXCI1MTM0MjlcIjogXCLluIPmi5bljr9cIixcblx0ICAgIFwiNTEzNDMwXCI6IFwi6YeR6Ziz5Y6/XCIsXG5cdCAgICBcIjUxMzQzMVwiOiBcIuaYreinieWOv1wiLFxuXHQgICAgXCI1MTM0MzJcIjogXCLllpzlvrfljr9cIixcblx0ICAgIFwiNTEzNDMzXCI6IFwi5YaV5a6B5Y6/XCIsXG5cdCAgICBcIjUxMzQzNFwiOiBcIui2iuilv+WOv1wiLFxuXHQgICAgXCI1MTM0MzVcIjogXCLnlJjmtJvljr9cIixcblx0ICAgIFwiNTEzNDM2XCI6IFwi576O5aeR5Y6/XCIsXG5cdCAgICBcIjUxMzQzN1wiOiBcIumbt+azouWOv1wiLFxuXHQgICAgXCI1MTM0MzhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTIwMDAwXCI6IFwi6LS15bee55yBXCIsXG5cdCAgICBcIjUyMDEwMFwiOiBcIui0temYs+W4glwiLFxuXHQgICAgXCI1MjAxMDJcIjogXCLljZfmmI7ljLpcIixcblx0ICAgIFwiNTIwMTAzXCI6IFwi5LqR5bKp5Yy6XCIsXG5cdCAgICBcIjUyMDExMVwiOiBcIuiKsea6quWMulwiLFxuXHQgICAgXCI1MjAxMTJcIjogXCLkuYzlvZPljLpcIixcblx0ICAgIFwiNTIwMTEzXCI6IFwi55m95LqR5Yy6XCIsXG5cdCAgICBcIjUyMDEyMVwiOiBcIuW8gOmYs+WOv1wiLFxuXHQgICAgXCI1MjAxMjJcIjogXCLmga/ng73ljr9cIixcblx0ICAgIFwiNTIwMTIzXCI6IFwi5L+u5paH5Y6/XCIsXG5cdCAgICBcIjUyMDE1MVwiOiBcIuinguWxsea5luWMulwiLFxuXHQgICAgXCI1MjAxODFcIjogXCLmuIXplYfluIJcIixcblx0ICAgIFwiNTIwMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMDIwMFwiOiBcIuWFreebmOawtOW4glwiLFxuXHQgICAgXCI1MjAyMDFcIjogXCLpkp/lsbHljLpcIixcblx0ICAgIFwiNTIwMjAzXCI6IFwi5YWt5p6d54m55Yy6XCIsXG5cdCAgICBcIjUyMDIyMVwiOiBcIuawtOWfjuWOv1wiLFxuXHQgICAgXCI1MjAyMjJcIjogXCLnm5jljr9cIixcblx0ICAgIFwiNTIwMjIzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMDMwMFwiOiBcIumBteS5ieW4glwiLFxuXHQgICAgXCI1MjAzMDJcIjogXCLnuqLoirHlspfljLpcIixcblx0ICAgIFwiNTIwMzAzXCI6IFwi5rGH5bed5Yy6XCIsXG5cdCAgICBcIjUyMDMyMVwiOiBcIumBteS5ieWOv1wiLFxuXHQgICAgXCI1MjAzMjJcIjogXCLmoZDmopPljr9cIixcblx0ICAgIFwiNTIwMzIzXCI6IFwi57ul6Ziz5Y6/XCIsXG5cdCAgICBcIjUyMDMyNFwiOiBcIuato+WuieWOv1wiLFxuXHQgICAgXCI1MjAzMjVcIjogXCLpgZPnnJ/ku6Hkvazml4/oi5fml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTIwMzI2XCI6IFwi5Yqh5bed5Luh5L2s5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMDMyN1wiOiBcIuWHpOWGiOWOv1wiLFxuXHQgICAgXCI1MjAzMjhcIjogXCLmuYTmva3ljr9cIixcblx0ICAgIFwiNTIwMzI5XCI6IFwi5L2Z5bqG5Y6/XCIsXG5cdCAgICBcIjUyMDMzMFwiOiBcIuS5oOawtOWOv1wiLFxuXHQgICAgXCI1MjAzODFcIjogXCLotaTmsLTluIJcIixcblx0ICAgIFwiNTIwMzgyXCI6IFwi5LuB5oCA5biCXCIsXG5cdCAgICBcIjUyMDM4M1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MjA0MDBcIjogXCLlronpobrluIJcIixcblx0ICAgIFwiNTIwNDAyXCI6IFwi6KW/56eA5Yy6XCIsXG5cdCAgICBcIjUyMDQyMVwiOiBcIuW5s+WdneWOv1wiLFxuXHQgICAgXCI1MjA0MjJcIjogXCLmma7lrprljr9cIixcblx0ICAgIFwiNTIwNDIzXCI6IFwi6ZWH5a6B5biD5L6d5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMDQyNFwiOiBcIuWFs+WyreW4g+S+neaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjA0MjVcIjogXCLntKvkupHoi5fml4/luIPkvp3ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTIwNDI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMjIwMFwiOiBcIumTnOS7geW4glwiLFxuXHQgICAgXCI1MjIyMDFcIjogXCLnoqfmsZ/ljLpcIixcblx0ICAgIFwiNTIyMjIyXCI6IFwi5rGf5Y+j5Y6/XCIsXG5cdCAgICBcIjUyMjIyM1wiOiBcIueOieWxj+S+l+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjIyMjRcIjogXCLnn7PpmKHljr9cIixcblx0ICAgIFwiNTIyMjI1XCI6IFwi5oCd5Y2X5Y6/XCIsXG5cdCAgICBcIjUyMjIyNlwiOiBcIuWNsOaxn+Wcn+WutuaXj+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjIyMjdcIjogXCLlvrfmsZ/ljr9cIixcblx0ICAgIFwiNTIyMjI4XCI6IFwi5rK/5rKz5Zyf5a625peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMjIyOVwiOiBcIuadvuahg+iLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MjIyMzBcIjogXCLkuIflsbHljLpcIixcblx0ICAgIFwiNTIyMjMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUyMjMwMFwiOiBcIum7lOilv+WNl+W4g+S+neaXj+iLl+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI1MjIzMDFcIjogXCLlhbTkuYnluIJcIixcblx0ICAgIFwiNTIyMzIyXCI6IFwi5YW05LuB5Y6/XCIsXG5cdCAgICBcIjUyMjMyM1wiOiBcIuaZruWuieWOv1wiLFxuXHQgICAgXCI1MjIzMjRcIjogXCLmmbTpmobljr9cIixcblx0ICAgIFwiNTIyMzI1XCI6IFwi6LSe5Liw5Y6/XCIsXG5cdCAgICBcIjUyMjMyNlwiOiBcIuacm+iwn+WOv1wiLFxuXHQgICAgXCI1MjIzMjdcIjogXCLlhozkuqjljr9cIixcblx0ICAgIFwiNTIyMzI4XCI6IFwi5a6J6b6Z5Y6/XCIsXG5cdCAgICBcIjUyMjMyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MjI0MDBcIjogXCLmr5XoioLluIJcIixcblx0ICAgIFwiNTIyNDAxXCI6IFwi5LiD5pif5YWz5Yy6XCIsXG5cdCAgICBcIjUyMjQyMlwiOiBcIuWkp+aWueWOv1wiLFxuXHQgICAgXCI1MjI0MjNcIjogXCLpu5Topb/ljr9cIixcblx0ICAgIFwiNTIyNDI0XCI6IFwi6YeR5rKZ5Y6/XCIsXG5cdCAgICBcIjUyMjQyNVwiOiBcIue7h+mHkeWOv1wiLFxuXHQgICAgXCI1MjI0MjZcIjogXCLnurPpm43ljr9cIixcblx0ICAgIFwiNTIyNDI3XCI6IFwi5aiB5a6B5b2d5peP5Zue5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMjQyOFwiOiBcIui1q+eroOWOv1wiLFxuXHQgICAgXCI1MjI0MjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTIyNjAwXCI6IFwi6buU5Lic5Y2X6IuX5peP5L6X5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUyMjYwMVwiOiBcIuWHr+mHjOW4glwiLFxuXHQgICAgXCI1MjI2MjJcIjogXCLpu4TlubPljr9cIixcblx0ICAgIFwiNTIyNjIzXCI6IFwi5pa956eJ5Y6/XCIsXG5cdCAgICBcIjUyMjYyNFwiOiBcIuS4ieepl+WOv1wiLFxuXHQgICAgXCI1MjI2MjVcIjogXCLplYfov5zljr9cIixcblx0ICAgIFwiNTIyNjI2XCI6IFwi5bKR5bep5Y6/XCIsXG5cdCAgICBcIjUyMjYyN1wiOiBcIuWkqeafseWOv1wiLFxuXHQgICAgXCI1MjI2MjhcIjogXCLplKblsY/ljr9cIixcblx0ICAgIFwiNTIyNjI5XCI6IFwi5YmR5rKz5Y6/XCIsXG5cdCAgICBcIjUyMjYzMFwiOiBcIuWPsOaxn+WOv1wiLFxuXHQgICAgXCI1MjI2MzFcIjogXCLpu47lubPljr9cIixcblx0ICAgIFwiNTIyNjMyXCI6IFwi5qaV5rGf5Y6/XCIsXG5cdCAgICBcIjUyMjYzM1wiOiBcIuS7juaxn+WOv1wiLFxuXHQgICAgXCI1MjI2MzRcIjogXCLpm7flsbHljr9cIixcblx0ICAgIFwiNTIyNjM1XCI6IFwi6bq75rGf5Y6/XCIsXG5cdCAgICBcIjUyMjYzNlwiOiBcIuS4ueWvqOWOv1wiLFxuXHQgICAgXCI1MjI2MzdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTIyNzAwXCI6IFwi6buU5Y2X5biD5L6d5peP6IuX5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUyMjcwMVwiOiBcIumDveWMgOW4glwiLFxuXHQgICAgXCI1MjI3MDJcIjogXCLnpo/ms4nluIJcIixcblx0ICAgIFwiNTIyNzIyXCI6IFwi6I2U5rOi5Y6/XCIsXG5cdCAgICBcIjUyMjcyM1wiOiBcIui0teWumuWOv1wiLFxuXHQgICAgXCI1MjI3MjVcIjogXCLnk67lronljr9cIixcblx0ICAgIFwiNTIyNzI2XCI6IFwi54us5bGx5Y6/XCIsXG5cdCAgICBcIjUyMjcyN1wiOiBcIuW5s+WhmOWOv1wiLFxuXHQgICAgXCI1MjI3MjhcIjogXCLnvZfnlLjljr9cIixcblx0ICAgIFwiNTIyNzI5XCI6IFwi6ZW/6aG65Y6/XCIsXG5cdCAgICBcIjUyMjczMFwiOiBcIum+memHjOWOv1wiLFxuXHQgICAgXCI1MjI3MzFcIjogXCLmg6DmsLTljr9cIixcblx0ICAgIFwiNTIyNzMyXCI6IFwi5LiJ6YO95rC05peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUyMjczM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzAwMDBcIjogXCLkupHljZfnnIFcIixcblx0ICAgIFwiNTMwMTAwXCI6IFwi5piG5piO5biCXCIsXG5cdCAgICBcIjUzMDEwMlwiOiBcIuS6lOWNjuWMulwiLFxuXHQgICAgXCI1MzAxMDNcIjogXCLnm5jpvpnljLpcIixcblx0ICAgIFwiNTMwMTExXCI6IFwi5a6Y5rih5Yy6XCIsXG5cdCAgICBcIjUzMDExMlwiOiBcIuilv+WxseWMulwiLFxuXHQgICAgXCI1MzAxMTNcIjogXCLkuJzlt53ljLpcIixcblx0ICAgIFwiNTMwMTIxXCI6IFwi5ZGI6LSh5Yy6XCIsXG5cdCAgICBcIjUzMDEyMlwiOiBcIuaZi+WugeWOv1wiLFxuXHQgICAgXCI1MzAxMjRcIjogXCLlr4zmsJHljr9cIixcblx0ICAgIFwiNTMwMTI1XCI6IFwi5a6c6Imv5Y6/XCIsXG5cdCAgICBcIjUzMDEyNlwiOiBcIuefs+ael+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzAxMjdcIjogXCLltanmmI7ljr9cIixcblx0ICAgIFwiNTMwMTI4XCI6IFwi56aE5Yqd5b2d5peP6IuX5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDEyOVwiOiBcIuWvu+eUuOWbnuaXj+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzAxODFcIjogXCLlronlroHluIJcIixcblx0ICAgIFwiNTMwMTgyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUzMDMwMFwiOiBcIuabsumdluW4glwiLFxuXHQgICAgXCI1MzAzMDJcIjogXCLpupLpup/ljLpcIixcblx0ICAgIFwiNTMwMzIxXCI6IFwi6ams6b6Z5Y6/XCIsXG5cdCAgICBcIjUzMDMyMlwiOiBcIumZhuiJr+WOv1wiLFxuXHQgICAgXCI1MzAzMjNcIjogXCLluIjlrpfljr9cIixcblx0ICAgIFwiNTMwMzI0XCI6IFwi572X5bmz5Y6/XCIsXG5cdCAgICBcIjUzMDMyNVwiOiBcIuWvjOa6kOWOv1wiLFxuXHQgICAgXCI1MzAzMjZcIjogXCLkvJrms73ljr9cIixcblx0ICAgIFwiNTMwMzI4XCI6IFwi5rK+55uK5Y6/XCIsXG5cdCAgICBcIjUzMDM4MVwiOiBcIuWuo+WogeW4glwiLFxuXHQgICAgXCI1MzAzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMwNDAwXCI6IFwi546J5rqq5biCXCIsXG5cdCAgICBcIjUzMDQwMlwiOiBcIue6ouWhlOWMulwiLFxuXHQgICAgXCI1MzA0MjFcIjogXCLmsZ/lt53ljr9cIixcblx0ICAgIFwiNTMwNDIyXCI6IFwi5r6E5rGf5Y6/XCIsXG5cdCAgICBcIjUzMDQyM1wiOiBcIumAmua1t+WOv1wiLFxuXHQgICAgXCI1MzA0MjRcIjogXCLljY7lroHljr9cIixcblx0ICAgIFwiNTMwNDI1XCI6IFwi5piT6Zeo5Y6/XCIsXG5cdCAgICBcIjUzMDQyNlwiOiBcIuWzqOWxseW9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA0MjdcIjogXCLmlrDlubPlvZ3ml4/lgqPml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwNDI4XCI6IFwi5YWD5rGf5ZOI5bC85peP5b2d5peP5YKj5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDQyOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzA1MDBcIjogXCLkv53lsbHluIJcIixcblx0ICAgIFwiNTMwNTAyXCI6IFwi6ZqG6Ziz5Yy6XCIsXG5cdCAgICBcIjUzMDUyMVwiOiBcIuaWveeUuOWOv1wiLFxuXHQgICAgXCI1MzA1MjJcIjogXCLohb7lhrLljr9cIixcblx0ICAgIFwiNTMwNTIzXCI6IFwi6b6Z6Zm15Y6/XCIsXG5cdCAgICBcIjUzMDUyNFwiOiBcIuaYjOWugeWOv1wiLFxuXHQgICAgXCI1MzA1MjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMwNjAwXCI6IFwi5pit6YCa5biCXCIsXG5cdCAgICBcIjUzMDYwMlwiOiBcIuaYremYs+WMulwiLFxuXHQgICAgXCI1MzA2MjFcIjogXCLpsoHnlLjljr9cIixcblx0ICAgIFwiNTMwNjIyXCI6IFwi5ben5a625Y6/XCIsXG5cdCAgICBcIjUzMDYyM1wiOiBcIuebkOa0peWOv1wiLFxuXHQgICAgXCI1MzA2MjRcIjogXCLlpKflhbPljr9cIixcblx0ICAgIFwiNTMwNjI1XCI6IFwi5rC45ZaE5Y6/XCIsXG5cdCAgICBcIjUzMDYyNlwiOiBcIue7peaxn+WOv1wiLFxuXHQgICAgXCI1MzA2MjdcIjogXCLplYfpm4Tljr9cIixcblx0ICAgIFwiNTMwNjI4XCI6IFwi5b2d6Imv5Y6/XCIsXG5cdCAgICBcIjUzMDYyOVwiOiBcIuWogeS/oeWOv1wiLFxuXHQgICAgXCI1MzA2MzBcIjogXCLmsLTlr4zljr9cIixcblx0ICAgIFwiNTMwNjMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUzMDcwMFwiOiBcIuS4veaxn+W4glwiLFxuXHQgICAgXCI1MzA3MDJcIjogXCLlj6Tln47ljLpcIixcblx0ICAgIFwiNTMwNzIxXCI6IFwi546J6b6Z57qz6KW/5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDcyMlwiOiBcIuawuOiDnOWOv1wiLFxuXHQgICAgXCI1MzA3MjNcIjogXCLljY7lnarljr9cIixcblx0ICAgIFwiNTMwNzI0XCI6IFwi5a6B6JKX5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDcyNVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzA4MDBcIjogXCLmma7mtLHluIJcIixcblx0ICAgIFwiNTMwODAyXCI6IFwi5oCd6IyF5Yy6XCIsXG5cdCAgICBcIjUzMDgyMVwiOiBcIuWugea0seWTiOWwvOaXj+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA4MjJcIjogXCLloqjmsZ/lk4jlsLzml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwODIzXCI6IFwi5pmv5Lic5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDgyNFwiOiBcIuaZr+iwt+WCo+aXj+W9neaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA4MjVcIjogXCLplYfmsoXlvZ3ml4/lk4jlsLzml4/mi4nnpZzml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwODI2XCI6IFwi5rGf5Z+O5ZOI5bC85peP5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDgyN1wiOiBcIuWtn+i/nuWCo+aXj+aLieelnOaXj+S9pOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA4MjhcIjogXCLmvpzmsqfmi4nnpZzml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwODI5XCI6IFwi6KW/55uf5L2k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDgzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzA5MDBcIjogXCLkuLTmsqfluIJcIixcblx0ICAgIFwiNTMwOTAyXCI6IFwi5Li057+U5Yy6XCIsXG5cdCAgICBcIjUzMDkyMVwiOiBcIuWHpOW6huWOv1wiLFxuXHQgICAgXCI1MzA5MjJcIjogXCLkupHljr9cIixcblx0ICAgIFwiNTMwOTIzXCI6IFwi5rC45b635Y6/XCIsXG5cdCAgICBcIjUzMDkyNFwiOiBcIumVh+W6t+WOv1wiLFxuXHQgICAgXCI1MzA5MjVcIjogXCLlj4zmsZ/mi4nnpZzml4/kvaTml4/luIPmnJfml4/lgqPml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMwOTI2XCI6IFwi6IC/6ams5YKj5peP5L2k5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMDkyN1wiOiBcIuayp+a6kOS9pOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzA5MjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyMzAwXCI6IFwi5qWa6ZuE5b2d5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjMwMVwiOiBcIualmumbhOW4glwiLFxuXHQgICAgXCI1MzIzMjJcIjogXCLlj4zmn4/ljr9cIixcblx0ICAgIFwiNTMyMzIzXCI6IFwi54mf5a6a5Y6/XCIsXG5cdCAgICBcIjUzMjMyNFwiOiBcIuWNl+WNjuWOv1wiLFxuXHQgICAgXCI1MzIzMjVcIjogXCLlp5rlronljr9cIixcblx0ICAgIFwiNTMyMzI2XCI6IFwi5aSn5aea5Y6/XCIsXG5cdCAgICBcIjUzMjMyN1wiOiBcIuawuOS7geWOv1wiLFxuXHQgICAgXCI1MzIzMjhcIjogXCLlhYPosIvljr9cIixcblx0ICAgIFwiNTMyMzI5XCI6IFwi5q2m5a6a5Y6/XCIsXG5cdCAgICBcIjUzMjMzMVwiOiBcIuemhOS4sOWOv1wiLFxuXHQgICAgXCI1MzIzMzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyNTAwXCI6IFwi57qi5rKz5ZOI5bC85peP5b2d5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjUwMVwiOiBcIuS4quaXp+W4glwiLFxuXHQgICAgXCI1MzI1MDJcIjogXCLlvIDov5zluIJcIixcblx0ICAgIFwiNTMyNTIyXCI6IFwi6JKZ6Ieq5biCXCIsXG5cdCAgICBcIjUzMjUyM1wiOiBcIuWxj+i+ueiLl+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzI1MjRcIjogXCLlu7rmsLTljr9cIixcblx0ICAgIFwiNTMyNTI1XCI6IFwi55+z5bGP5Y6/XCIsXG5cdCAgICBcIjUzMjUyNlwiOiBcIuW8peWLkuW4glwiLFxuXHQgICAgXCI1MzI1MjdcIjogXCLms7jopb/ljr9cIixcblx0ICAgIFwiNTMyNTI4XCI6IFwi5YWD6Ziz5Y6/XCIsXG5cdCAgICBcIjUzMjUyOVwiOiBcIue6ouays+WOv1wiLFxuXHQgICAgXCI1MzI1MzBcIjogXCLph5HlubPoi5fml4/nkbbml4/lgqPml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMyNTMxXCI6IFwi57u/5pil5Y6/XCIsXG5cdCAgICBcIjUzMjUzMlwiOiBcIuays+WPo+eRtuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzI1MzNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyNjAwXCI6IFwi5paH5bGx5aOu5peP6IuX5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjYyMVwiOiBcIuaWh+WxseW4glwiLFxuXHQgICAgXCI1MzI2MjJcIjogXCLnoJrlsbHljr9cIixcblx0ICAgIFwiNTMyNjIzXCI6IFwi6KW/55W05Y6/XCIsXG5cdCAgICBcIjUzMjYyNFwiOiBcIum6u+agl+WdoeWOv1wiLFxuXHQgICAgXCI1MzI2MjVcIjogXCLpqazlhbPljr9cIixcblx0ICAgIFwiNTMyNjI2XCI6IFwi5LiY5YyX5Y6/XCIsXG5cdCAgICBcIjUzMjYyN1wiOiBcIuW5v+WNl+WOv1wiLFxuXHQgICAgXCI1MzI2MjhcIjogXCLlr4zlroHljr9cIixcblx0ICAgIFwiNTMyNjI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjUzMjgwMFwiOiBcIuilv+WPjOeJiOe6s+WCo+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI1MzI4MDFcIjogXCLmma/mtKrluIJcIixcblx0ICAgIFwiNTMyODIyXCI6IFwi5YuQ5rW35Y6/XCIsXG5cdCAgICBcIjUzMjgyM1wiOiBcIuWLkOiFiuWOv1wiLFxuXHQgICAgXCI1MzI4MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMyOTAwXCI6IFwi5aSn55CG55m95peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMjkwMVwiOiBcIuWkp+eQhuW4glwiLFxuXHQgICAgXCI1MzI5MjJcIjogXCLmvL7mv57lvZ3ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNTMyOTIzXCI6IFwi56Wl5LqR5Y6/XCIsXG5cdCAgICBcIjUzMjkyNFwiOiBcIuWuvuW3neWOv1wiLFxuXHQgICAgXCI1MzI5MjVcIjogXCLlvKXmuKHljr9cIixcblx0ICAgIFwiNTMyOTI2XCI6IFwi5Y2X5ran5b2d5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMjkyN1wiOiBcIuW3jeWxseW9neaXj+WbnuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzI5MjhcIjogXCLmsLjlubPljr9cIixcblx0ICAgIFwiNTMyOTI5XCI6IFwi5LqR6b6Z5Y6/XCIsXG5cdCAgICBcIjUzMjkzMFwiOiBcIua0sea6kOWOv1wiLFxuXHQgICAgXCI1MzI5MzFcIjogXCLliZHlt53ljr9cIixcblx0ICAgIFwiNTMyOTMyXCI6IFwi6bmk5bqG5Y6/XCIsXG5cdCAgICBcIjUzMjkzM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1MzMxMDBcIjogXCLlvrflro/lgqPml4/mma/poofml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNTMzMTAyXCI6IFwi55Ge5Li95biCXCIsXG5cdCAgICBcIjUzMzEwM1wiOiBcIuiKkuW4glwiLFxuXHQgICAgXCI1MzMxMjJcIjogXCLmooHmsrPljr9cIixcblx0ICAgIFwiNTMzMTIzXCI6IFwi55uI5rGf5Y6/XCIsXG5cdCAgICBcIjUzMzEyNFwiOiBcIumZh+W3neWOv1wiLFxuXHQgICAgXCI1MzMxMjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMzMzAwXCI6IFwi5oCS5rGf5YKI5YOz5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMzMyMVwiOiBcIuazuOawtOWOv1wiLFxuXHQgICAgXCI1MzMzMjNcIjogXCLnpo/otKHljr9cIixcblx0ICAgIFwiNTMzMzI0XCI6IFwi6LSh5bGx54us6b6Z5peP5oCS5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMzMyNVwiOiBcIuWFsOWdqueZveaXj+aZruexs+aXj+iHquayu+WOv1wiLFxuXHQgICAgXCI1MzMzMjZcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTMzNDAwXCI6IFwi6L+q5bqG6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjUzMzQyMVwiOiBcIummmeagvOmHjOaLieWOv1wiLFxuXHQgICAgXCI1MzM0MjJcIjogXCLlvrfpkqbljr9cIixcblx0ICAgIFwiNTMzNDIzXCI6IFwi57u06KW/5YKI5YOz5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjUzMzQyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1NDAwMDBcIjogXCLopb/ol4/oh6rmsrvljLpcIixcblx0ICAgIFwiNTQwMTAwXCI6IFwi5ouJ6JCo5biCXCIsXG5cdCAgICBcIjU0MDEwMlwiOiBcIuWfjuWFs+WMulwiLFxuXHQgICAgXCI1NDAxMjFcIjogXCLmnpflkajljr9cIixcblx0ICAgIFwiNTQwMTIyXCI6IFwi5b2T6ZuE5Y6/XCIsXG5cdCAgICBcIjU0MDEyM1wiOiBcIuWwvOacqOWOv1wiLFxuXHQgICAgXCI1NDAxMjRcIjogXCLmm7LmsLTljr9cIixcblx0ICAgIFwiNTQwMTI1XCI6IFwi5aCG6b6Z5b635bqG5Y6/XCIsXG5cdCAgICBcIjU0MDEyNlwiOiBcIui+vuWtnOWOv1wiLFxuXHQgICAgXCI1NDAxMjdcIjogXCLloqjnq7nlt6XljaHljr9cIixcblx0ICAgIFwiNTQwMTI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjU0MjEwMFwiOiBcIuaYjOmDveWcsOWMulwiLFxuXHQgICAgXCI1NDIxMjFcIjogXCLmmIzpg73ljr9cIixcblx0ICAgIFwiNTQyMTIyXCI6IFwi5rGf6L6+5Y6/XCIsXG5cdCAgICBcIjU0MjEyM1wiOiBcIui0oeinieWOv1wiLFxuXHQgICAgXCI1NDIxMjRcIjogXCLnsbvkuYzpvZDljr9cIixcblx0ICAgIFwiNTQyMTI1XCI6IFwi5LiB6Z2S5Y6/XCIsXG5cdCAgICBcIjU0MjEyNlwiOiBcIuWvn+mbheWOv1wiLFxuXHQgICAgXCI1NDIxMjdcIjogXCLlhavlrr/ljr9cIixcblx0ICAgIFwiNTQyMTI4XCI6IFwi5bem6LSh5Y6/XCIsXG5cdCAgICBcIjU0MjEyOVwiOiBcIuiKkuW6t+WOv1wiLFxuXHQgICAgXCI1NDIxMzJcIjogXCLmtJvpmobljr9cIixcblx0ICAgIFwiNTQyMTMzXCI6IFwi6L655Z2d5Y6/XCIsXG5cdCAgICBcIjU0MjEzNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI1NDIyMDBcIjogXCLlsbHljZflnLDljLpcIixcblx0ICAgIFwiNTQyMjIxXCI6IFwi5LmD5Lic5Y6/XCIsXG5cdCAgICBcIjU0MjIyMlwiOiBcIuaJjuWbiuWOv1wiLFxuXHQgICAgXCI1NDIyMjNcIjogXCLotKHlmI7ljr9cIixcblx0ICAgIFwiNTQyMjI0XCI6IFwi5qGR5pel5Y6/XCIsXG5cdCAgICBcIjU0MjIyNVwiOiBcIueQvOe7k+WOv1wiLFxuXHQgICAgXCI1NDIyMjZcIjogXCLmm7Lmnb7ljr9cIixcblx0ICAgIFwiNTQyMjI3XCI6IFwi5o6q576O5Y6/XCIsXG5cdCAgICBcIjU0MjIyOFwiOiBcIua0m+aJjuWOv1wiLFxuXHQgICAgXCI1NDIyMjlcIjogXCLliqDmn6Xljr9cIixcblx0ICAgIFwiNTQyMjMxXCI6IFwi6ZqG5a2Q5Y6/XCIsXG5cdCAgICBcIjU0MjIzMlwiOiBcIumUmemCo+WOv1wiLFxuXHQgICAgXCI1NDIyMzNcIjogXCLmtarljaHlrZDljr9cIixcblx0ICAgIFwiNTQyMjM0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjU0MjMwMFwiOiBcIuaXpeWWgOWImeWcsOWMulwiLFxuXHQgICAgXCI1NDIzMDFcIjogXCLml6XlloDliJnluIJcIixcblx0ICAgIFwiNTQyMzIyXCI6IFwi5Y2X5pyo5p6X5Y6/XCIsXG5cdCAgICBcIjU0MjMyM1wiOiBcIuaxn+WtnOWOv1wiLFxuXHQgICAgXCI1NDIzMjRcIjogXCLlrprml6Xljr9cIixcblx0ICAgIFwiNTQyMzI1XCI6IFwi6JCo6L+m5Y6/XCIsXG5cdCAgICBcIjU0MjMyNlwiOiBcIuaLieWtnOWOv1wiLFxuXHQgICAgXCI1NDIzMjdcIjogXCLmmILku4Hljr9cIixcblx0ICAgIFwiNTQyMzI4XCI6IFwi6LCi6YCa6Zeo5Y6/XCIsXG5cdCAgICBcIjU0MjMyOVwiOiBcIueZveacl+WOv1wiLFxuXHQgICAgXCI1NDIzMzBcIjogXCLku4HluIPljr9cIixcblx0ICAgIFwiNTQyMzMxXCI6IFwi5bq36ams5Y6/XCIsXG5cdCAgICBcIjU0MjMzMlwiOiBcIuWumue7k+WOv1wiLFxuXHQgICAgXCI1NDIzMzNcIjogXCLku7Llt7Tljr9cIixcblx0ICAgIFwiNTQyMzM0XCI6IFwi5Lqa5Lic5Y6/XCIsXG5cdCAgICBcIjU0MjMzNVwiOiBcIuWQiemahuWOv1wiLFxuXHQgICAgXCI1NDIzMzZcIjogXCLogYLmi4nmnKjljr9cIixcblx0ICAgIFwiNTQyMzM3XCI6IFwi6JCo5ZiO5Y6/XCIsXG5cdCAgICBcIjU0MjMzOFwiOiBcIuWyl+W3tOWOv1wiLFxuXHQgICAgXCI1NDIzMzlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTQyNDAwXCI6IFwi6YKj5puy5Zyw5Yy6XCIsXG5cdCAgICBcIjU0MjQyMVwiOiBcIumCo+absuWOv1wiLFxuXHQgICAgXCI1NDI0MjJcIjogXCLlmInpu47ljr9cIixcblx0ICAgIFwiNTQyNDIzXCI6IFwi5q+U5aaC5Y6/XCIsXG5cdCAgICBcIjU0MjQyNFwiOiBcIuiBguiNo+WOv1wiLFxuXHQgICAgXCI1NDI0MjVcIjogXCLlronlpJrljr9cIixcblx0ICAgIFwiNTQyNDI2XCI6IFwi55Sz5omO5Y6/XCIsXG5cdCAgICBcIjU0MjQyN1wiOiBcIue0ouWOv1wiLFxuXHQgICAgXCI1NDI0MjhcIjogXCLnj63miIjljr9cIixcblx0ICAgIFwiNTQyNDI5XCI6IFwi5be06Z2S5Y6/XCIsXG5cdCAgICBcIjU0MjQzMFwiOiBcIuWwvOeOm+WOv1wiLFxuXHQgICAgXCI1NDI0MzFcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNTQyNDMyXCI6IFwi5Y+M5rmW5Y6/XCIsXG5cdCAgICBcIjU0MjUwMFwiOiBcIumYv+mHjOWcsOWMulwiLFxuXHQgICAgXCI1NDI1MjFcIjogXCLmma7lhbDljr9cIixcblx0ICAgIFwiNTQyNTIyXCI6IFwi5pyt6L6+5Y6/XCIsXG5cdCAgICBcIjU0MjUyM1wiOiBcIuWZtuWwlOWOv1wiLFxuXHQgICAgXCI1NDI1MjRcIjogXCLml6XlnJ/ljr9cIixcblx0ICAgIFwiNTQyNTI1XCI6IFwi6Z2p5ZCJ5Y6/XCIsXG5cdCAgICBcIjU0MjUyNlwiOiBcIuaUueWImeWOv1wiLFxuXHQgICAgXCI1NDI1MjdcIjogXCLmjqrli6Tljr9cIixcblx0ICAgIFwiNTQyNTI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjU0MjYwMFwiOiBcIuael+iKneWcsOWMulwiLFxuXHQgICAgXCI1NDI2MjFcIjogXCLmnpfoip3ljr9cIixcblx0ICAgIFwiNTQyNjIyXCI6IFwi5bel5biD5rGf6L6+5Y6/XCIsXG5cdCAgICBcIjU0MjYyM1wiOiBcIuexs+ael+WOv1wiLFxuXHQgICAgXCI1NDI2MjRcIjogXCLloqjohLHljr9cIixcblx0ICAgIFwiNTQyNjI1XCI6IFwi5rOi5a+G5Y6/XCIsXG5cdCAgICBcIjU0MjYyNlwiOiBcIuWvn+maheWOv1wiLFxuXHQgICAgXCI1NDI2MjdcIjogXCLmnJfljr9cIixcblx0ICAgIFwiNTQyNjI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYxMDAwMFwiOiBcIumZleilv+ecgVwiLFxuXHQgICAgXCI2MTAxMDBcIjogXCLopb/lronluIJcIixcblx0ICAgIFwiNjEwMTAyXCI6IFwi5paw5Z+O5Yy6XCIsXG5cdCAgICBcIjYxMDEwM1wiOiBcIueikeael+WMulwiLFxuXHQgICAgXCI2MTAxMDRcIjogXCLojrLmuZbljLpcIixcblx0ICAgIFwiNjEwMTExXCI6IFwi54Ge5qGl5Yy6XCIsXG5cdCAgICBcIjYxMDExMlwiOiBcIuacquWkruWMulwiLFxuXHQgICAgXCI2MTAxMTNcIjogXCLpm4HloZTljLpcIixcblx0ICAgIFwiNjEwMTE0XCI6IFwi6ZiO6Imv5Yy6XCIsXG5cdCAgICBcIjYxMDExNVwiOiBcIuS4tOa9vOWMulwiLFxuXHQgICAgXCI2MTAxMTZcIjogXCLplb/lronljLpcIixcblx0ICAgIFwiNjEwMTIyXCI6IFwi6JOd55Sw5Y6/XCIsXG5cdCAgICBcIjYxMDEyNFwiOiBcIuWRqOiHs+WOv1wiLFxuXHQgICAgXCI2MTAxMjVcIjogXCLmiLfljr9cIixcblx0ICAgIFwiNjEwMTI2XCI6IFwi6auY6Zm15Y6/XCIsXG5cdCAgICBcIjYxMDEyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MTAyMDBcIjogXCLpk5zlt53luIJcIixcblx0ICAgIFwiNjEwMjAyXCI6IFwi546L55uK5Yy6XCIsXG5cdCAgICBcIjYxMDIwM1wiOiBcIuWNsOWPsOWMulwiLFxuXHQgICAgXCI2MTAyMDRcIjogXCLogIDlt57ljLpcIixcblx0ICAgIFwiNjEwMjIyXCI6IFwi5a6c5ZCb5Y6/XCIsXG5cdCAgICBcIjYxMDIyM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MTAzMDBcIjogXCLlrp3puKHluIJcIixcblx0ICAgIFwiNjEwMzAyXCI6IFwi5rit5ruo5Yy6XCIsXG5cdCAgICBcIjYxMDMwM1wiOiBcIumHkeWPsOWMulwiLFxuXHQgICAgXCI2MTAzMDRcIjogXCLpmYjku5PljLpcIixcblx0ICAgIFwiNjEwMzIyXCI6IFwi5Yek57+U5Y6/XCIsXG5cdCAgICBcIjYxMDMyM1wiOiBcIuWykOWxseWOv1wiLFxuXHQgICAgXCI2MTAzMjRcIjogXCLmibbpo47ljr9cIixcblx0ICAgIFwiNjEwMzI2XCI6IFwi55yJ5Y6/XCIsXG5cdCAgICBcIjYxMDMyN1wiOiBcIumZh+WOv1wiLFxuXHQgICAgXCI2MTAzMjhcIjogXCLljYPpmLPljr9cIixcblx0ICAgIFwiNjEwMzI5XCI6IFwi6bqf5ri45Y6/XCIsXG5cdCAgICBcIjYxMDMzMFwiOiBcIuWHpOWOv1wiLFxuXHQgICAgXCI2MTAzMzFcIjogXCLlpKrnmb3ljr9cIixcblx0ICAgIFwiNjEwMzMyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYxMDQwMFwiOiBcIuWSuOmYs+W4glwiLFxuXHQgICAgXCI2MTA0MDJcIjogXCLnp6bpg73ljLpcIixcblx0ICAgIFwiNjEwNDAzXCI6IFwi5p2o6Zm15Yy6XCIsXG5cdCAgICBcIjYxMDQwNFwiOiBcIua4reWfjuWMulwiLFxuXHQgICAgXCI2MTA0MjJcIjogXCLkuInljp/ljr9cIixcblx0ICAgIFwiNjEwNDIzXCI6IFwi5rO+6Ziz5Y6/XCIsXG5cdCAgICBcIjYxMDQyNFwiOiBcIuS5vuWOv1wiLFxuXHQgICAgXCI2MTA0MjVcIjogXCLnpLzms4nljr9cIixcblx0ICAgIFwiNjEwNDI2XCI6IFwi5rC45a+/5Y6/XCIsXG5cdCAgICBcIjYxMDQyN1wiOiBcIuW9rOWOv1wiLFxuXHQgICAgXCI2MTA0MjhcIjogXCLplb/mrabljr9cIixcblx0ICAgIFwiNjEwNDI5XCI6IFwi5pes6YKR5Y6/XCIsXG5cdCAgICBcIjYxMDQzMFwiOiBcIua3s+WMluWOv1wiLFxuXHQgICAgXCI2MTA0MzFcIjogXCLmrablip/ljr9cIixcblx0ICAgIFwiNjEwNDgxXCI6IFwi5YW05bmz5biCXCIsXG5cdCAgICBcIjYxMDQ4MlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MTA1MDBcIjogXCLmuK3ljZfluIJcIixcblx0ICAgIFwiNjEwNTAyXCI6IFwi5Li05rit5Yy6XCIsXG5cdCAgICBcIjYxMDUyMVwiOiBcIuWNjuWOv1wiLFxuXHQgICAgXCI2MTA1MjJcIjogXCLmvbzlhbPljr9cIixcblx0ICAgIFwiNjEwNTIzXCI6IFwi5aSn6I2U5Y6/XCIsXG5cdCAgICBcIjYxMDUyNFwiOiBcIuWQiOmYs+WOv1wiLFxuXHQgICAgXCI2MTA1MjVcIjogXCLmvoTln47ljr9cIixcblx0ICAgIFwiNjEwNTI2XCI6IFwi6JKy5Z+O5Y6/XCIsXG5cdCAgICBcIjYxMDUyN1wiOiBcIueZveawtOWOv1wiLFxuXHQgICAgXCI2MTA1MjhcIjogXCLlr4zlubPljr9cIixcblx0ICAgIFwiNjEwNTgxXCI6IFwi6Z+p5Z+O5biCXCIsXG5cdCAgICBcIjYxMDU4MlwiOiBcIuWNjumYtOW4glwiLFxuXHQgICAgXCI2MTA1ODNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjEwNjAwXCI6IFwi5bu25a6J5biCXCIsXG5cdCAgICBcIjYxMDYwMlwiOiBcIuWuneWhlOWMulwiLFxuXHQgICAgXCI2MTA2MjFcIjogXCLlu7bplb/ljr9cIixcblx0ICAgIFwiNjEwNjIyXCI6IFwi5bu25bed5Y6/XCIsXG5cdCAgICBcIjYxMDYyM1wiOiBcIuWtkOmVv+WOv1wiLFxuXHQgICAgXCI2MTA2MjRcIjogXCLlronloZ7ljr9cIixcblx0ICAgIFwiNjEwNjI1XCI6IFwi5b+X5Li55Y6/XCIsXG5cdCAgICBcIjYxMDYyNlwiOiBcIuWQtOi1t+WOv1wiLFxuXHQgICAgXCI2MTA2MjdcIjogXCLnlJjms4nljr9cIixcblx0ICAgIFwiNjEwNjI4XCI6IFwi5a+M5Y6/XCIsXG5cdCAgICBcIjYxMDYyOVwiOiBcIua0m+W3neWOv1wiLFxuXHQgICAgXCI2MTA2MzBcIjogXCLlrpzlt53ljr9cIixcblx0ICAgIFwiNjEwNjMxXCI6IFwi6buE6b6Z5Y6/XCIsXG5cdCAgICBcIjYxMDYzMlwiOiBcIum7hOmZteWOv1wiLFxuXHQgICAgXCI2MTA2MzNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjEwNzAwXCI6IFwi5rGJ5Lit5biCXCIsXG5cdCAgICBcIjYxMDcwMlwiOiBcIuaxieWPsOWMulwiLFxuXHQgICAgXCI2MTA3MjFcIjogXCLljZfpg5Hljr9cIixcblx0ICAgIFwiNjEwNzIyXCI6IFwi5Z+O5Zu65Y6/XCIsXG5cdCAgICBcIjYxMDcyM1wiOiBcIua0i+WOv1wiLFxuXHQgICAgXCI2MTA3MjRcIjogXCLopb/kuaHljr9cIixcblx0ICAgIFwiNjEwNzI1XCI6IFwi5YuJ5Y6/XCIsXG5cdCAgICBcIjYxMDcyNlwiOiBcIuWugeW8uuWOv1wiLFxuXHQgICAgXCI2MTA3MjdcIjogXCLnlaXpmLPljr9cIixcblx0ICAgIFwiNjEwNzI4XCI6IFwi6ZWH5be05Y6/XCIsXG5cdCAgICBcIjYxMDcyOVwiOiBcIueVmeWdneWOv1wiLFxuXHQgICAgXCI2MTA3MzBcIjogXCLkvZvlnarljr9cIixcblx0ICAgIFwiNjEwNzMxXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYxMDgwMFwiOiBcIuamhuael+W4glwiLFxuXHQgICAgXCI2MTA4MDJcIjogXCLmpobpmLPljLpcIixcblx0ICAgIFwiNjEwODIxXCI6IFwi56We5pyo5Y6/XCIsXG5cdCAgICBcIjYxMDgyMlwiOiBcIuW6nOiwt+WOv1wiLFxuXHQgICAgXCI2MTA4MjNcIjogXCLmqKrlsbHljr9cIixcblx0ICAgIFwiNjEwODI0XCI6IFwi6Z2W6L655Y6/XCIsXG5cdCAgICBcIjYxMDgyNVwiOiBcIuWumui+ueWOv1wiLFxuXHQgICAgXCI2MTA4MjZcIjogXCLnu6Xlvrfljr9cIixcblx0ICAgIFwiNjEwODI3XCI6IFwi57Gz6ISC5Y6/XCIsXG5cdCAgICBcIjYxMDgyOFwiOiBcIuS9s+WOv1wiLFxuXHQgICAgXCI2MTA4MjlcIjogXCLlkLTloKHljr9cIixcblx0ICAgIFwiNjEwODMwXCI6IFwi5riF5ran5Y6/XCIsXG5cdCAgICBcIjYxMDgzMVwiOiBcIuWtkOa0suWOv1wiLFxuXHQgICAgXCI2MTA4MzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjEwOTAwXCI6IFwi5a6J5bq35biCXCIsXG5cdCAgICBcIjYxMDkwMlwiOiBcIuaxiea7qOWMulwiLFxuXHQgICAgXCI2MTA5MjFcIjogXCLmsYnpmLTljr9cIixcblx0ICAgIFwiNjEwOTIyXCI6IFwi55+z5rOJ5Y6/XCIsXG5cdCAgICBcIjYxMDkyM1wiOiBcIuWugemZleWOv1wiLFxuXHQgICAgXCI2MTA5MjRcIjogXCLntKvpmLPljr9cIixcblx0ICAgIFwiNjEwOTI1XCI6IFwi5bKa55qL5Y6/XCIsXG5cdCAgICBcIjYxMDkyNlwiOiBcIuW5s+WIqeWOv1wiLFxuXHQgICAgXCI2MTA5MjdcIjogXCLplYflnarljr9cIixcblx0ICAgIFwiNjEwOTI4XCI6IFwi5pes6Ziz5Y6/XCIsXG5cdCAgICBcIjYxMDkyOVwiOiBcIueZveays+WOv1wiLFxuXHQgICAgXCI2MTA5MzBcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjExMDAwXCI6IFwi5ZWG5rSb5biCXCIsXG5cdCAgICBcIjYxMTAwMlwiOiBcIuWVhuW3nuWMulwiLFxuXHQgICAgXCI2MTEwMjFcIjogXCLmtJvljZfljr9cIixcblx0ICAgIFwiNjExMDIyXCI6IFwi5Li55Yek5Y6/XCIsXG5cdCAgICBcIjYxMTAyM1wiOiBcIuWVhuWNl+WOv1wiLFxuXHQgICAgXCI2MTEwMjRcIjogXCLlsbHpmLPljr9cIixcblx0ICAgIFwiNjExMDI1XCI6IFwi6ZWH5a6J5Y6/XCIsXG5cdCAgICBcIjYxMTAyNlwiOiBcIuafnuawtOWOv1wiLFxuXHQgICAgXCI2MTEwMjdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjIwMDAwXCI6IFwi55SY6IKD55yBXCIsXG5cdCAgICBcIjYyMDEwMFwiOiBcIuWFsOW3nuW4glwiLFxuXHQgICAgXCI2MjAxMDJcIjogXCLln47lhbPljLpcIixcblx0ICAgIFwiNjIwMTAzXCI6IFwi5LiD6YeM5rKz5Yy6XCIsXG5cdCAgICBcIjYyMDEwNFwiOiBcIuilv+WbuuWMulwiLFxuXHQgICAgXCI2MjAxMDVcIjogXCLlronlroHljLpcIixcblx0ICAgIFwiNjIwMTExXCI6IFwi57qi5Y+k5Yy6XCIsXG5cdCAgICBcIjYyMDEyMVwiOiBcIuawuOeZu+WOv1wiLFxuXHQgICAgXCI2MjAxMjJcIjogXCLnmovlhbDljr9cIixcblx0ICAgIFwiNjIwMTIzXCI6IFwi5qaG5Lit5Y6/XCIsXG5cdCAgICBcIjYyMDEyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjAyMDBcIjogXCLlmInls6rlhbPluIJcIixcblx0ICAgIFwiNjIwMzAwXCI6IFwi6YeR5piM5biCXCIsXG5cdCAgICBcIjYyMDMwMlwiOiBcIumHkeW3neWMulwiLFxuXHQgICAgXCI2MjAzMjFcIjogXCLmsLjmmIzljr9cIixcblx0ICAgIFwiNjIwMzIyXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMDQwMFwiOiBcIueZvemTtuW4glwiLFxuXHQgICAgXCI2MjA0MDJcIjogXCLnmb3pk7bljLpcIixcblx0ICAgIFwiNjIwNDAzXCI6IFwi5bmz5bed5Yy6XCIsXG5cdCAgICBcIjYyMDQyMVwiOiBcIumdlui/nOWOv1wiLFxuXHQgICAgXCI2MjA0MjJcIjogXCLkvJrlroHljr9cIixcblx0ICAgIFwiNjIwNDIzXCI6IFwi5pmv5rOw5Y6/XCIsXG5cdCAgICBcIjYyMDQyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjA1MDBcIjogXCLlpKnmsLTluIJcIixcblx0ICAgIFwiNjIwNTAyXCI6IFwi56em5bee5Yy6XCIsXG5cdCAgICBcIjYyMDUwM1wiOiBcIum6puenr+WMulwiLFxuXHQgICAgXCI2MjA1MjFcIjogXCLmuIXmsLTljr9cIixcblx0ICAgIFwiNjIwNTIyXCI6IFwi56em5a6J5Y6/XCIsXG5cdCAgICBcIjYyMDUyM1wiOiBcIueUmOiwt+WOv1wiLFxuXHQgICAgXCI2MjA1MjRcIjogXCLmrablsbHljr9cIixcblx0ICAgIFwiNjIwNTI1XCI6IFwi5byg5a625bed5Zue5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMDUyNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjA2MDBcIjogXCLmrablqIHluIJcIixcblx0ICAgIFwiNjIwNjAyXCI6IFwi5YeJ5bee5Yy6XCIsXG5cdCAgICBcIjYyMDYyMVwiOiBcIuawkeWLpOWOv1wiLFxuXHQgICAgXCI2MjA2MjJcIjogXCLlj6Tmtarljr9cIixcblx0ICAgIFwiNjIwNjIzXCI6IFwi5aSp56Wd6JeP5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMDYyNFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjA3MDBcIjogXCLlvKDmjpbluIJcIixcblx0ICAgIFwiNjIwNzAyXCI6IFwi55SY5bee5Yy6XCIsXG5cdCAgICBcIjYyMDcyMVwiOiBcIuiCg+WNl+ijleWbuuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MjA3MjJcIjogXCLmsJHkuZDljr9cIixcblx0ICAgIFwiNjIwNzIzXCI6IFwi5Li05rO95Y6/XCIsXG5cdCAgICBcIjYyMDcyNFwiOiBcIumrmOWPsOWOv1wiLFxuXHQgICAgXCI2MjA3MjVcIjogXCLlsbHkuLnljr9cIixcblx0ICAgIFwiNjIwNzI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMDgwMFwiOiBcIuW5s+WHieW4glwiLFxuXHQgICAgXCI2MjA4MDJcIjogXCLltIbls5LljLpcIixcblx0ICAgIFwiNjIwODIxXCI6IFwi5rO+5bed5Y6/XCIsXG5cdCAgICBcIjYyMDgyMlwiOiBcIueBteWPsOWOv1wiLFxuXHQgICAgXCI2MjA4MjNcIjogXCLltIfkv6Hljr9cIixcblx0ICAgIFwiNjIwODI0XCI6IFwi5Y2O5Lqt5Y6/XCIsXG5cdCAgICBcIjYyMDgyNVwiOiBcIuW6hOa1quWOv1wiLFxuXHQgICAgXCI2MjA4MjZcIjogXCLpnZnlroHljr9cIixcblx0ICAgIFwiNjIwODI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMDkwMFwiOiBcIumFkuazieW4glwiLFxuXHQgICAgXCI2MjA5MDJcIjogXCLogoPlt57ljLpcIixcblx0ICAgIFwiNjIwOTIxXCI6IFwi6YeR5aGU5Y6/XCIsXG5cdCAgICBcIjYyMDkyMlwiOiBcIueTnOW3nuWOv1wiLFxuXHQgICAgXCI2MjA5MjNcIjogXCLogoPljJfokpnlj6Tml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNjIwOTI0XCI6IFwi6Zi/5YWL5aGe5ZOI6JCo5YWL5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMDk4MVwiOiBcIueOiemXqOW4glwiLFxuXHQgICAgXCI2MjA5ODJcIjogXCLmlabnhYzluIJcIixcblx0ICAgIFwiNjIwOTgzXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMTAwMFwiOiBcIuW6humYs+W4glwiLFxuXHQgICAgXCI2MjEwMDJcIjogXCLopb/ls7DljLpcIixcblx0ICAgIFwiNjIxMDIxXCI6IFwi5bqG5Z+O5Y6/XCIsXG5cdCAgICBcIjYyMTAyMlwiOiBcIueOr+WOv1wiLFxuXHQgICAgXCI2MjEwMjNcIjogXCLljY7msaDljr9cIixcblx0ICAgIFwiNjIxMDI0XCI6IFwi5ZCI5rC05Y6/XCIsXG5cdCAgICBcIjYyMTAyNVwiOiBcIuato+WugeWOv1wiLFxuXHQgICAgXCI2MjEwMjZcIjogXCLlroHljr9cIixcblx0ICAgIFwiNjIxMDI3XCI6IFwi6ZWH5Y6f5Y6/XCIsXG5cdCAgICBcIjYyMTAyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjExMDBcIjogXCLlrpropb/luIJcIixcblx0ICAgIFwiNjIxMTAyXCI6IFwi5a6J5a6a5Yy6XCIsXG5cdCAgICBcIjYyMTEyMVwiOiBcIumAmua4reWOv1wiLFxuXHQgICAgXCI2MjExMjJcIjogXCLpmYfopb/ljr9cIixcblx0ICAgIFwiNjIxMTIzXCI6IFwi5rit5rqQ5Y6/XCIsXG5cdCAgICBcIjYyMTEyNFwiOiBcIuS4tOa0ruWOv1wiLFxuXHQgICAgXCI2MjExMjVcIjogXCLmvLPljr9cIixcblx0ICAgIFwiNjIxMTI2XCI6IFwi5bK35Y6/XCIsXG5cdCAgICBcIjYyMTEyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjEyMDBcIjogXCLpmYfljZfluIJcIixcblx0ICAgIFwiNjIxMjAyXCI6IFwi5q2m6YO95Yy6XCIsXG5cdCAgICBcIjYyMTIyMVwiOiBcIuaIkOWOv1wiLFxuXHQgICAgXCI2MjEyMjJcIjogXCLmlofljr9cIixcblx0ICAgIFwiNjIxMjIzXCI6IFwi5a6V5piM5Y6/XCIsXG5cdCAgICBcIjYyMTIyNFwiOiBcIuW6t+WOv1wiLFxuXHQgICAgXCI2MjEyMjVcIjogXCLopb/lkozljr9cIixcblx0ICAgIFwiNjIxMjI2XCI6IFwi56S85Y6/XCIsXG5cdCAgICBcIjYyMTIyN1wiOiBcIuW+veWOv1wiLFxuXHQgICAgXCI2MjEyMjhcIjogXCLkuKTlvZPljr9cIixcblx0ICAgIFwiNjIxMjI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYyMjkwMFwiOiBcIuS4tOWkj+WbnuaXj+iHquayu+W3nlwiLFxuXHQgICAgXCI2MjI5MDFcIjogXCLkuLTlpI/luIJcIixcblx0ICAgIFwiNjIyOTIxXCI6IFwi5Li05aSP5Y6/XCIsXG5cdCAgICBcIjYyMjkyMlwiOiBcIuW6t+S5kOWOv1wiLFxuXHQgICAgXCI2MjI5MjNcIjogXCLmsLjpnZbljr9cIixcblx0ICAgIFwiNjIyOTI0XCI6IFwi5bm/5rKz5Y6/XCIsXG5cdCAgICBcIjYyMjkyNVwiOiBcIuWSjOaUv+WOv1wiLFxuXHQgICAgXCI2MjI5MjZcIjogXCLkuJzkuaHml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNjIyOTI3XCI6IFwi56ev55+z5bGx5L+d5a6J5peP5Lic5Lmh5peP5pKS5ouJ5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYyMjkyOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MjMwMDBcIjogXCLnlJjljZfol4/ml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNjIzMDAxXCI6IFwi5ZCI5L2c5biCXCIsXG5cdCAgICBcIjYyMzAyMVwiOiBcIuS4tOa9reWOv1wiLFxuXHQgICAgXCI2MjMwMjJcIjogXCLljZPlsLzljr9cIixcblx0ICAgIFwiNjIzMDIzXCI6IFwi6Iif5puy5Y6/XCIsXG5cdCAgICBcIjYyMzAyNFwiOiBcIui/remDqOWOv1wiLFxuXHQgICAgXCI2MjMwMjVcIjogXCLnjpvmm7Lljr9cIixcblx0ICAgIFwiNjIzMDI2XCI6IFwi56KM5puy5Y6/XCIsXG5cdCAgICBcIjYyMzAyN1wiOiBcIuWkj+ays+WOv1wiLFxuXHQgICAgXCI2MjMwMjhcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMwMDAwXCI6IFwi6Z2S5rW355yBXCIsXG5cdCAgICBcIjYzMDEwMFwiOiBcIuilv+WugeW4glwiLFxuXHQgICAgXCI2MzAxMDJcIjogXCLln47kuJzljLpcIixcblx0ICAgIFwiNjMwMTAzXCI6IFwi5Z+O5Lit5Yy6XCIsXG5cdCAgICBcIjYzMDEwNFwiOiBcIuWfjuilv+WMulwiLFxuXHQgICAgXCI2MzAxMDVcIjogXCLln47ljJfljLpcIixcblx0ICAgIFwiNjMwMTIxXCI6IFwi5aSn6YCa5Zue5peP5Zyf5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYzMDEyMlwiOiBcIua5n+S4reWOv1wiLFxuXHQgICAgXCI2MzAxMjNcIjogXCLmuZ/mupDljr9cIixcblx0ICAgIFwiNjMwMTI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYzMjEwMFwiOiBcIua1t+S4nOW4glwiLFxuXHQgICAgXCI2MzIxMjFcIjogXCLlubPlronljr9cIixcblx0ICAgIFwiNjMyMTIyXCI6IFwi5rCR5ZKM5Zue5peP5Zyf5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYzMjEyM1wiOiBcIuS5kOmDveWMulwiLFxuXHQgICAgXCI2MzIxMjZcIjogXCLkupLliqnlnJ/ml4/oh6rmsrvljr9cIixcblx0ICAgIFwiNjMyMTI3XCI6IFwi5YyW6ZqG5Zue5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjYzMjEyOFwiOiBcIuW+quWMluaSkuaLieaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MzIxMjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyMjAwXCI6IFwi5rW35YyX6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjIyMVwiOiBcIumXqOa6kOWbnuaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MzIyMjJcIjogXCLnpYHov57ljr9cIixcblx0ICAgIFwiNjMyMjIzXCI6IFwi5rW35pmP5Y6/XCIsXG5cdCAgICBcIjYzMjIyNFwiOiBcIuWImuWvn+WOv1wiLFxuXHQgICAgXCI2MzIyMjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyMzAwXCI6IFwi6buE5Y2X6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjMyMVwiOiBcIuWQjOS7geWOv1wiLFxuXHQgICAgXCI2MzIzMjJcIjogXCLlsJbmiY7ljr9cIixcblx0ICAgIFwiNjMyMzIzXCI6IFwi5rO95bqT5Y6/XCIsXG5cdCAgICBcIjYzMjMyNFwiOiBcIuays+WNl+iSmeWPpOaXj+iHquayu+WOv1wiLFxuXHQgICAgXCI2MzIzMjVcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyNTAwXCI6IFwi5rW35Y2X6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjUyMVwiOiBcIuWFseWSjOWOv1wiLFxuXHQgICAgXCI2MzI1MjJcIjogXCLlkIzlvrfljr9cIixcblx0ICAgIFwiNjMyNTIzXCI6IFwi6LS15b635Y6/XCIsXG5cdCAgICBcIjYzMjUyNFwiOiBcIuWFtOa1t+WOv1wiLFxuXHQgICAgXCI2MzI1MjVcIjogXCLotLXljZfljr9cIixcblx0ICAgIFwiNjMyNTI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjYzMjYwMFwiOiBcIuaenOa0m+iXj+aXj+iHquayu+W3nlwiLFxuXHQgICAgXCI2MzI2MjFcIjogXCLnjpvmsoHljr9cIixcblx0ICAgIFwiNjMyNjIyXCI6IFwi54+t546b5Y6/XCIsXG5cdCAgICBcIjYzMjYyM1wiOiBcIueUmOW+t+WOv1wiLFxuXHQgICAgXCI2MzI2MjRcIjogXCLovr7ml6Xljr9cIixcblx0ICAgIFwiNjMyNjI1XCI6IFwi5LmF5rK75Y6/XCIsXG5cdCAgICBcIjYzMjYyNlwiOiBcIueOm+WkmuWOv1wiLFxuXHQgICAgXCI2MzI2MjdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjMyNzAwXCI6IFwi546J5qCR6JeP5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjYzMjcyMVwiOiBcIueOieagkeW4glwiLFxuXHQgICAgXCI2MzI3MjJcIjogXCLmnYLlpJrljr9cIixcblx0ICAgIFwiNjMyNzIzXCI6IFwi56ew5aSa5Y6/XCIsXG5cdCAgICBcIjYzMjcyNFwiOiBcIuayu+WkmuWOv1wiLFxuXHQgICAgXCI2MzI3MjVcIjogXCLlm4rosKbljr9cIixcblx0ICAgIFwiNjMyNzI2XCI6IFwi5puy6bq76I6x5Y6/XCIsXG5cdCAgICBcIjYzMjcyN1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2MzI4MDBcIjogXCLmtbfopb/okpnlj6Tml4/ol4/ml4/oh6rmsrvlt55cIixcblx0ICAgIFwiNjMyODAxXCI6IFwi5qC85bCU5pyo5biCXCIsXG5cdCAgICBcIjYzMjgwMlwiOiBcIuW+t+S7pOWTiOW4glwiLFxuXHQgICAgXCI2MzI4MjFcIjogXCLkuYzlhbDljr9cIixcblx0ICAgIFwiNjMyODIyXCI6IFwi6YO95YWw5Y6/XCIsXG5cdCAgICBcIjYzMjgyM1wiOiBcIuWkqeWzu+WOv1wiLFxuXHQgICAgXCI2MzI4MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjQwMDAwXCI6IFwi5a6B5aSP5Zue5peP6Ieq5rK75Yy6XCIsXG5cdCAgICBcIjY0MDEwMFwiOiBcIumTtuW3neW4glwiLFxuXHQgICAgXCI2NDAxMDRcIjogXCLlhbTluobljLpcIixcblx0ICAgIFwiNjQwMTA1XCI6IFwi6KW/5aSP5Yy6XCIsXG5cdCAgICBcIjY0MDEwNlwiOiBcIumHkeWHpOWMulwiLFxuXHQgICAgXCI2NDAxMjFcIjogXCLmsLjlroHljr9cIixcblx0ICAgIFwiNjQwMTIyXCI6IFwi6LS65YWw5Y6/XCIsXG5cdCAgICBcIjY0MDE4MVwiOiBcIueBteatpuW4glwiLFxuXHQgICAgXCI2NDAxODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjQwMjAwXCI6IFwi55+z5Zi05bGx5biCXCIsXG5cdCAgICBcIjY0MDIwMlwiOiBcIuWkp+atpuWPo+WMulwiLFxuXHQgICAgXCI2NDAyMDVcIjogXCLmg6DlhpzljLpcIixcblx0ICAgIFwiNjQwMjIxXCI6IFwi5bmz572X5Y6/XCIsXG5cdCAgICBcIjY0MDIyMlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NDAzMDBcIjogXCLlkLTlv6DluIJcIixcblx0ICAgIFwiNjQwMzAyXCI6IFwi5Yip6YCa5Yy6XCIsXG5cdCAgICBcIjY0MDMwM1wiOiBcIue6ouWvuuWgoeWMulwiLFxuXHQgICAgXCI2NDAzMjNcIjogXCLnm5DmsaDljr9cIixcblx0ICAgIFwiNjQwMzI0XCI6IFwi5ZCM5b+D5Y6/XCIsXG5cdCAgICBcIjY0MDM4MVwiOiBcIumdkumTnOWzoeW4glwiLFxuXHQgICAgXCI2NDAzODJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjQwNDAwXCI6IFwi5Zu65Y6f5biCXCIsXG5cdCAgICBcIjY0MDQwMlwiOiBcIuWOn+W3nuWMulwiLFxuXHQgICAgXCI2NDA0MjJcIjogXCLopb/lkInljr9cIixcblx0ICAgIFwiNjQwNDIzXCI6IFwi6ZqG5b635Y6/XCIsXG5cdCAgICBcIjY0MDQyNFwiOiBcIuazvua6kOWOv1wiLFxuXHQgICAgXCI2NDA0MjVcIjogXCLlva3pmLPljr9cIixcblx0ICAgIFwiNjQwNDI2XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY0MDUwMFwiOiBcIuS4reWNq+W4glwiLFxuXHQgICAgXCI2NDA1MDJcIjogXCLmspnlnaHlpLTljLpcIixcblx0ICAgIFwiNjQwNTIxXCI6IFwi5Lit5a6B5Y6/XCIsXG5cdCAgICBcIjY0MDUyMlwiOiBcIua1t+WOn+WOv1wiLFxuXHQgICAgXCI2NDA1MjNcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUwMDAwXCI6IFwi5paw55aG57u05ZC+5bCU6Ieq5rK75Yy6XCIsXG5cdCAgICBcIjY1MDEwMFwiOiBcIuS5jOmygeacqOm9kOW4glwiLFxuXHQgICAgXCI2NTAxMDJcIjogXCLlpKnlsbHljLpcIixcblx0ICAgIFwiNjUwMTAzXCI6IFwi5rKZ5L6d5be05YWL5Yy6XCIsXG5cdCAgICBcIjY1MDEwNFwiOiBcIuaWsOW4guWMulwiLFxuXHQgICAgXCI2NTAxMDVcIjogXCLmsLTno6jmsp/ljLpcIixcblx0ICAgIFwiNjUwMTA2XCI6IFwi5aS05bGv5rKz5Yy6XCIsXG5cdCAgICBcIjY1MDEwN1wiOiBcIui+vuWdguWfjuWMulwiLFxuXHQgICAgXCI2NTAxMDlcIjogXCLnsbPkuJzljLpcIixcblx0ICAgIFwiNjUwMTIxXCI6IFwi5LmM6bKB5pyo6b2Q5Y6/XCIsXG5cdCAgICBcIjY1MDEyMlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NTAyMDBcIjogXCLlhYvmi4nnjpvkvp3luIJcIixcblx0ICAgIFwiNjUwMjAyXCI6IFwi54us5bGx5a2Q5Yy6XCIsXG5cdCAgICBcIjY1MDIwM1wiOiBcIuWFi+aLieeOm+S+neWMulwiLFxuXHQgICAgXCI2NTAyMDRcIjogXCLnmb3norHmu6nljLpcIixcblx0ICAgIFwiNjUwMjA1XCI6IFwi5LmM5bCU56a+5Yy6XCIsXG5cdCAgICBcIjY1MDIwNlwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NTIxMDBcIjogXCLlkJDpsoHnlarlnLDljLpcIixcblx0ICAgIFwiNjUyMTAxXCI6IFwi5ZCQ6bKB55Wq5biCXCIsXG5cdCAgICBcIjY1MjEyMlwiOiBcIumEr+WWhOWOv1wiLFxuXHQgICAgXCI2NTIxMjNcIjogXCLmiZjlhYvpgIrljr9cIixcblx0ICAgIFwiNjUyMTI0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1MjIwMFwiOiBcIuWTiOWvhuWcsOWMulwiLFxuXHQgICAgXCI2NTIyMDFcIjogXCLlk4jlr4bluIJcIixcblx0ICAgIFwiNjUyMjIyXCI6IFwi5be06YeM5Z2k5ZOI6JCo5YWL6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjY1MjIyM1wiOiBcIuS8iuWQvuWOv1wiLFxuXHQgICAgXCI2NTIyMjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUyMzAwXCI6IFwi5piM5ZCJ5Zue5peP6Ieq5rK75beeXCIsXG5cdCAgICBcIjY1MjMwMVwiOiBcIuaYjOWQieW4glwiLFxuXHQgICAgXCI2NTIzMDJcIjogXCLpmJzlurfluIJcIixcblx0ICAgIFwiNjUyMzIzXCI6IFwi5ZG85Zu+5aOB5Y6/XCIsXG5cdCAgICBcIjY1MjMyNFwiOiBcIueOm+e6s+aWr+WOv1wiLFxuXHQgICAgXCI2NTIzMjVcIjogXCLlpYflj7Dljr9cIixcblx0ICAgIFwiNjUyMzI3XCI6IFwi5ZCJ5pyo6JCo5bCU5Y6/XCIsXG5cdCAgICBcIjY1MjMyOFwiOiBcIuacqOWekuWTiOiQqOWFi+iHquayu+WOv1wiLFxuXHQgICAgXCI2NTIzMjlcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUyNzAwXCI6IFwi5Y2a5bCU5aGU5ouJ6JKZ5Y+k6Ieq5rK75beeXCIsXG5cdCAgICBcIjY1MjcwMVwiOiBcIuWNmuS5kOW4glwiLFxuXHQgICAgXCI2NTI3MDJcIjogXCLpmL/mi4nlsbHlj6PluIJcIixcblx0ICAgIFwiNjUyNzIyXCI6IFwi57K+5rKz5Y6/XCIsXG5cdCAgICBcIjY1MjcyM1wiOiBcIua4qeazieWOv1wiLFxuXHQgICAgXCI2NTI3MjRcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUyODAwXCI6IFwi5be06Z+z6YOt5qWe6JKZ5Y+k6Ieq5rK75beeXCIsXG5cdCAgICBcIjY1MjgwMVwiOiBcIuW6k+WwlOWLkuW4glwiLFxuXHQgICAgXCI2NTI4MjJcIjogXCLova7lj7Dljr9cIixcblx0ICAgIFwiNjUyODIzXCI6IFwi5bCJ54qB5Y6/XCIsXG5cdCAgICBcIjY1MjgyNFwiOiBcIuiLpee+jOWOv1wiLFxuXHQgICAgXCI2NTI4MjVcIjogXCLkuJTmnKvljr9cIixcblx0ICAgIFwiNjUyODI2XCI6IFwi54SJ6ICG5Zue5peP6Ieq5rK75Y6/XCIsXG5cdCAgICBcIjY1MjgyN1wiOiBcIuWSjOmdmeWOv1wiLFxuXHQgICAgXCI2NTI4MjhcIjogXCLlkoznoZXljr9cIixcblx0ICAgIFwiNjUyODI5XCI6IFwi5Y2a5rmW5Y6/XCIsXG5cdCAgICBcIjY1MjgzMFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI2NTI5MDBcIjogXCLpmL/lhYvoi4/lnLDljLpcIixcblx0ICAgIFwiNjUyOTAxXCI6IFwi6Zi/5YWL6IuP5biCXCIsXG5cdCAgICBcIjY1MjkyMlwiOiBcIua4qeWuv+WOv1wiLFxuXHQgICAgXCI2NTI5MjNcIjogXCLlupPovabljr9cIixcblx0ICAgIFwiNjUyOTI0XCI6IFwi5rKZ6ZuF5Y6/XCIsXG5cdCAgICBcIjY1MjkyNVwiOiBcIuaWsOWSjOWOv1wiLFxuXHQgICAgXCI2NTI5MjZcIjogXCLmi5zln47ljr9cIixcblx0ICAgIFwiNjUyOTI3XCI6IFwi5LmM5LuA5Y6/XCIsXG5cdCAgICBcIjY1MjkyOFwiOiBcIumYv+eTpuaPkOWOv1wiLFxuXHQgICAgXCI2NTI5MjlcIjogXCLmn6/lnarljr9cIixcblx0ICAgIFwiNjUyOTMwXCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1MzAwMFwiOiBcIuWFi+WtnOWLkuiLj+afr+WwlOWFi+WtnOiHquayu+W3nlwiLFxuXHQgICAgXCI2NTMwMDFcIjogXCLpmL/lm77ku4DluIJcIixcblx0ICAgIFwiNjUzMDIyXCI6IFwi6Zi/5YWL6Zm25Y6/XCIsXG5cdCAgICBcIjY1MzAyM1wiOiBcIumYv+WQiOWlh+WOv1wiLFxuXHQgICAgXCI2NTMwMjRcIjogXCLkuYzmgbDljr9cIixcblx0ICAgIFwiNjUzMDI1XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1MzEwMFwiOiBcIuWWgOS7gOWcsOWMulwiLFxuXHQgICAgXCI2NTMxMDFcIjogXCLlloDku4DluIJcIixcblx0ICAgIFwiNjUzMTIxXCI6IFwi55aP6ZmE5Y6/XCIsXG5cdCAgICBcIjY1MzEyMlwiOiBcIueWj+WLkuWOv1wiLFxuXHQgICAgXCI2NTMxMjNcIjogXCLoi7HlkInmspnljr9cIixcblx0ICAgIFwiNjUzMTI0XCI6IFwi5rO95pmu5Y6/XCIsXG5cdCAgICBcIjY1MzEyNVwiOiBcIuiOjui9puWOv1wiLFxuXHQgICAgXCI2NTMxMjZcIjogXCLlj7bln47ljr9cIixcblx0ICAgIFwiNjUzMTI3XCI6IFwi6bqm55uW5o+Q5Y6/XCIsXG5cdCAgICBcIjY1MzEyOFwiOiBcIuWys+aZrua5luWOv1wiLFxuXHQgICAgXCI2NTMxMjlcIjogXCLkvL3luIjljr9cIixcblx0ICAgIFwiNjUzMTMwXCI6IFwi5be05qWa5Y6/XCIsXG5cdCAgICBcIjY1MzEzMVwiOiBcIuWhlOS7gOW6k+WwlOW5suWhlOWQieWFi+iHquayu+WOv1wiLFxuXHQgICAgXCI2NTMxMzJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNjUzMjAwXCI6IFwi5ZKM55Sw5Zyw5Yy6XCIsXG5cdCAgICBcIjY1MzIwMVwiOiBcIuWSjOeUsOW4glwiLFxuXHQgICAgXCI2NTMyMjFcIjogXCLlkoznlLDljr9cIixcblx0ICAgIFwiNjUzMjIyXCI6IFwi5aKo546J5Y6/XCIsXG5cdCAgICBcIjY1MzIyM1wiOiBcIuearuWxseWOv1wiLFxuXHQgICAgXCI2NTMyMjRcIjogXCLmtJvmtabljr9cIixcblx0ICAgIFwiNjUzMjI1XCI6IFwi562W5YuS5Y6/XCIsXG5cdCAgICBcIjY1MzIyNlwiOiBcIuS6jueUsOWOv1wiLFxuXHQgICAgXCI2NTMyMjdcIjogXCLmsJHkuLDljr9cIixcblx0ICAgIFwiNjUzMjI4XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1NDAwMFwiOiBcIuS8iueKgeWTiOiQqOWFi+iHquayu+W3nlwiLFxuXHQgICAgXCI2NTQwMDJcIjogXCLkvIrlroHluIJcIixcblx0ICAgIFwiNjU0MDAzXCI6IFwi5aWO5bGv5biCXCIsXG5cdCAgICBcIjY1NDAyMVwiOiBcIuS8iuWugeWOv1wiLFxuXHQgICAgXCI2NTQwMjJcIjogXCLlr5/luIPmn6XlsJTplKHkvK/oh6rmsrvljr9cIixcblx0ICAgIFwiNjU0MDIzXCI6IFwi6ZyN5Z+O5Y6/XCIsXG5cdCAgICBcIjY1NDAyNFwiOiBcIuW3qeeVmeWOv1wiLFxuXHQgICAgXCI2NTQwMjVcIjogXCLmlrDmupDljr9cIixcblx0ICAgIFwiNjU0MDI2XCI6IFwi5pit6IuP5Y6/XCIsXG5cdCAgICBcIjY1NDAyN1wiOiBcIueJueWFi+aWr+WOv1wiLFxuXHQgICAgXCI2NTQwMjhcIjogXCLlsLzli5LlhYvljr9cIixcblx0ICAgIFwiNjU0MDI5XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1NDIwMFwiOiBcIuWhlOWfjuWcsOWMulwiLFxuXHQgICAgXCI2NTQyMDFcIjogXCLloZTln47luIJcIixcblx0ICAgIFwiNjU0MjAyXCI6IFwi5LmM6IuP5biCXCIsXG5cdCAgICBcIjY1NDIyMVwiOiBcIumineaVj+WOv1wiLFxuXHQgICAgXCI2NTQyMjNcIjogXCLmspnmub7ljr9cIixcblx0ICAgIFwiNjU0MjI0XCI6IFwi5omY6YeM5Y6/XCIsXG5cdCAgICBcIjY1NDIyNVwiOiBcIuijleawkeWOv1wiLFxuXHQgICAgXCI2NTQyMjZcIjogXCLlkozluIPlhYvotZvlsJTokpnlj6Toh6rmsrvljr9cIixcblx0ICAgIFwiNjU0MjI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1NDMwMFwiOiBcIumYv+WLkuazsOWcsOWMulwiLFxuXHQgICAgXCI2NTQzMDFcIjogXCLpmL/li5Lms7DluIJcIixcblx0ICAgIFwiNjU0MzIxXCI6IFwi5biD5bCU5rSl5Y6/XCIsXG5cdCAgICBcIjY1NDMyMlwiOiBcIuWvjOiVtOWOv1wiLFxuXHQgICAgXCI2NTQzMjNcIjogXCLnpo/mtbfljr9cIixcblx0ICAgIFwiNjU0MzI0XCI6IFwi5ZOI5be05rKz5Y6/XCIsXG5cdCAgICBcIjY1NDMyNVwiOiBcIumdkuays+WOv1wiLFxuXHQgICAgXCI2NTQzMjZcIjogXCLlkInmnKjkuYPljr9cIixcblx0ICAgIFwiNjU0MzI3XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjY1OTAwMVwiOiBcIuefs+ays+WtkOW4glwiLFxuXHQgICAgXCI2NTkwMDJcIjogXCLpmL/mi4nlsJTluIJcIixcblx0ICAgIFwiNjU5MDAzXCI6IFwi5Zu+5pyo6IiS5YWL5biCXCIsXG5cdCAgICBcIjY1OTAwNFwiOiBcIuS6lOWutua4oOW4glwiLFxuXHQgICAgXCI3MTAwMDBcIjogXCLlj7Dmub5cIixcblx0ICAgIFwiNzEwMTAwXCI6IFwi5Y+w5YyX5biCXCIsXG5cdCAgICBcIjcxMDEwMVwiOiBcIuS4reato+WMulwiLFxuXHQgICAgXCI3MTAxMDJcIjogXCLlpKflkIzljLpcIixcblx0ICAgIFwiNzEwMTAzXCI6IFwi5Lit5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDEwNFwiOiBcIuadvuWxseWMulwiLFxuXHQgICAgXCI3MTAxMDVcIjogXCLlpKflronljLpcIixcblx0ICAgIFwiNzEwMTA2XCI6IFwi5LiH5Y2O5Yy6XCIsXG5cdCAgICBcIjcxMDEwN1wiOiBcIuS/oeS5ieWMulwiLFxuXHQgICAgXCI3MTAxMDhcIjogXCLlo6vmnpfljLpcIixcblx0ICAgIFwiNzEwMTA5XCI6IFwi5YyX5oqV5Yy6XCIsXG5cdCAgICBcIjcxMDExMFwiOiBcIuWGhea5luWMulwiLFxuXHQgICAgXCI3MTAxMTFcIjogXCLljZfmuK/ljLpcIixcblx0ICAgIFwiNzEwMTEyXCI6IFwi5paH5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDExM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTAyMDBcIjogXCLpq5jpm4TluIJcIixcblx0ICAgIFwiNzEwMjAxXCI6IFwi5paw5YW05Yy6XCIsXG5cdCAgICBcIjcxMDIwMlwiOiBcIuWJjemHkeWMulwiLFxuXHQgICAgXCI3MTAyMDNcIjogXCLoiqnpm4XljLpcIixcblx0ICAgIFwiNzEwMjA0XCI6IFwi55uQ5Z+V5Yy6XCIsXG5cdCAgICBcIjcxMDIwNVwiOiBcIum8k+WxseWMulwiLFxuXHQgICAgXCI3MTAyMDZcIjogXCLml5fmtKXljLpcIixcblx0ICAgIFwiNzEwMjA3XCI6IFwi5YmN6ZWH5Yy6XCIsXG5cdCAgICBcIjcxMDIwOFwiOiBcIuS4ieawkeWMulwiLFxuXHQgICAgXCI3MTAyMDlcIjogXCLlt6bokKXljLpcIixcblx0ICAgIFwiNzEwMjEwXCI6IFwi5qWg5qKT5Yy6XCIsXG5cdCAgICBcIjcxMDIxMVwiOiBcIuWwj+a4r+WMulwiLFxuXHQgICAgXCI3MTAyMTJcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNzEwMjQxXCI6IFwi6IuT6ZuF5Yy6XCIsXG5cdCAgICBcIjcxMDI0MlwiOiBcIuS7geatpuWMulwiLFxuXHQgICAgXCI3MTAyNDNcIjogXCLlpKfnpL7ljLpcIixcblx0ICAgIFwiNzEwMjQ0XCI6IFwi5YaI5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDI0NVwiOiBcIui3r+erueWMulwiLFxuXHQgICAgXCI3MTAyNDZcIjogXCLpmL/ojrLljLpcIixcblx0ICAgIFwiNzEwMjQ3XCI6IFwi55Sw5a+u5Yy6XCIsXG5cdCAgICBcIjcxMDI0OFwiOiBcIueHleW3ouWMulwiLFxuXHQgICAgXCI3MTAyNDlcIjogXCLmoaXlpLTljLpcIixcblx0ICAgIFwiNzEwMjUwXCI6IFwi5qKT5a6Y5Yy6XCIsXG5cdCAgICBcIjcxMDI1MVwiOiBcIuW8pemZgOWMulwiLFxuXHQgICAgXCI3MTAyNTJcIjogXCLmsLjlronljLpcIixcblx0ICAgIFwiNzEwMjUzXCI6IFwi5rmW5YaF5Yy6XCIsXG5cdCAgICBcIjcxMDI1NFwiOiBcIuWHpOWxseWMulwiLFxuXHQgICAgXCI3MTAyNTVcIjogXCLlpKflr67ljLpcIixcblx0ICAgIFwiNzEwMjU2XCI6IFwi5p6X5Zut5Yy6XCIsXG5cdCAgICBcIjcxMDI1N1wiOiBcIum4n+advuWMulwiLFxuXHQgICAgXCI3MTAyNThcIjogXCLlpKfmoJHljLpcIixcblx0ICAgIFwiNzEwMjU5XCI6IFwi5peX5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDI2MFwiOiBcIue+jua1k+WMulwiLFxuXHQgICAgXCI3MTAyNjFcIjogXCLlha3pvp/ljLpcIixcblx0ICAgIFwiNzEwMjYyXCI6IFwi5YaF6Zeo5Yy6XCIsXG5cdCAgICBcIjcxMDI2M1wiOiBcIuadieael+WMulwiLFxuXHQgICAgXCI3MTAyNjRcIjogXCLnlLLku5nljLpcIixcblx0ICAgIFwiNzEwMjY1XCI6IFwi5qGD5rqQ5Yy6XCIsXG5cdCAgICBcIjcxMDI2NlwiOiBcIumCo+eOm+Wkj+WMulwiLFxuXHQgICAgXCI3MTAyNjdcIjogXCLojILmnpfljLpcIixcblx0ICAgIFwiNzEwMjY4XCI6IFwi6IyE6JCj5Yy6XCIsXG5cdCAgICBcIjcxMDMwMFwiOiBcIuWPsOWNl+W4glwiLFxuXHQgICAgXCI3MTAzMDFcIjogXCLkuK3opb/ljLpcIixcblx0ICAgIFwiNzEwMzAyXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjcxMDMwM1wiOiBcIuWNl+WMulwiLFxuXHQgICAgXCI3MTAzMDRcIjogXCLljJfljLpcIixcblx0ICAgIFwiNzEwMzA1XCI6IFwi5a6J5bmz5Yy6XCIsXG5cdCAgICBcIjcxMDMwNlwiOiBcIuWuieWNl+WMulwiLFxuXHQgICAgXCI3MTAzMDdcIjogXCLlhbblroPljLpcIixcblx0ICAgIFwiNzEwMzM5XCI6IFwi5rC45bq35Yy6XCIsXG5cdCAgICBcIjcxMDM0MFwiOiBcIuW9kuS7geWMulwiLFxuXHQgICAgXCI3MTAzNDFcIjogXCLmlrDljJbljLpcIixcblx0ICAgIFwiNzEwMzQyXCI6IFwi5bem6ZWH5Yy6XCIsXG5cdCAgICBcIjcxMDM0M1wiOiBcIueOieS6leWMulwiLFxuXHQgICAgXCI3MTAzNDRcIjogXCLmpaDopb/ljLpcIixcblx0ICAgIFwiNzEwMzQ1XCI6IFwi5Y2X5YyW5Yy6XCIsXG5cdCAgICBcIjcxMDM0NlwiOiBcIuS7geW+t+WMulwiLFxuXHQgICAgXCI3MTAzNDdcIjogXCLlhbPlupnljLpcIixcblx0ICAgIFwiNzEwMzQ4XCI6IFwi6b6Z5bSO5Yy6XCIsXG5cdCAgICBcIjcxMDM0OVwiOiBcIuWumOeUsOWMulwiLFxuXHQgICAgXCI3MTAzNTBcIjogXCLpurvosYbljLpcIixcblx0ICAgIFwiNzEwMzUxXCI6IFwi5L2z6YeM5Yy6XCIsXG5cdCAgICBcIjcxMDM1MlwiOiBcIuilv+a4r+WMulwiLFxuXHQgICAgXCI3MTAzNTNcIjogXCLkuIPogqHljLpcIixcblx0ICAgIFwiNzEwMzU0XCI6IFwi5bCG5Yab5Yy6XCIsXG5cdCAgICBcIjcxMDM1NVwiOiBcIuWtpueUsuWMulwiLFxuXHQgICAgXCI3MTAzNTZcIjogXCLljJfpl6jljLpcIixcblx0ICAgIFwiNzEwMzU3XCI6IFwi5paw6JCl5Yy6XCIsXG5cdCAgICBcIjcxMDM1OFwiOiBcIuWQjuWjgeWMulwiLFxuXHQgICAgXCI3MTAzNTlcIjogXCLnmb3msrPljLpcIixcblx0ICAgIFwiNzEwMzYwXCI6IFwi5Lic5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDM2MVwiOiBcIuWFreeUsuWMulwiLFxuXHQgICAgXCI3MTAzNjJcIjogXCLkuIvokKXljLpcIixcblx0ICAgIFwiNzEwMzYzXCI6IFwi5p+z6JCl5Yy6XCIsXG5cdCAgICBcIjcxMDM2NFwiOiBcIuebkOawtOWMulwiLFxuXHQgICAgXCI3MTAzNjVcIjogXCLlloTljJbljLpcIixcblx0ICAgIFwiNzEwMzY2XCI6IFwi5aSn5YaF5Yy6XCIsXG5cdCAgICBcIjcxMDM2N1wiOiBcIuWxseS4iuWMulwiLFxuXHQgICAgXCI3MTAzNjhcIjogXCLmlrDluILljLpcIixcblx0ICAgIFwiNzEwMzY5XCI6IFwi5a6J5a6a5Yy6XCIsXG5cdCAgICBcIjcxMDQwMFwiOiBcIuWPsOS4reW4glwiLFxuXHQgICAgXCI3MTA0MDFcIjogXCLkuK3ljLpcIixcblx0ICAgIFwiNzEwNDAyXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjcxMDQwM1wiOiBcIuWNl+WMulwiLFxuXHQgICAgXCI3MTA0MDRcIjogXCLopb/ljLpcIixcblx0ICAgIFwiNzEwNDA1XCI6IFwi5YyX5Yy6XCIsXG5cdCAgICBcIjcxMDQwNlwiOiBcIuWMl+Wxr+WMulwiLFxuXHQgICAgXCI3MTA0MDdcIjogXCLopb/lsa/ljLpcIixcblx0ICAgIFwiNzEwNDA4XCI6IFwi5Y2X5bGv5Yy6XCIsXG5cdCAgICBcIjcxMDQwOVwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTA0MzFcIjogXCLlpKrlubPljLpcIixcblx0ICAgIFwiNzEwNDMyXCI6IFwi5aSn6YeM5Yy6XCIsXG5cdCAgICBcIjcxMDQzM1wiOiBcIumbvuWzsOWMulwiLFxuXHQgICAgXCI3MTA0MzRcIjogXCLkuYzml6XljLpcIixcblx0ICAgIFwiNzEwNDM1XCI6IFwi5Liw5Y6f5Yy6XCIsXG5cdCAgICBcIjcxMDQzNlwiOiBcIuWQjumHjOWMulwiLFxuXHQgICAgXCI3MTA0MzdcIjogXCLnn7PlhojljLpcIixcblx0ICAgIFwiNzEwNDM4XCI6IFwi5Lic5Yq/5Yy6XCIsXG5cdCAgICBcIjcxMDQzOVwiOiBcIuWSjOW5s+WMulwiLFxuXHQgICAgXCI3MTA0NDBcIjogXCLmlrDnpL7ljLpcIixcblx0ICAgIFwiNzEwNDQxXCI6IFwi5r2t5a2Q5Yy6XCIsXG5cdCAgICBcIjcxMDQ0MlwiOiBcIuWkp+mbheWMulwiLFxuXHQgICAgXCI3MTA0NDNcIjogXCLnpZ7lhojljLpcIixcblx0ICAgIFwiNzEwNDQ0XCI6IFwi5aSn6IKa5Yy6XCIsXG5cdCAgICBcIjcxMDQ0NVwiOiBcIuaymem5v+WMulwiLFxuXHQgICAgXCI3MTA0NDZcIjogXCLpvpnkupXljLpcIixcblx0ICAgIFwiNzEwNDQ3XCI6IFwi5qKn5qCW5Yy6XCIsXG5cdCAgICBcIjcxMDQ0OFwiOiBcIua4heawtOWMulwiLFxuXHQgICAgXCI3MTA0NDlcIjogXCLlpKfnlLLljLpcIixcblx0ICAgIFwiNzEwNDUwXCI6IFwi5aSW5Z+U5Yy6XCIsXG5cdCAgICBcIjcxMDQ1MVwiOiBcIuWkp+WuieWMulwiLFxuXHQgICAgXCI3MTA1MDBcIjogXCLph5Hpl6jljr9cIixcblx0ICAgIFwiNzEwNTA3XCI6IFwi6YeR5rKZ6ZWHXCIsXG5cdCAgICBcIjcxMDUwOFwiOiBcIumHkea5lumVh1wiLFxuXHQgICAgXCI3MTA1MDlcIjogXCLph5HlroHkuaFcIixcblx0ICAgIFwiNzEwNTEwXCI6IFwi6YeR5Z+O6ZWHXCIsXG5cdCAgICBcIjcxMDUxMVwiOiBcIueDiOWxv+S5oVwiLFxuXHQgICAgXCI3MTA1MTJcIjogXCLkuYzlnbXkuaFcIixcblx0ICAgIFwiNzEwNjAwXCI6IFwi5Y2X5oqV5Y6/XCIsXG5cdCAgICBcIjcxMDYxNFwiOiBcIuWNl+aKleW4glwiLFxuXHQgICAgXCI3MTA2MTVcIjogXCLkuK3lr67kuaFcIixcblx0ICAgIFwiNzEwNjE2XCI6IFwi6I2J5bGv6ZWHXCIsXG5cdCAgICBcIjcxMDYxN1wiOiBcIuWbveWnk+S5oVwiLFxuXHQgICAgXCI3MTA2MThcIjogXCLln5Tph4zplYdcIixcblx0ICAgIFwiNzEwNjE5XCI6IFwi5LuB54ix5LmhXCIsXG5cdCAgICBcIjcxMDYyMFwiOiBcIuWQjemXtOS5oVwiLFxuXHQgICAgXCI3MTA2MjFcIjogXCLpm4bpm4bplYdcIixcblx0ICAgIFwiNzEwNjIyXCI6IFwi5rC06YeM5LmhXCIsXG5cdCAgICBcIjcxMDYyM1wiOiBcIumxvOaxoOS5oVwiLFxuXHQgICAgXCI3MTA2MjRcIjogXCLkv6HkuYnkuaFcIixcblx0ICAgIFwiNzEwNjI1XCI6IFwi56u55bGx6ZWHXCIsXG5cdCAgICBcIjcxMDYyNlwiOiBcIum5v+iwt+S5oVwiLFxuXHQgICAgXCI3MTA3MDBcIjogXCLln7rpmobluIJcIixcblx0ICAgIFwiNzEwNzAxXCI6IFwi5LuB54ix5Yy6XCIsXG5cdCAgICBcIjcxMDcwMlwiOiBcIuS/oeS5ieWMulwiLFxuXHQgICAgXCI3MTA3MDNcIjogXCLkuK3mraPljLpcIixcblx0ICAgIFwiNzEwNzA0XCI6IFwi5Lit5bGx5Yy6XCIsXG5cdCAgICBcIjcxMDcwNVwiOiBcIuWuieS5kOWMulwiLFxuXHQgICAgXCI3MTA3MDZcIjogXCLmmpbmmpbljLpcIixcblx0ICAgIFwiNzEwNzA3XCI6IFwi5LiD5aC15Yy6XCIsXG5cdCAgICBcIjcxMDcwOFwiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTA4MDBcIjogXCLmlrDnq7nluIJcIixcblx0ICAgIFwiNzEwODAxXCI6IFwi5Lic5Yy6XCIsXG5cdCAgICBcIjcxMDgwMlwiOiBcIuWMl+WMulwiLFxuXHQgICAgXCI3MTA4MDNcIjogXCLpppnlsbHljLpcIixcblx0ICAgIFwiNzEwODA0XCI6IFwi5YW25a6D5Yy6XCIsXG5cdCAgICBcIjcxMDkwMFwiOiBcIuWYieS5ieW4glwiLFxuXHQgICAgXCI3MTA5MDFcIjogXCLkuJzljLpcIixcblx0ICAgIFwiNzEwOTAyXCI6IFwi6KW/5Yy6XCIsXG5cdCAgICBcIjcxMDkwM1wiOiBcIuWFtuWug+WMulwiLFxuXHQgICAgXCI3MTExMDBcIjogXCLmlrDljJfluIJcIixcblx0ICAgIFwiNzExMTMwXCI6IFwi5LiH6YeM5Yy6XCIsXG5cdCAgICBcIjcxMTEzMVwiOiBcIumHkeWxseWMulwiLFxuXHQgICAgXCI3MTExMzJcIjogXCLmnb/moaXljLpcIixcblx0ICAgIFwiNzExMTMzXCI6IFwi5rGQ5q2i5Yy6XCIsXG5cdCAgICBcIjcxMTEzNFwiOiBcIua3seWdkeWMulwiLFxuXHQgICAgXCI3MTExMzVcIjogXCLnn7PnoofljLpcIixcblx0ICAgIFwiNzExMTM2XCI6IFwi55Ge6Iqz5Yy6XCIsXG5cdCAgICBcIjcxMTEzN1wiOiBcIuW5s+a6quWMulwiLFxuXHQgICAgXCI3MTExMzhcIjogXCLlj4zmuqrljLpcIixcblx0ICAgIFwiNzExMTM5XCI6IFwi6LSh5a+u5Yy6XCIsXG5cdCAgICBcIjcxMTE0MFwiOiBcIuaWsOW6l+WMulwiLFxuXHQgICAgXCI3MTExNDFcIjogXCLlnarmnpfljLpcIixcblx0ICAgIFwiNzExMTQyXCI6IFwi5LmM5p2l5Yy6XCIsXG5cdCAgICBcIjcxMTE0M1wiOiBcIuawuOWSjOWMulwiLFxuXHQgICAgXCI3MTExNDRcIjogXCLkuK3lkozljLpcIixcblx0ICAgIFwiNzExMTQ1XCI6IFwi5Zyf5Z+O5Yy6XCIsXG5cdCAgICBcIjcxMTE0NlwiOiBcIuS4ieWzoeWMulwiLFxuXHQgICAgXCI3MTExNDdcIjogXCLmoJHmnpfljLpcIixcblx0ICAgIFwiNzExMTQ4XCI6IFwi6I665q2M5Yy6XCIsXG5cdCAgICBcIjcxMTE0OVwiOiBcIuS4iemHjeWMulwiLFxuXHQgICAgXCI3MTExNTBcIjogXCLmlrDluoTljLpcIixcblx0ICAgIFwiNzExMTUxXCI6IFwi5rOw5bGx5Yy6XCIsXG5cdCAgICBcIjcxMTE1MlwiOiBcIuael+WPo+WMulwiLFxuXHQgICAgXCI3MTExNTNcIjogXCLoiqbmtLLljLpcIixcblx0ICAgIFwiNzExMTU0XCI6IFwi5LqU6IKh5Yy6XCIsXG5cdCAgICBcIjcxMTE1NVwiOiBcIuWFq+mHjOWMulwiLFxuXHQgICAgXCI3MTExNTZcIjogXCLmt6HmsLTljLpcIixcblx0ICAgIFwiNzExMTU3XCI6IFwi5LiJ6Iqd5Yy6XCIsXG5cdCAgICBcIjcxMTE1OFwiOiBcIuefs+mXqOWMulwiLFxuXHQgICAgXCI3MTEyMDBcIjogXCLlrpzlhbDljr9cIixcblx0ICAgIFwiNzExMjE0XCI6IFwi5a6c5YWw5biCXCIsXG5cdCAgICBcIjcxMTIxNVwiOiBcIuWktOWfjumVh1wiLFxuXHQgICAgXCI3MTEyMTZcIjogXCLnpIHmuqrkuaFcIixcblx0ICAgIFwiNzExMjE3XCI6IFwi5aOu5Zu05LmhXCIsXG5cdCAgICBcIjcxMTIxOFwiOiBcIuWRmOWxseS5oVwiLFxuXHQgICAgXCI3MTEyMTlcIjogXCLnvZfkuJzplYdcIixcblx0ICAgIFwiNzExMjIwXCI6IFwi5LiJ5pif5LmhXCIsXG5cdCAgICBcIjcxMTIyMVwiOiBcIuWkp+WQjOS5oVwiLFxuXHQgICAgXCI3MTEyMjJcIjogXCLkupTnu5PkuaFcIixcblx0ICAgIFwiNzExMjIzXCI6IFwi5Yas5bGx5LmhXCIsXG5cdCAgICBcIjcxMTIyNFwiOiBcIuiLj+a+s+mVh1wiLFxuXHQgICAgXCI3MTEyMjVcIjogXCLljZfmvrPkuaFcIixcblx0ICAgIFwiNzExMjI2XCI6IFwi6ZKT6bG85Y+wXCIsXG5cdCAgICBcIjcxMTMwMFwiOiBcIuaWsOerueWOv1wiLFxuXHQgICAgXCI3MTEzMTRcIjogXCLnq7nljJfluIJcIixcblx0ICAgIFwiNzExMzE1XCI6IFwi5rmW5Y+j5LmhXCIsXG5cdCAgICBcIjcxMTMxNlwiOiBcIuaWsOS4sOS5oVwiLFxuXHQgICAgXCI3MTEzMTdcIjogXCLmlrDln5TplYdcIixcblx0ICAgIFwiNzExMzE4XCI6IFwi5YWz6KW/6ZWHXCIsXG5cdCAgICBcIjcxMTMxOVwiOiBcIuiKjuael+S5oVwiLFxuXHQgICAgXCI3MTEzMjBcIjogXCLlrp3lsbHkuaFcIixcblx0ICAgIFwiNzExMzIxXCI6IFwi56u55Lic6ZWHXCIsXG5cdCAgICBcIjcxMTMyMlwiOiBcIuS6lOWzsOS5oVwiLFxuXHQgICAgXCI3MTEzMjNcIjogXCLmqKrlsbHkuaFcIixcblx0ICAgIFwiNzExMzI0XCI6IFwi5bCW55+z5LmhXCIsXG5cdCAgICBcIjcxMTMyNVwiOiBcIuWMl+WflOS5oVwiLFxuXHQgICAgXCI3MTEzMjZcIjogXCLls6jnnInkuaFcIixcblx0ICAgIFwiNzExNDAwXCI6IFwi5qGD5Zut5Y6/XCIsXG5cdCAgICBcIjcxMTQxNFwiOiBcIuS4reWdnOW4glwiLFxuXHQgICAgXCI3MTE0MTVcIjogXCLlubPplYfluIJcIixcblx0ICAgIFwiNzExNDE2XCI6IFwi6b6Z5r2t5LmhXCIsXG5cdCAgICBcIjcxMTQxN1wiOiBcIuadqOaiheW4glwiLFxuXHQgICAgXCI3MTE0MThcIjogXCLmlrDlsYvkuaFcIixcblx0ICAgIFwiNzExNDE5XCI6IFwi6KeC6Z+z5LmhXCIsXG5cdCAgICBcIjcxMTQyMFwiOiBcIuahg+WbreW4glwiLFxuXHQgICAgXCI3MTE0MjFcIjogXCLpvp/lsbHkuaFcIixcblx0ICAgIFwiNzExNDIyXCI6IFwi5YWr5b635biCXCIsXG5cdCAgICBcIjcxMTQyM1wiOiBcIuWkp+a6qumVh1wiLFxuXHQgICAgXCI3MTE0MjRcIjogXCLlpI3lhbTkuaFcIixcblx0ICAgIFwiNzExNDI1XCI6IFwi5aSn5Zut5LmhXCIsXG5cdCAgICBcIjcxMTQyNlwiOiBcIuiKpuerueS5oVwiLFxuXHQgICAgXCI3MTE1MDBcIjogXCLoi5fmoJfljr9cIixcblx0ICAgIFwiNzExNTE5XCI6IFwi56u55Y2X6ZWHXCIsXG5cdCAgICBcIjcxMTUyMFwiOiBcIuWktOS7vemVh1wiLFxuXHQgICAgXCI3MTE1MjFcIjogXCLkuInmub7kuaFcIixcblx0ICAgIFwiNzExNTIyXCI6IFwi5Y2X5bqE5LmhXCIsXG5cdCAgICBcIjcxMTUyM1wiOiBcIueLrua9reS5oVwiLFxuXHQgICAgXCI3MTE1MjRcIjogXCLlkI7pvpnplYdcIixcblx0ICAgIFwiNzExNTI1XCI6IFwi6YCa6ZyE6ZWHXCIsXG5cdCAgICBcIjcxMTUyNlwiOiBcIuiLkemHjOmVh1wiLFxuXHQgICAgXCI3MTE1MjdcIjogXCLoi5fmoJfluIJcIixcblx0ICAgIFwiNzExNTI4XCI6IFwi6YCg5qGl5LmhXCIsXG5cdCAgICBcIjcxMTUyOVwiOiBcIuWktOWxi+S5oVwiLFxuXHQgICAgXCI3MTE1MzBcIjogXCLlhazppobkuaFcIixcblx0ICAgIFwiNzExNTMxXCI6IFwi5aSn5rmW5LmhXCIsXG5cdCAgICBcIjcxMTUzMlwiOiBcIuazsOWuieS5oVwiLFxuXHQgICAgXCI3MTE1MzNcIjogXCLpk5zplKPkuaFcIixcblx0ICAgIFwiNzExNTM0XCI6IFwi5LiJ5LmJ5LmhXCIsXG5cdCAgICBcIjcxMTUzNVwiOiBcIuilv+a5luS5oVwiLFxuXHQgICAgXCI3MTE1MzZcIjogXCLljZPlhbDplYdcIixcblx0ICAgIFwiNzExNzAwXCI6IFwi5b2w5YyW5Y6/XCIsXG5cdCAgICBcIjcxMTcyN1wiOiBcIuW9sOWMluW4glwiLFxuXHQgICAgXCI3MTE3MjhcIjogXCLoiqzlm63kuaFcIixcblx0ICAgIFwiNzExNzI5XCI6IFwi6Iqx5Z2b5LmhXCIsXG5cdCAgICBcIjcxMTczMFwiOiBcIuengOawtOS5oVwiLFxuXHQgICAgXCI3MTE3MzFcIjogXCLpub/muK/plYdcIixcblx0ICAgIFwiNzExNzMyXCI6IFwi56aP5YW05LmhXCIsXG5cdCAgICBcIjcxMTczM1wiOiBcIue6v+ilv+S5oVwiLFxuXHQgICAgXCI3MTE3MzRcIjogXCLlkoznvo7plYdcIixcblx0ICAgIFwiNzExNzM1XCI6IFwi5Ly45riv5LmhXCIsXG5cdCAgICBcIjcxMTczNlwiOiBcIuWRmOael+mVh1wiLFxuXHQgICAgXCI3MTE3MzdcIjogXCLnpL7lpLTkuaFcIixcblx0ICAgIFwiNzExNzM4XCI6IFwi5rC46Z2W5LmhXCIsXG5cdCAgICBcIjcxMTczOVwiOiBcIuWflOW/g+S5oVwiLFxuXHQgICAgXCI3MTE3NDBcIjogXCLmuqrmuZbplYdcIixcblx0ICAgIFwiNzExNzQxXCI6IFwi5aSn5p2R5LmhXCIsXG5cdCAgICBcIjcxMTc0MlwiOiBcIuWflOebkOS5oVwiLFxuXHQgICAgXCI3MTE3NDNcIjogXCLnlLDkuK3plYdcIixcblx0ICAgIFwiNzExNzQ0XCI6IFwi5YyX5paX6ZWHXCIsXG5cdCAgICBcIjcxMTc0NVwiOiBcIueUsOWwvuS5oVwiLFxuXHQgICAgXCI3MTE3NDZcIjogXCLln6TlpLTkuaFcIixcblx0ICAgIFwiNzExNzQ3XCI6IFwi5rqq5bee5LmhXCIsXG5cdCAgICBcIjcxMTc0OFwiOiBcIuerueWhmOS5oVwiLFxuXHQgICAgXCI3MTE3NDlcIjogXCLkuozmnpfplYdcIixcblx0ICAgIFwiNzExNzUwXCI6IFwi5aSn5Z+O5LmhXCIsXG5cdCAgICBcIjcxMTc1MVwiOiBcIuiKs+iLkeS5oVwiLFxuXHQgICAgXCI3MTE3NTJcIjogXCLkuozmsLTkuaFcIixcblx0ICAgIFwiNzExOTAwXCI6IFwi5ZiJ5LmJ5Y6/XCIsXG5cdCAgICBcIjcxMTkxOVwiOiBcIueVqui3r+S5oVwiLFxuXHQgICAgXCI3MTE5MjBcIjogXCLmooXlsbHkuaFcIixcblx0ICAgIFwiNzExOTIxXCI6IFwi56u55bSO5LmhXCIsXG5cdCAgICBcIjcxMTkyMlwiOiBcIumYv+mHjOWxseS5oVwiLFxuXHQgICAgXCI3MTE5MjNcIjogXCLkuK3ln5TkuaFcIixcblx0ICAgIFwiNzExOTI0XCI6IFwi5aSn5Z+U5LmhXCIsXG5cdCAgICBcIjcxMTkyNVwiOiBcIuawtOS4iuS5oVwiLFxuXHQgICAgXCI3MTE5MjZcIjogXCLpub/ojYnkuaFcIixcblx0ICAgIFwiNzExOTI3XCI6IFwi5aSq5L+d5biCXCIsXG5cdCAgICBcIjcxMTkyOFwiOiBcIuactOWtkOW4glwiLFxuXHQgICAgXCI3MTE5MjlcIjogXCLkuJznn7PkuaFcIixcblx0ICAgIFwiNzExOTMwXCI6IFwi5YWt6ISa5LmhXCIsXG5cdCAgICBcIjcxMTkzMVwiOiBcIuaWsOa4r+S5oVwiLFxuXHQgICAgXCI3MTE5MzJcIjogXCLmsJHpm4TkuaFcIixcblx0ICAgIFwiNzExOTMzXCI6IFwi5aSn5p6X6ZWHXCIsXG5cdCAgICBcIjcxMTkzNFwiOiBcIua6quWPo+S5oVwiLFxuXHQgICAgXCI3MTE5MzVcIjogXCLkuYnnq7nkuaFcIixcblx0ICAgIFwiNzExOTM2XCI6IFwi5biD6KKL6ZWHXCIsXG5cdCAgICBcIjcxMjEwMFwiOiBcIuS6keael+WOv1wiLFxuXHQgICAgXCI3MTIxMjFcIjogXCLmlpfljZfplYdcIixcblx0ICAgIFwiNzEyMTIyXCI6IFwi5aSn5Z+k5LmhXCIsXG5cdCAgICBcIjcxMjEyM1wiOiBcIuiZjuWwvumVh1wiLFxuXHQgICAgXCI3MTIxMjRcIjogXCLlnJ/lupPplYdcIixcblx0ICAgIFwiNzEyMTI1XCI6IFwi6KSS5b+g5LmhXCIsXG5cdCAgICBcIjcxMjEyNlwiOiBcIuS4nOWKv+S5oVwiLFxuXHQgICAgXCI3MTIxMjdcIjogXCLlj7Dopb/kuaFcIixcblx0ICAgIFwiNzEyMTI4XCI6IFwi5LuR6IOM5LmhXCIsXG5cdCAgICBcIjcxMjEyOVwiOiBcIum6puWvruS5oVwiLFxuXHQgICAgXCI3MTIxMzBcIjogXCLmlpflha3luIJcIixcblx0ICAgIFwiNzEyMTMxXCI6IFwi5p6X5YaF5LmhXCIsXG5cdCAgICBcIjcxMjEzMlwiOiBcIuWPpOWdkeS5oVwiLFxuXHQgICAgXCI3MTIxMzNcIjogXCLojr/moZDkuaFcIixcblx0ICAgIFwiNzEyMTM0XCI6IFwi6KW/6J666ZWHXCIsXG5cdCAgICBcIjcxMjEzNVwiOiBcIuS6jOS7keS5oVwiLFxuXHQgICAgXCI3MTIxMzZcIjogXCLljJfmuK/plYdcIixcblx0ICAgIFwiNzEyMTM3XCI6IFwi5rC05p6X5LmhXCIsXG5cdCAgICBcIjcxMjEzOFwiOiBcIuWPo+a5luS5oVwiLFxuXHQgICAgXCI3MTIxMzlcIjogXCLlm5vmuZbkuaFcIixcblx0ICAgIFwiNzEyMTQwXCI6IFwi5YWD6ZW/5LmhXCIsXG5cdCAgICBcIjcxMjQwMFwiOiBcIuWxj+S4nOWOv1wiLFxuXHQgICAgXCI3MTI0MzRcIjogXCLlsY/kuJzluIJcIixcblx0ICAgIFwiNzEyNDM1XCI6IFwi5LiJ5Zyw6Zeo5LmhXCIsXG5cdCAgICBcIjcxMjQzNlwiOiBcIumbvuWPsOS5oVwiLFxuXHQgICAgXCI3MTI0MzdcIjogXCLnjpvlrrbkuaFcIixcblx0ICAgIFwiNzEyNDM4XCI6IFwi5Lmd5aaC5LmhXCIsXG5cdCAgICBcIjcxMjQzOVwiOiBcIumHjOa4r+S5oVwiLFxuXHQgICAgXCI3MTI0NDBcIjogXCLpq5jmoJHkuaFcIixcblx0ICAgIFwiNzEyNDQxXCI6IFwi55uQ5Z+U5LmhXCIsXG5cdCAgICBcIjcxMjQ0MlwiOiBcIumVv+ayu+S5oVwiLFxuXHQgICAgXCI3MTI0NDNcIjogXCLpup/mtJvkuaFcIixcblx0ICAgIFwiNzEyNDQ0XCI6IFwi56u555Sw5LmhXCIsXG5cdCAgICBcIjcxMjQ0NVwiOiBcIuWGheWflOS5oVwiLFxuXHQgICAgXCI3MTI0NDZcIjogXCLkuIfkuLnkuaFcIixcblx0ICAgIFwiNzEyNDQ3XCI6IFwi5r2u5bee6ZWHXCIsXG5cdCAgICBcIjcxMjQ0OFwiOiBcIuazsOatpuS5oVwiLFxuXHQgICAgXCI3MTI0NDlcIjogXCLmnaXkuYnkuaFcIixcblx0ICAgIFwiNzEyNDUwXCI6IFwi5LiH5bOm5LmhXCIsXG5cdCAgICBcIjcxMjQ1MVwiOiBcIuW0gemhtuS5oVwiLFxuXHQgICAgXCI3MTI0NTJcIjogXCLmlrDln6TkuaFcIixcblx0ICAgIFwiNzEyNDUzXCI6IFwi5Y2X5bee5LmhXCIsXG5cdCAgICBcIjcxMjQ1NFwiOiBcIuael+i+ueS5oVwiLFxuXHQgICAgXCI3MTI0NTVcIjogXCLkuJzmuK/plYdcIixcblx0ICAgIFwiNzEyNDU2XCI6IFwi55CJ55CD5LmhXCIsXG5cdCAgICBcIjcxMjQ1N1wiOiBcIuS9s+WGrOS5oVwiLFxuXHQgICAgXCI3MTI0NThcIjogXCLmlrDlm63kuaFcIixcblx0ICAgIFwiNzEyNDU5XCI6IFwi5p6L5a+u5LmhXCIsXG5cdCAgICBcIjcxMjQ2MFwiOiBcIuaei+WxseS5oVwiLFxuXHQgICAgXCI3MTI0NjFcIjogXCLmmKXml6XkuaFcIixcblx0ICAgIFwiNzEyNDYyXCI6IFwi54uu5a2Q5LmhXCIsXG5cdCAgICBcIjcxMjQ2M1wiOiBcIui9puWfjuS5oVwiLFxuXHQgICAgXCI3MTI0NjRcIjogXCLniaHkuLnkuaFcIixcblx0ICAgIFwiNzEyNDY1XCI6IFwi5oGS5pil6ZWHXCIsXG5cdCAgICBcIjcxMjQ2NlwiOiBcIua7oeW3nuS5oVwiLFxuXHQgICAgXCI3MTI1MDBcIjogXCLlj7DkuJzljr9cIixcblx0ICAgIFwiNzEyNTE3XCI6IFwi5Y+w5Lic5biCXCIsXG5cdCAgICBcIjcxMjUxOFwiOiBcIue7v+Wym+S5oVwiLFxuXHQgICAgXCI3MTI1MTlcIjogXCLlhbDlsb/kuaFcIixcblx0ICAgIFwiNzEyNTIwXCI6IFwi5bu25bmz5LmhXCIsXG5cdCAgICBcIjcxMjUyMVwiOiBcIuWNkeWNl+S5oVwiLFxuXHQgICAgXCI3MTI1MjJcIjogXCLpub/ph47kuaFcIixcblx0ICAgIFwiNzEyNTIzXCI6IFwi5YWz5bGx6ZWHXCIsXG5cdCAgICBcIjcxMjUyNFwiOiBcIua1t+err+S5oVwiLFxuXHQgICAgXCI3MTI1MjVcIjogXCLmsaDkuIrkuaFcIixcblx0ICAgIFwiNzEyNTI2XCI6IFwi5Lic5rKz5LmhXCIsXG5cdCAgICBcIjcxMjUyN1wiOiBcIuaIkOWKn+mVh1wiLFxuXHQgICAgXCI3MTI1MjhcIjogXCLplb/mu6jkuaFcIixcblx0ICAgIFwiNzEyNTI5XCI6IFwi6YeR5bOw5LmhXCIsXG5cdCAgICBcIjcxMjUzMFwiOiBcIuWkp+atpuS5oVwiLFxuXHQgICAgXCI3MTI1MzFcIjogXCLovr7ku4HkuaFcIixcblx0ICAgIFwiNzEyNTMyXCI6IFwi5aSq6bq76YeM5LmhXCIsXG5cdCAgICBcIjcxMjYwMFwiOiBcIuiKseiOsuWOv1wiLFxuXHQgICAgXCI3MTI2MTVcIjogXCLoirHojrLluIJcIixcblx0ICAgIFwiNzEyNjE2XCI6IFwi5paw5Z+O5LmhXCIsXG5cdCAgICBcIjcxMjYxN1wiOiBcIuWkqumygemYgVwiLFxuXHQgICAgXCI3MTI2MThcIjogXCLnp4DmnpfkuaFcIixcblx0ICAgIFwiNzEyNjE5XCI6IFwi5ZCJ5a6J5LmhXCIsXG5cdCAgICBcIjcxMjYyMFwiOiBcIuWvv+S4sOS5oVwiLFxuXHQgICAgXCI3MTI2MjFcIjogXCLlh6TmnpfplYdcIixcblx0ICAgIFwiNzEyNjIyXCI6IFwi5YWJ5aSN5LmhXCIsXG5cdCAgICBcIjcxMjYyM1wiOiBcIuS4sOa7qOS5oVwiLFxuXHQgICAgXCI3MTI2MjRcIjogXCLnkZ7nqZfkuaFcIixcblx0ICAgIFwiNzEyNjI1XCI6IFwi5LiH6I2j5LmhXCIsXG5cdCAgICBcIjcxMjYyNlwiOiBcIueOiemHjOmVh1wiLFxuXHQgICAgXCI3MTI2MjdcIjogXCLljZPmuqrkuaFcIixcblx0ICAgIFwiNzEyNjI4XCI6IFwi5a+M6YeM5LmhXCIsXG5cdCAgICBcIjcxMjcwMFwiOiBcIua+jua5luWOv1wiLFxuXHQgICAgXCI3MTI3MDdcIjogXCLpqazlhazluIJcIixcblx0ICAgIFwiNzEyNzA4XCI6IFwi6KW/5bG/5LmhXCIsXG5cdCAgICBcIjcxMjcwOVwiOiBcIuacm+WuieS5oVwiLFxuXHQgICAgXCI3MTI3MTBcIjogXCLkuIPnvo7kuaFcIixcblx0ICAgIFwiNzEyNzExXCI6IFwi55m95rKZ5LmhXCIsXG5cdCAgICBcIjcxMjcxMlwiOiBcIua5luilv+S5oVwiLFxuXHQgICAgXCI3MTI4MDBcIjogXCLov57msZ/ljr9cIixcblx0ICAgIFwiNzEyODA1XCI6IFwi5Y2X56u/5LmhXCIsXG5cdCAgICBcIjcxMjgwNlwiOiBcIuWMl+erv+S5oVwiLFxuXHQgICAgXCI3MTI4MDdcIjogXCLojpLlhYnkuaFcIixcblx0ICAgIFwiNzEyODA4XCI6IFwi5Lic5byV5LmhXCIsXG5cdCAgICBcIjgxMDAwMFwiOiBcIummmea4r+eJueWIq+ihjOaUv+WMulwiLFxuXHQgICAgXCI4MTAxMDBcIjogXCLpppnmuK/lsptcIixcblx0ICAgIFwiODEwMTAxXCI6IFwi5Lit6KW/5Yy6XCIsXG5cdCAgICBcIjgxMDEwMlwiOiBcIua5vuS7lFwiLFxuXHQgICAgXCI4MTAxMDNcIjogXCLkuJzljLpcIixcblx0ICAgIFwiODEwMTA0XCI6IFwi5Y2X5Yy6XCIsXG5cdCAgICBcIjgxMDIwMFwiOiBcIuS5nem+mVwiLFxuXHQgICAgXCI4MTAyMDFcIjogXCLkuZ3pvpnln47ljLpcIixcblx0ICAgIFwiODEwMjAyXCI6IFwi5rK55bCW5pe65Yy6XCIsXG5cdCAgICBcIjgxMDIwM1wiOiBcIua3seawtOWfl+WMulwiLFxuXHQgICAgXCI4MTAyMDRcIjogXCLpu4TlpKfku5nljLpcIixcblx0ICAgIFwiODEwMjA1XCI6IFwi6KeC5aGY5Yy6XCIsXG5cdCAgICBcIjgxMDMwMFwiOiBcIuaWsOeVjFwiLFxuXHQgICAgXCI4MTAzMDFcIjogXCLljJfljLpcIixcblx0ICAgIFwiODEwMzAyXCI6IFwi5aSn5Z+U5Yy6XCIsXG5cdCAgICBcIjgxMDMwM1wiOiBcIuaymeeUsOWMulwiLFxuXHQgICAgXCI4MTAzMDRcIjogXCLopb/otKHljLpcIixcblx0ICAgIFwiODEwMzA1XCI6IFwi5YWD5pyX5Yy6XCIsXG5cdCAgICBcIjgxMDMwNlwiOiBcIuWxr+mXqOWMulwiLFxuXHQgICAgXCI4MTAzMDdcIjogXCLojYPmub7ljLpcIixcblx0ICAgIFwiODEwMzA4XCI6IFwi6JG16Z2S5Yy6XCIsXG5cdCAgICBcIjgxMDMwOVwiOiBcIuemu+Wym+WMulwiLFxuXHQgICAgXCI4MjAwMDBcIjogXCLmvrPpl6jnibnliKvooYzmlL/ljLpcIixcblx0ICAgIFwiODIwMTAwXCI6IFwi5r6z6Zeo5Y2K5bKbXCIsXG5cdCAgICBcIjgyMDIwMFwiOiBcIuemu+Wym1wiLFxuXHQgICAgXCI5OTAwMDBcIjogXCLmtbflpJZcIixcblx0ICAgIFwiOTkwMTAwXCI6IFwi5rW35aSWXCJcblx0fVxuXG5cdC8vIGlkIHBpZC9wYXJlbnRJZCBuYW1lIGNoaWxkcmVuXG5cdGZ1bmN0aW9uIHRyZWUobGlzdCkge1xuXHQgICAgdmFyIG1hcHBlZCA9IHt9XG5cdCAgICBmb3IgKHZhciBpID0gMCwgaXRlbTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICBpdGVtID0gbGlzdFtpXVxuXHQgICAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5pZCkgY29udGludWVcblx0ICAgICAgICBtYXBwZWRbaXRlbS5pZF0gPSBpdGVtXG5cdCAgICB9XG5cblx0ICAgIHZhciByZXN1bHQgPSBbXVxuXHQgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpc3QubGVuZ3RoOyBpaSsrKSB7XG5cdCAgICAgICAgaXRlbSA9IGxpc3RbaWldXG5cblx0ICAgICAgICBpZiAoIWl0ZW0pIGNvbnRpbnVlXG5cdCAgICAgICAgICAgIC8qIGpzaGludCAtVzA0MSAqL1xuXHQgICAgICAgIGlmIChpdGVtLnBpZCA9PSB1bmRlZmluZWQgJiYgaXRlbS5wYXJlbnRJZCA9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICAgICAgY29udGludWVcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IG1hcHBlZFtpdGVtLnBpZF0gfHwgbWFwcGVkW2l0ZW0ucGFyZW50SWRdXG5cdCAgICAgICAgaWYgKCFwYXJlbnQpIGNvbnRpbnVlXG5cdCAgICAgICAgaWYgKCFwYXJlbnQuY2hpbGRyZW4pIHBhcmVudC5jaGlsZHJlbiA9IFtdXG5cdCAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goaXRlbSlcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXN1bHRcblx0fVxuXG5cdHZhciBESUNUX0ZJWEVEID0gZnVuY3Rpb24oKSB7XG5cdCAgICB2YXIgZml4ZWQgPSBbXVxuXHQgICAgZm9yICh2YXIgaWQgaW4gRElDVCkge1xuXHQgICAgICAgIHZhciBwaWQgPSBpZC5zbGljZSgyLCA2KSA9PT0gJzAwMDAnID8gdW5kZWZpbmVkIDpcblx0ICAgICAgICAgICAgaWQuc2xpY2UoNCwgNikgPT0gJzAwJyA/IChpZC5zbGljZSgwLCAyKSArICcwMDAwJykgOlxuXHQgICAgICAgICAgICBpZC5zbGljZSgwLCA0KSArICcwMCdcblx0ICAgICAgICBmaXhlZC5wdXNoKHtcblx0ICAgICAgICAgICAgaWQ6IGlkLFxuXHQgICAgICAgICAgICBwaWQ6IHBpZCxcblx0ICAgICAgICAgICAgbmFtZTogRElDVFtpZF1cblx0ICAgICAgICB9KVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHRyZWUoZml4ZWQpXG5cdH0oKVxuXG5cdG1vZHVsZS5leHBvcnRzID0gRElDVF9GSVhFRFxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIE1pc2NlbGxhbmVvdXNcblx0Ki9cblx0dmFyIERJQ1QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHQvLyBEaWNlXG5cdFx0ZDQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCA0KVxuXHRcdH0sXG5cdFx0ZDY6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCA2KVxuXHRcdH0sXG5cdFx0ZDg6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCA4KVxuXHRcdH0sXG5cdFx0ZDEyOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLm5hdHVyYWwoMSwgMTIpXG5cdFx0fSxcblx0XHRkMjA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCAyMClcblx0XHR9LFxuXHRcdGQxMDA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0dXJhbCgxLCAxMDApXG5cdFx0fSxcblx0XHQvKlxuXHRcdCAgICDpmo/mnLrnlJ/miJDkuIDkuKogR1VJROOAglxuXG5cdFx0ICAgIGh0dHA6Ly93d3cuYnJvb2ZhLmNvbS8yMDA4LzA5L2phdmFzY3JpcHQtdXVpZC1mdW5jdGlvbi9cblx0XHQgICAgW1VVSUQg6KeE6IyDXShodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MTIyLnR4dClcblx0XHQgICAgICAgIFVVSURzIChVbml2ZXJzYWxseSBVbmlxdWUgSURlbnRpZmllcilcblx0XHQgICAgICAgIEdVSURzIChHbG9iYWxseSBVbmlxdWUgSURlbnRpZmllcilcblx0XHQgICAgICAgIFRoZSBmb3JtYWwgZGVmaW5pdGlvbiBvZiB0aGUgVVVJRCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyBBQk5GIFs3XTpcblx0XHQgICAgICAgICAgICBVVUlEICAgICAgICAgICAgICAgICAgID0gdGltZS1sb3cgXCItXCIgdGltZS1taWQgXCItXCJcblx0XHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUtaGlnaC1hbmQtdmVyc2lvbiBcIi1cIlxuXHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2stc2VxLWFuZC1yZXNlcnZlZFxuXHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2stc2VxLWxvdyBcIi1cIiBub2RlXG5cdFx0ICAgICAgICAgICAgdGltZS1sb3cgICAgICAgICAgICAgICA9IDRoZXhPY3RldFxuXHRcdCAgICAgICAgICAgIHRpbWUtbWlkICAgICAgICAgICAgICAgPSAyaGV4T2N0ZXRcblx0XHQgICAgICAgICAgICB0aW1lLWhpZ2gtYW5kLXZlcnNpb24gID0gMmhleE9jdGV0XG5cdFx0ICAgICAgICAgICAgY2xvY2stc2VxLWFuZC1yZXNlcnZlZCA9IGhleE9jdGV0XG5cdFx0ICAgICAgICAgICAgY2xvY2stc2VxLWxvdyAgICAgICAgICA9IGhleE9jdGV0XG5cdFx0ICAgICAgICAgICAgbm9kZSAgICAgICAgICAgICAgICAgICA9IDZoZXhPY3RldFxuXHRcdCAgICAgICAgICAgIGhleE9jdGV0ICAgICAgICAgICAgICAgPSBoZXhEaWdpdCBoZXhEaWdpdFxuXHRcdCAgICAgICAgICAgIGhleERpZ2l0ID1cblx0XHQgICAgICAgICAgICAgICAgXCIwXCIgLyBcIjFcIiAvIFwiMlwiIC8gXCIzXCIgLyBcIjRcIiAvIFwiNVwiIC8gXCI2XCIgLyBcIjdcIiAvIFwiOFwiIC8gXCI5XCIgL1xuXHRcdCAgICAgICAgICAgICAgICBcImFcIiAvIFwiYlwiIC8gXCJjXCIgLyBcImRcIiAvIFwiZVwiIC8gXCJmXCIgL1xuXHRcdCAgICAgICAgICAgICAgICBcIkFcIiAvIFwiQlwiIC8gXCJDXCIgLyBcIkRcIiAvIFwiRVwiIC8gXCJGXCJcblx0XHQgICAgXG5cdFx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS92aWN0b3JxdWlubi9jaGFuY2Vqcy9ibG9iL2RldmVsb3AvY2hhbmNlLmpzI0wxMzQ5XG5cdFx0Ki9cblx0XHRndWlkOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwb29sID0gXCJhYmNkZWZBQkNERUYxMjM0NTY3ODkwXCIsXG5cdFx0XHRcdGd1aWQgPSB0aGlzLnN0cmluZyhwb29sLCA4KSArICctJyArXG5cdFx0XHRcdHRoaXMuc3RyaW5nKHBvb2wsIDQpICsgJy0nICtcblx0XHRcdFx0dGhpcy5zdHJpbmcocG9vbCwgNCkgKyAnLScgK1xuXHRcdFx0XHR0aGlzLnN0cmluZyhwb29sLCA0KSArICctJyArXG5cdFx0XHRcdHRoaXMuc3RyaW5nKHBvb2wsIDEyKTtcblx0XHRcdHJldHVybiBndWlkXG5cdFx0fSxcblx0XHR1dWlkOiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmd1aWQoKVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgICAg6ZqP5py655Sf5oiQ5LiA5LiqIDE4IOS9jei6q+S7veivgeOAglxuXG5cdFx0ICAgIFvouqvku73or4FdKGh0dHA6Ly9iYWlrZS5iYWlkdS5jb20vdmlldy8xNjk3Lmh0bSM0KVxuXHRcdCAgICAgICAg5Zyw5Z2A56CBIDYgKyDlh7rnlJ/ml6XmnJ/noIEgOCArIOmhuuW6j+eggSAzICsg5qCh6aqM56CBIDFcblx0XHQgICAgW+OAiuS4reWNjuS6uuawkeWFseWSjOWbveihjOaUv+WMuuWIkuS7o+eggeOAi+WbveWutuagh+WHhihHQi9UMjI2MCldKGh0dHA6Ly96aGlkYW8uYmFpZHUuY29tL3F1ZXN0aW9uLzE5NTQ1NjEuaHRtbClcblx0XHQqL1xuXHRcdGlkOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpZCxcblx0XHRcdFx0c3VtID0gMCxcblx0XHRcdFx0cmFuayA9IFtcblx0XHRcdFx0XHRcIjdcIiwgXCI5XCIsIFwiMTBcIiwgXCI1XCIsIFwiOFwiLCBcIjRcIiwgXCIyXCIsIFwiMVwiLCBcIjZcIiwgXCIzXCIsIFwiN1wiLCBcIjlcIiwgXCIxMFwiLCBcIjVcIiwgXCI4XCIsIFwiNFwiLCBcIjJcIlxuXHRcdFx0XHRdLFxuXHRcdFx0XHRsYXN0ID0gW1xuXHRcdFx0XHRcdFwiMVwiLCBcIjBcIiwgXCJYXCIsIFwiOVwiLCBcIjhcIiwgXCI3XCIsIFwiNlwiLCBcIjVcIiwgXCI0XCIsIFwiM1wiLCBcIjJcIlxuXHRcdFx0XHRdXG5cblx0XHRcdGlkID0gdGhpcy5waWNrKERJQ1QpLmlkICtcblx0XHRcdFx0dGhpcy5kYXRlKCd5eXl5TU1kZCcpICtcblx0XHRcdFx0dGhpcy5zdHJpbmcoJ251bWJlcicsIDMpXG5cblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c3VtICs9IGlkW2ldICogcmFua1tpXTtcblx0XHRcdH1cblx0XHRcdGlkICs9IGxhc3Rbc3VtICUgMTFdO1xuXG5cdFx0XHRyZXR1cm4gaWRcblx0XHR9LFxuXG5cdFx0Lypcblx0XHQgICAg55Sf5oiQ5LiA5Liq5YWo5bGA55qE6Ieq5aKe5pW05pWw44CCXG5cdFx0ICAgIOexu+S8vOiHquWinuS4u+mUru+8iGF1dG8gaW5jcmVtZW50IHByaW1hcnkga2V577yJ44CCXG5cdFx0Ki9cblx0XHRpbmNyZW1lbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGtleSA9IDBcblx0XHRcdHJldHVybiBmdW5jdGlvbihzdGVwKSB7XG5cdFx0XHRcdHJldHVybiBrZXkgKz0gKCtzdGVwIHx8IDEpIC8vIHN0ZXA/XG5cdFx0XHR9XG5cdFx0fSgpLFxuXHRcdGluYzogZnVuY3Rpb24oc3RlcCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5jcmVtZW50KHN0ZXApXG5cdFx0fVxuXHR9XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgUGFyc2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSlcblx0dmFyIEhhbmRsZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHRQYXJzZXI6IFBhcnNlcixcblx0XHRIYW5kbGVyOiBIYW5kbGVyXG5cdH1cblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9udXlzb2Z0L3JlZ2V4cFxuXHQvLyBmb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vRm9yYmVzTGluZGVzYXkvcmVnZXhwXG5cblx0ZnVuY3Rpb24gcGFyc2Uobikge1xuXHQgICAgaWYgKFwic3RyaW5nXCIgIT0gdHlwZW9mIG4pIHtcblx0ICAgICAgICB2YXIgbCA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgcmVnZXhwIHRvIHBhcnNlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXCIpO1xuXHQgICAgICAgIHRocm93IGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gaW5kZXggPSAxLCBjZ3MgPSB7fSwgcGFyc2VyLnBhcnNlKG4pO1xuXHR9XG5cblx0ZnVuY3Rpb24gVG9rZW4obikge1xuXHQgICAgdGhpcy50eXBlID0gbiwgdGhpcy5vZmZzZXQgPSBUb2tlbi5vZmZzZXQoKSwgdGhpcy50ZXh0ID0gVG9rZW4udGV4dCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gQWx0ZXJuYXRlKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJhbHRlcm5hdGVcIiksIHRoaXMubGVmdCA9IG4sIHRoaXMucmlnaHQgPSBsO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWF0Y2gobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcIm1hdGNoXCIpLCB0aGlzLmJvZHkgPSBuLmZpbHRlcihCb29sZWFuKTtcblx0fVxuXG5cdGZ1bmN0aW9uIEdyb3VwKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgbiksIHRoaXMuYm9keSA9IGw7XG5cdH1cblxuXHRmdW5jdGlvbiBDYXB0dXJlR3JvdXAobikge1xuXHQgICAgR3JvdXAuY2FsbCh0aGlzLCBcImNhcHR1cmUtZ3JvdXBcIiksIHRoaXMuaW5kZXggPSBjZ3NbdGhpcy5vZmZzZXRdIHx8IChjZ3NbdGhpcy5vZmZzZXRdID0gaW5kZXgrKyksIFxuXHQgICAgdGhpcy5ib2R5ID0gbjtcblx0fVxuXG5cdGZ1bmN0aW9uIFF1YW50aWZpZWQobiwgbCkge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcInF1YW50aWZpZWRcIiksIHRoaXMuYm9keSA9IG4sIHRoaXMucXVhbnRpZmllciA9IGw7XG5cdH1cblxuXHRmdW5jdGlvbiBRdWFudGlmaWVyKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJxdWFudGlmaWVyXCIpLCB0aGlzLm1pbiA9IG4sIHRoaXMubWF4ID0gbCwgdGhpcy5ncmVlZHkgPSAhMDtcblx0fVxuXG5cdGZ1bmN0aW9uIENoYXJTZXQobiwgbCkge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcImNoYXJzZXRcIiksIHRoaXMuaW52ZXJ0ID0gbiwgdGhpcy5ib2R5ID0gbDtcblx0fVxuXG5cdGZ1bmN0aW9uIENoYXJhY3RlclJhbmdlKG4sIGwpIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJyYW5nZVwiKSwgdGhpcy5zdGFydCA9IG4sIHRoaXMuZW5kID0gbDtcblx0fVxuXG5cdGZ1bmN0aW9uIExpdGVyYWwobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcImxpdGVyYWxcIiksIHRoaXMuYm9keSA9IG4sIHRoaXMuZXNjYXBlZCA9IHRoaXMuYm9keSAhPSB0aGlzLnRleHQ7XG5cdH1cblxuXHRmdW5jdGlvbiBVbmljb2RlKG4pIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJ1bmljb2RlXCIpLCB0aGlzLmNvZGUgPSBuLnRvVXBwZXJDYXNlKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBIZXgobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcImhleFwiKSwgdGhpcy5jb2RlID0gbi50b1VwcGVyQ2FzZSgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gT2N0YWwobikge1xuXHQgICAgVG9rZW4uY2FsbCh0aGlzLCBcIm9jdGFsXCIpLCB0aGlzLmNvZGUgPSBuLnRvVXBwZXJDYXNlKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBCYWNrUmVmZXJlbmNlKG4pIHtcblx0ICAgIFRva2VuLmNhbGwodGhpcywgXCJiYWNrLXJlZmVyZW5jZVwiKSwgdGhpcy5jb2RlID0gbi50b1VwcGVyQ2FzZSgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gQ29udHJvbENoYXJhY3RlcihuKSB7XG5cdCAgICBUb2tlbi5jYWxsKHRoaXMsIFwiY29udHJvbC1jaGFyYWN0ZXJcIiksIHRoaXMuY29kZSA9IG4udG9VcHBlckNhc2UoKTtcblx0fVxuXG5cdHZhciBwYXJzZXIgPSBmdW5jdGlvbigpIHtcblx0ICAgIGZ1bmN0aW9uIG4obiwgbCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIHUoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB1LnByb3RvdHlwZSA9IGwucHJvdG90eXBlLCBuLnByb3RvdHlwZSA9IG5ldyB1KCk7XG5cdCAgICB9XG5cdCAgICBmdW5jdGlvbiBsKG4sIGwsIHUsIHQsIHIpIHtcblx0ICAgICAgICBmdW5jdGlvbiBlKG4sIGwpIHtcblx0ICAgICAgICAgICAgZnVuY3Rpb24gdShuKSB7XG5cdCAgICAgICAgICAgICAgICBmdW5jdGlvbiBsKG4pIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG4ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXHgwOC9nLCBcIlxcXFxiXCIpLnJlcGxhY2UoL1xcdC9nLCBcIlxcXFx0XCIpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLnJlcGxhY2UoL1xcZi9nLCBcIlxcXFxmXCIpLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpLnJlcGxhY2UoL1tcXHgwMC1cXHgwN1xceDBCXFx4MEVcXHgwRl0vZywgZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlxcXFx4MFwiICsgbChuKTtcblx0ICAgICAgICAgICAgICAgIH0pLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDgwLVxceEZGXS9nLCBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXFxcXHhcIiArIGwobik7XG5cdCAgICAgICAgICAgICAgICB9KS5yZXBsYWNlKC9bXFx1MDE4MC1cXHUwRkZGXS9nLCBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXFxcXHUwXCIgKyBsKG4pO1xuXHQgICAgICAgICAgICAgICAgfSkucmVwbGFjZSgvW1xcdTEwODAtXFx1RkZGRl0vZywgZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlxcXFx1XCIgKyBsKG4pO1xuXHQgICAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdmFyIHQsIHI7XG5cdCAgICAgICAgICAgIHN3aXRjaCAobi5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgICBjYXNlIDA6XG5cdCAgICAgICAgICAgICAgICB0ID0gXCJlbmQgb2YgaW5wdXRcIjtcblx0ICAgICAgICAgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgICAgICAgICAgY2FzZSAxOlxuXHQgICAgICAgICAgICAgICAgdCA9IG5bMF07XG5cdCAgICAgICAgICAgICAgICBicmVhaztcblxuXHQgICAgICAgICAgICAgIGRlZmF1bHQ6XG5cdCAgICAgICAgICAgICAgICB0ID0gbi5zbGljZSgwLCAtMSkuam9pbihcIiwgXCIpICsgXCIgb3IgXCIgKyBuW24ubGVuZ3RoIC0gMV07XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIHIgPSBsID8gJ1wiJyArIHUobCkgKyAnXCInIDogXCJlbmQgb2YgaW5wdXRcIiwgXCJFeHBlY3RlZCBcIiArIHQgKyBcIiBidXQgXCIgKyByICsgXCIgZm91bmQuXCI7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZXhwZWN0ZWQgPSBuLCB0aGlzLmZvdW5kID0gbCwgdGhpcy5vZmZzZXQgPSB1LCB0aGlzLmxpbmUgPSB0LCB0aGlzLmNvbHVtbiA9IHIsIFxuXHQgICAgICAgIHRoaXMubmFtZSA9IFwiU3ludGF4RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gZShuLCBsKTtcblx0ICAgIH1cblx0ICAgIGZ1bmN0aW9uIHUobikge1xuXHQgICAgICAgIGZ1bmN0aW9uIHUoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuLnN1YnN0cmluZyhMdCwgcXQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiB0KCkge1xuXHQgICAgICAgICAgICByZXR1cm4gTHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHIobCkge1xuXHQgICAgICAgICAgICBmdW5jdGlvbiB1KGwsIHUsIHQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciByLCBlO1xuXHQgICAgICAgICAgICAgICAgZm9yIChyID0gdTsgdCA+IHI7IHIrKykgZSA9IG4uY2hhckF0KHIpLCBcIlxcblwiID09PSBlID8gKGwuc2VlbkNSIHx8IGwubGluZSsrLCBsLmNvbHVtbiA9IDEsIFxuXHQgICAgICAgICAgICAgICAgbC5zZWVuQ1IgPSAhMSkgOiBcIlxcclwiID09PSBlIHx8IFwiXFx1MjAyOFwiID09PSBlIHx8IFwiXFx1MjAyOVwiID09PSBlID8gKGwubGluZSsrLCBsLmNvbHVtbiA9IDEsIFxuXHQgICAgICAgICAgICAgICAgbC5zZWVuQ1IgPSAhMCkgOiAobC5jb2x1bW4rKywgbC5zZWVuQ1IgPSAhMSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIE10ICE9PSBsICYmIChNdCA+IGwgJiYgKE10ID0gMCwgRHQgPSB7XG5cdCAgICAgICAgICAgICAgICBsaW5lOiAxLFxuXHQgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuXHQgICAgICAgICAgICAgICAgc2VlbkNSOiAhMVxuXHQgICAgICAgICAgICB9KSwgdShEdCwgTXQsIGwpLCBNdCA9IGwpLCBEdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZShuKSB7XG5cdCAgICAgICAgICAgIEh0ID4gcXQgfHwgKHF0ID4gSHQgJiYgKEh0ID0gcXQsIE90ID0gW10pLCBPdC5wdXNoKG4pKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gbyhuKSB7XG5cdCAgICAgICAgICAgIHZhciBsID0gMDtcblx0ICAgICAgICAgICAgZm9yIChuLnNvcnQoKTsgbCA8IG4ubGVuZ3RoOyApIG5bbCAtIDFdID09PSBuW2xdID8gbi5zcGxpY2UobCwgMSkgOiBsKys7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIGMoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByLCBvO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCB1ID0gaSgpLCBudWxsICE9PSB1ID8gKHQgPSBxdCwgMTI0ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHIgPSBmbCwgXG5cdCAgICAgICAgICAgIHF0KyspIDogKHIgPSBudWxsLCAwID09PSBXdCAmJiBlKHNsKSksIG51bGwgIT09IHIgPyAobyA9IGMoKSwgbnVsbCAhPT0gbyA/IChyID0gWyByLCBvIF0sIFxuXHQgICAgICAgICAgICB0ID0gcikgOiAocXQgPSB0LCB0ID0gaWwpKSA6IChxdCA9IHQsIHQgPSBpbCksIG51bGwgPT09IHQgJiYgKHQgPSBhbCksIG51bGwgIT09IHQgPyAoTHQgPSBsLCBcblx0ICAgICAgICAgICAgdSA9IGhsKHUsIHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gaSgpIHtcblx0ICAgICAgICAgICAgdmFyIG4sIGwsIHUsIHQsIHI7XG5cdCAgICAgICAgICAgIGlmIChuID0gcXQsIGwgPSBmKCksIG51bGwgPT09IGwgJiYgKGwgPSBhbCksIG51bGwgIT09IGwpIGlmICh1ID0gcXQsIFd0KyssIHQgPSBkKCksIFxuXHQgICAgICAgICAgICBXdC0tLCBudWxsID09PSB0ID8gdSA9IGFsIDogKHF0ID0gdSwgdSA9IGlsKSwgbnVsbCAhPT0gdSkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh0ID0gW10sIHIgPSBoKCksIG51bGwgPT09IHIgJiYgKHIgPSBhKCkpOyBudWxsICE9PSByOyApIHQucHVzaChyKSwgciA9IGgoKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsID09PSByICYmIChyID0gYSgpKTtcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHQgPyAociA9IHMoKSwgbnVsbCA9PT0gciAmJiAociA9IGFsKSwgbnVsbCAhPT0gciA/IChMdCA9IG4sIGwgPSBkbChsLCB0LCByKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsID09PSBsID8gKHF0ID0gbiwgbiA9IGwpIDogbiA9IGwpIDogKHF0ID0gbiwgbiA9IGlsKSkgOiAocXQgPSBuLCBuID0gaWwpO1xuXHQgICAgICAgICAgICB9IGVsc2UgcXQgPSBuLCBuID0gaWw7IGVsc2UgcXQgPSBuLCBuID0gaWw7XG5cdCAgICAgICAgICAgIHJldHVybiBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBhKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSB4KCksIG51bGwgPT09IG4gJiYgKG4gPSBRKCksIG51bGwgPT09IG4gJiYgKG4gPSBCKCkpKSwgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDk0ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBwbCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUodmwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IHdsKCkpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUsIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHMoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCAzNiA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gQWwsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKENsKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ICYmIChMdCA9IGwsIHUgPSBnbCgpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBoKCkge1xuXHQgICAgICAgICAgICB2YXIgbiwgbCwgdTtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSBxdCwgbCA9IGEoKSwgbnVsbCAhPT0gbCA/ICh1ID0gZCgpLCBudWxsICE9PSB1ID8gKEx0ID0gbiwgbCA9IGJsKGwsIHUpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbCA/IChxdCA9IG4sIG4gPSBsKSA6IG4gPSBsKSA6IChxdCA9IG4sIG4gPSBpbCkpIDogKHF0ID0gbiwgbiA9IGlsKSwgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZCgpIHtcblx0ICAgICAgICAgICAgdmFyIG4sIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBXdCsrLCBuID0gcXQsIGwgPSBwKCksIG51bGwgIT09IGwgPyAodSA9IGsoKSwgbnVsbCA9PT0gdSAmJiAodSA9IGFsKSwgbnVsbCAhPT0gdSA/IChMdCA9IG4sIFxuXHQgICAgICAgICAgICBsID0gVGwobCwgdSksIG51bGwgPT09IGwgPyAocXQgPSBuLCBuID0gbCkgOiBuID0gbCkgOiAocXQgPSBuLCBuID0gaWwpKSA6IChxdCA9IG4sIFxuXHQgICAgICAgICAgICBuID0gaWwpLCBXdC0tLCBudWxsID09PSBuICYmIChsID0gbnVsbCwgMCA9PT0gV3QgJiYgZShrbCkpLCBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBwKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSB2KCksIG51bGwgPT09IG4gJiYgKG4gPSB3KCksIG51bGwgPT09IG4gJiYgKG4gPSBBKCksIG51bGwgPT09IG4gJiYgKG4gPSBDKCksIFxuXHQgICAgICAgICAgICBudWxsID09PSBuICYmIChuID0gZygpLCBudWxsID09PSBuICYmIChuID0gYigpKSkpKSksIG47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHYoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByLCBvLCBjO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCAxMjMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodSA9IHhsLCBxdCsrKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh5bCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSA/ICh0ID0gVCgpLCBudWxsICE9PSB0ID8gKDQ0ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHIgPSBtbCwgcXQrKykgOiAociA9IG51bGwsIFxuXHQgICAgICAgICAgICAwID09PSBXdCAmJiBlKFJsKSksIG51bGwgIT09IHIgPyAobyA9IFQoKSwgbnVsbCAhPT0gbyA/ICgxMjUgPT09IG4uY2hhckNvZGVBdChxdCkgPyAoYyA9IEZsLCBcblx0ICAgICAgICAgICAgcXQrKykgOiAoYyA9IG51bGwsIDAgPT09IFd0ICYmIGUoUWwpKSwgbnVsbCAhPT0gYyA/IChMdCA9IGwsIHUgPSBTbCh0LCBvKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiB3KCkge1xuXHQgICAgICAgICAgICB2YXIgbCwgdSwgdCwgcjtcblx0ICAgICAgICAgICAgcmV0dXJuIGwgPSBxdCwgMTIzID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSB4bCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoeWwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IFQoKSwgbnVsbCAhPT0gdCA/IChuLnN1YnN0cihxdCwgMikgPT09IFVsID8gKHIgPSBVbCwgcXQgKz0gMikgOiAociA9IG51bGwsIFxuXHQgICAgICAgICAgICAwID09PSBXdCAmJiBlKEVsKSksIG51bGwgIT09IHIgPyAoTHQgPSBsLCB1ID0gR2wodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIEEoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCAxMjMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodSA9IHhsLCBxdCsrKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh5bCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSA/ICh0ID0gVCgpLCBudWxsICE9PSB0ID8gKDEyNSA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/IChyID0gRmwsIHF0KyspIDogKHIgPSBudWxsLCBcblx0ICAgICAgICAgICAgMCA9PT0gV3QgJiYgZShRbCkpLCBudWxsICE9PSByID8gKEx0ID0gbCwgdSA9IEJsKHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBDKCkge1xuXHQgICAgICAgICAgICB2YXIgbCwgdTtcblx0ICAgICAgICAgICAgcmV0dXJuIGwgPSBxdCwgNDMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodSA9IGpsLCBxdCsrKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSgkbCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gcWwoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gZygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDQyID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBMbCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoTWwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IERsKCkpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUsIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIGIoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCA2MyA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gSGwsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKE9sKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ICYmIChMdCA9IGwsIHUgPSBXbCgpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBrKCkge1xuXHQgICAgICAgICAgICB2YXIgbDtcblx0ICAgICAgICAgICAgcmV0dXJuIDYzID09PSBuLmNoYXJDb2RlQXQocXQpID8gKGwgPSBIbCwgcXQrKykgOiAobCA9IG51bGwsIDAgPT09IFd0ICYmIGUoT2wpKSwgXG5cdCAgICAgICAgICAgIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFQoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICBpZiAobCA9IHF0LCB1ID0gW10sIHpsLnRlc3Qobi5jaGFyQXQocXQpKSA/ICh0ID0gbi5jaGFyQXQocXQpLCBxdCsrKSA6ICh0ID0gbnVsbCwgXG5cdCAgICAgICAgICAgIDAgPT09IFd0ICYmIGUoSWwpKSwgbnVsbCAhPT0gdCkgZm9yICg7bnVsbCAhPT0gdDsgKSB1LnB1c2godCksIHpsLnRlc3Qobi5jaGFyQXQocXQpKSA/ICh0ID0gbi5jaGFyQXQocXQpLCBcblx0ICAgICAgICAgICAgcXQrKykgOiAodCA9IG51bGwsIDAgPT09IFd0ICYmIGUoSWwpKTsgZWxzZSB1ID0gaWw7XG5cdCAgICAgICAgICAgIHJldHVybiBudWxsICE9PSB1ICYmIChMdCA9IGwsIHUgPSBKbCh1KSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgXG5cdCAgICAgICAgICAgIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHgoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByO1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCA0MCA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gS2wsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKE5sKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ID8gKHQgPSBSKCksIG51bGwgPT09IHQgJiYgKHQgPSBGKCksIG51bGwgPT09IHQgJiYgKHQgPSBtKCksIG51bGwgPT09IHQgJiYgKHQgPSB5KCkpKSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB0ID8gKDQxID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHIgPSBQbCwgcXQrKykgOiAociA9IG51bGwsIDAgPT09IFd0ICYmIGUoVmwpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHIgPyAoTHQgPSBsLCB1ID0gWGwodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIHkoKSB7XG5cdCAgICAgICAgICAgIHZhciBuLCBsO1xuXHQgICAgICAgICAgICByZXR1cm4gbiA9IHF0LCBsID0gYygpLCBudWxsICE9PSBsICYmIChMdCA9IG4sIGwgPSBZbChsKSksIG51bGwgPT09IGwgPyAocXQgPSBuLCBcblx0ICAgICAgICAgICAgbiA9IGwpIDogbiA9IGwsIG47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIG0oKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IFpsID8gKHUgPSBabCwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoX2wpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IGMoKSwgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSBudSh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFIoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IGx1ID8gKHUgPSBsdSwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUodXUpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IGMoKSwgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSB0dSh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIEYoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IHJ1ID8gKHUgPSBydSwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoZXUpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAodCA9IGMoKSwgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSBvdSh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICBsID0gaWwpKSA6IChxdCA9IGwsIGwgPSBpbCksIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIFEoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByLCBvO1xuXHQgICAgICAgICAgICBpZiAoV3QrKywgbCA9IHF0LCA5MSA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gaXUsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKGF1KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1KSBpZiAoOTQgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodCA9IHBsLCBxdCsrKSA6ICh0ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh2bCkpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gdCAmJiAodCA9IGFsKSwgbnVsbCAhPT0gdCkge1xuXHQgICAgICAgICAgICAgICAgZm9yIChyID0gW10sIG8gPSBTKCksIG51bGwgPT09IG8gJiYgKG8gPSBVKCkpOyBudWxsICE9PSBvOyApIHIucHVzaChvKSwgbyA9IFMoKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsID09PSBvICYmIChvID0gVSgpKTtcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHIgPyAoOTMgPT09IG4uY2hhckNvZGVBdChxdCkgPyAobyA9IGZ1LCBxdCsrKSA6IChvID0gbnVsbCwgMCA9PT0gV3QgJiYgZShzdSkpLCBcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IG8gPyAoTHQgPSBsLCB1ID0gaHUodCwgciksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHF0ID0gbCwgbCA9IGlsOyBlbHNlIHF0ID0gbCwgbCA9IGlsO1xuXHQgICAgICAgICAgICByZXR1cm4gV3QtLSwgbnVsbCA9PT0gbCAmJiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoY3UpKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gUygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQsIHI7XG5cdCAgICAgICAgICAgIHJldHVybiBXdCsrLCBsID0gcXQsIHUgPSBVKCksIG51bGwgIT09IHUgPyAoNDUgPT09IG4uY2hhckNvZGVBdChxdCkgPyAodCA9IHB1LCBxdCsrKSA6ICh0ID0gbnVsbCwgXG5cdCAgICAgICAgICAgIDAgPT09IFd0ICYmIGUodnUpKSwgbnVsbCAhPT0gdCA/IChyID0gVSgpLCBudWxsICE9PSByID8gKEx0ID0gbCwgdSA9IHd1KHUsIHIpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBXdC0tLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbCAmJiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoZHUpKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVSgpIHtcblx0ICAgICAgICAgICAgdmFyIG4sIGw7XG5cdCAgICAgICAgICAgIHJldHVybiBXdCsrLCBuID0gRygpLCBudWxsID09PSBuICYmIChuID0gRSgpKSwgV3QtLSwgbnVsbCA9PT0gbiAmJiAobCA9IG51bGwsIDAgPT09IFd0ICYmIGUoQXUpKSwgXG5cdCAgICAgICAgICAgIG47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIEUoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCBDdS50ZXN0KG4uY2hhckF0KHF0KSkgPyAodSA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoZ3UpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IGJ1KHUpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBHKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSBMKCksIG51bGwgPT09IG4gJiYgKG4gPSBZKCksIG51bGwgPT09IG4gJiYgKG4gPSBIKCksIG51bGwgPT09IG4gJiYgKG4gPSBPKCksIFxuXHQgICAgICAgICAgICBudWxsID09PSBuICYmIChuID0gVygpLCBudWxsID09PSBuICYmIChuID0geigpLCBudWxsID09PSBuICYmIChuID0gSSgpLCBudWxsID09PSBuICYmIChuID0gSigpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbiAmJiAobiA9IEsoKSwgbnVsbCA9PT0gbiAmJiAobiA9IE4oKSwgbnVsbCA9PT0gbiAmJiAobiA9IFAoKSwgbnVsbCA9PT0gbiAmJiAobiA9IFYoKSwgXG5cdCAgICAgICAgICAgIG51bGwgPT09IG4gJiYgKG4gPSBYKCksIG51bGwgPT09IG4gJiYgKG4gPSBfKCksIG51bGwgPT09IG4gJiYgKG4gPSBubCgpLCBudWxsID09PSBuICYmIChuID0gbGwoKSwgXG5cdCAgICAgICAgICAgIG51bGwgPT09IG4gJiYgKG4gPSB1bCgpLCBudWxsID09PSBuICYmIChuID0gdGwoKSkpKSkpKSkpKSkpKSkpKSkpLCBuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiBCKCkge1xuXHQgICAgICAgICAgICB2YXIgbjtcblx0ICAgICAgICAgICAgcmV0dXJuIG4gPSBqKCksIG51bGwgPT09IG4gJiYgKG4gPSBxKCksIG51bGwgPT09IG4gJiYgKG4gPSAkKCkpKSwgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gaigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDQ2ID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBrdSwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoVHUpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IHh1KCkpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUsIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uICQoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1O1xuXHQgICAgICAgICAgICByZXR1cm4gV3QrKywgbCA9IHF0LCBtdS50ZXN0KG4uY2hhckF0KHF0KSkgPyAodSA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAodSA9IG51bGwsIFxuXHQgICAgICAgICAgICAwID09PSBXdCAmJiBlKFJ1KSksIG51bGwgIT09IHUgJiYgKEx0ID0gbCwgdSA9IGJ1KHUpKSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1LCBcblx0ICAgICAgICAgICAgV3QtLSwgbnVsbCA9PT0gbCAmJiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoeXUpKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gcSgpIHtcblx0ICAgICAgICAgICAgdmFyIG47XG5cdCAgICAgICAgICAgIHJldHVybiBuID0gTSgpLCBudWxsID09PSBuICYmIChuID0gRCgpLCBudWxsID09PSBuICYmIChuID0gWSgpLCBudWxsID09PSBuICYmIChuID0gSCgpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbiAmJiAobiA9IE8oKSwgbnVsbCA9PT0gbiAmJiAobiA9IFcoKSwgbnVsbCA9PT0gbiAmJiAobiA9IHooKSwgbnVsbCA9PT0gbiAmJiAobiA9IEkoKSwgXG5cdCAgICAgICAgICAgIG51bGwgPT09IG4gJiYgKG4gPSBKKCksIG51bGwgPT09IG4gJiYgKG4gPSBLKCksIG51bGwgPT09IG4gJiYgKG4gPSBOKCksIG51bGwgPT09IG4gJiYgKG4gPSBQKCksIFxuXHQgICAgICAgICAgICBudWxsID09PSBuICYmIChuID0gVigpLCBudWxsID09PSBuICYmIChuID0gWCgpLCBudWxsID09PSBuICYmIChuID0gWigpLCBudWxsID09PSBuICYmIChuID0gXygpLCBcblx0ICAgICAgICAgICAgbnVsbCA9PT0gbiAmJiAobiA9IG5sKCksIG51bGwgPT09IG4gJiYgKG4gPSBsbCgpLCBudWxsID09PSBuICYmIChuID0gdWwoKSwgbnVsbCA9PT0gbiAmJiAobiA9IHRsKCkpKSkpKSkpKSkpKSkpKSkpKSkpLCBcblx0ICAgICAgICAgICAgbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gRnUgPyAodSA9IEZ1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShRdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gU3UoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTSgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gRnUgPyAodSA9IEZ1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShRdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gVXUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gRCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gRXUgPyAodSA9IEV1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShHdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gQnUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0ganUgPyAodSA9IGp1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSgkdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gcXUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gTHUgPyAodSA9IEx1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShNdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gRHUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gSHUgPyAodSA9IEh1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShPdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gV3UoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24geigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0genUgPyAodSA9IHp1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShJdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gSnUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSSgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gS3UgPyAodSA9IEt1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShOdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gUHUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gVnUgPyAodSA9IFZ1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShYdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gWXUoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gSygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gWnUgPyAodSA9IFp1LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShfdSkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gbnQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gTigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gbHQgPyAodSA9IGx0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh1dCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gdHQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gUCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gcnQgPyAodSA9IHJ0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShldCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gb3QoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gVigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gY3QgPyAodSA9IGN0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShpdCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gYXQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gWCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gZnQgPyAodSA9IGZ0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShzdCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gaHQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gWSgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQ7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gZHQgPyAodSA9IGR0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZShwdCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSA/IChuLmxlbmd0aCA+IHF0ID8gKHQgPSBuLmNoYXJBdChxdCksIHF0KyspIDogKHQgPSBudWxsLCAwID09PSBXdCAmJiBlKHZ0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB0ID8gKEx0ID0gbCwgdSA9IHd0KHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gWigpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQ7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIDkyID09PSBuLmNoYXJDb2RlQXQocXQpID8gKHUgPSBBdCwgcXQrKykgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoQ3QpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUgPyAoZ3QudGVzdChuLmNoYXJBdChxdCkpID8gKHQgPSBuLmNoYXJBdChxdCksIHF0KyspIDogKHQgPSBudWxsLCAwID09PSBXdCAmJiBlKGJ0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB0ID8gKEx0ID0gbCwgdSA9IGt0KHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgIGwgPSBpbCkpIDogKHF0ID0gbCwgbCA9IGlsKSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gXygpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHUsIHQsIHI7XG5cdCAgICAgICAgICAgIGlmIChsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gVHQgPyAodSA9IFR0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh4dCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKHQgPSBbXSwgeXQudGVzdChuLmNoYXJBdChxdCkpID8gKHIgPSBuLmNoYXJBdChxdCksIHF0KyspIDogKHIgPSBudWxsLCAwID09PSBXdCAmJiBlKG10KSksIFxuXHQgICAgICAgICAgICAgICAgbnVsbCAhPT0gcikgZm9yICg7bnVsbCAhPT0gcjsgKSB0LnB1c2gociksIHl0LnRlc3Qobi5jaGFyQXQocXQpKSA/IChyID0gbi5jaGFyQXQocXQpLCBcblx0ICAgICAgICAgICAgICAgIHF0KyspIDogKHIgPSBudWxsLCAwID09PSBXdCAmJiBlKG10KSk7IGVsc2UgdCA9IGlsO1xuXHQgICAgICAgICAgICAgICAgbnVsbCAhPT0gdCA/IChMdCA9IGwsIHUgPSBSdCh0KSwgbnVsbCA9PT0gdSA/IChxdCA9IGwsIGwgPSB1KSA6IGwgPSB1KSA6IChxdCA9IGwsIFxuXHQgICAgICAgICAgICAgICAgbCA9IGlsKTtcblx0ICAgICAgICAgICAgfSBlbHNlIHF0ID0gbCwgbCA9IGlsO1xuXHQgICAgICAgICAgICByZXR1cm4gbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gbmwoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0LCByO1xuXHQgICAgICAgICAgICBpZiAobCA9IHF0LCBuLnN1YnN0cihxdCwgMikgPT09IEZ0ID8gKHUgPSBGdCwgcXQgKz0gMikgOiAodSA9IG51bGwsIDAgPT09IFd0ICYmIGUoUXQpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHUpIHtcblx0ICAgICAgICAgICAgICAgIGlmICh0ID0gW10sIFN0LnRlc3Qobi5jaGFyQXQocXQpKSA/IChyID0gbi5jaGFyQXQocXQpLCBxdCsrKSA6IChyID0gbnVsbCwgMCA9PT0gV3QgJiYgZShVdCkpLCBcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHIpIGZvciAoO251bGwgIT09IHI7ICkgdC5wdXNoKHIpLCBTdC50ZXN0KG4uY2hhckF0KHF0KSkgPyAociA9IG4uY2hhckF0KHF0KSwgXG5cdCAgICAgICAgICAgICAgICBxdCsrKSA6IChyID0gbnVsbCwgMCA9PT0gV3QgJiYgZShVdCkpOyBlbHNlIHQgPSBpbDtcblx0ICAgICAgICAgICAgICAgIG51bGwgIT09IHQgPyAoTHQgPSBsLCB1ID0gRXQodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgICAgIGwgPSBpbCk7XG5cdCAgICAgICAgICAgIH0gZWxzZSBxdCA9IGwsIGwgPSBpbDtcblx0ICAgICAgICAgICAgcmV0dXJuIGw7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZ1bmN0aW9uIGxsKCkge1xuXHQgICAgICAgICAgICB2YXIgbCwgdSwgdCwgcjtcblx0ICAgICAgICAgICAgaWYgKGwgPSBxdCwgbi5zdWJzdHIocXQsIDIpID09PSBHdCA/ICh1ID0gR3QsIHF0ICs9IDIpIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKEJ0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1KSB7XG5cdCAgICAgICAgICAgICAgICBpZiAodCA9IFtdLCBTdC50ZXN0KG4uY2hhckF0KHF0KSkgPyAociA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAociA9IG51bGwsIDAgPT09IFd0ICYmIGUoVXQpKSwgXG5cdCAgICAgICAgICAgICAgICBudWxsICE9PSByKSBmb3IgKDtudWxsICE9PSByOyApIHQucHVzaChyKSwgU3QudGVzdChuLmNoYXJBdChxdCkpID8gKHIgPSBuLmNoYXJBdChxdCksIFxuXHQgICAgICAgICAgICAgICAgcXQrKykgOiAociA9IG51bGwsIDAgPT09IFd0ICYmIGUoVXQpKTsgZWxzZSB0ID0gaWw7XG5cdCAgICAgICAgICAgICAgICBudWxsICE9PSB0ID8gKEx0ID0gbCwgdSA9IGp0KHQpLCBudWxsID09PSB1ID8gKHF0ID0gbCwgbCA9IHUpIDogbCA9IHUpIDogKHF0ID0gbCwgXG5cdCAgICAgICAgICAgICAgICBsID0gaWwpO1xuXHQgICAgICAgICAgICB9IGVsc2UgcXQgPSBsLCBsID0gaWw7XG5cdCAgICAgICAgICAgIHJldHVybiBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBmdW5jdGlvbiB1bCgpIHtcblx0ICAgICAgICAgICAgdmFyIGwsIHU7XG5cdCAgICAgICAgICAgIHJldHVybiBsID0gcXQsIG4uc3Vic3RyKHF0LCAyKSA9PT0gVHQgPyAodSA9IFR0LCBxdCArPSAyKSA6ICh1ID0gbnVsbCwgMCA9PT0gV3QgJiYgZSh4dCkpLCBcblx0ICAgICAgICAgICAgbnVsbCAhPT0gdSAmJiAoTHQgPSBsLCB1ID0gJHQoKSksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSwgbDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZnVuY3Rpb24gdGwoKSB7XG5cdCAgICAgICAgICAgIHZhciBsLCB1LCB0O1xuXHQgICAgICAgICAgICByZXR1cm4gbCA9IHF0LCA5MiA9PT0gbi5jaGFyQ29kZUF0KHF0KSA/ICh1ID0gQXQsIHF0KyspIDogKHUgPSBudWxsLCAwID09PSBXdCAmJiBlKEN0KSksIFxuXHQgICAgICAgICAgICBudWxsICE9PSB1ID8gKG4ubGVuZ3RoID4gcXQgPyAodCA9IG4uY2hhckF0KHF0KSwgcXQrKykgOiAodCA9IG51bGwsIDAgPT09IFd0ICYmIGUodnQpKSwgXG5cdCAgICAgICAgICAgIG51bGwgIT09IHQgPyAoTHQgPSBsLCB1ID0gYnUodCksIG51bGwgPT09IHUgPyAocXQgPSBsLCBsID0gdSkgOiBsID0gdSkgOiAocXQgPSBsLCBcblx0ICAgICAgICAgICAgbCA9IGlsKSkgOiAocXQgPSBsLCBsID0gaWwpLCBsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgcmwsIGVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB7fSwgb2wgPSB7XG5cdCAgICAgICAgICAgIHJlZ2V4cDogY1xuXHQgICAgICAgIH0sIGNsID0gYywgaWwgPSBudWxsLCBhbCA9IFwiXCIsIGZsID0gXCJ8XCIsIHNsID0gJ1wifFwiJywgaGwgPSBmdW5jdGlvbihuLCBsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBsID8gbmV3IEFsdGVybmF0ZShuLCBsWzFdKSA6IG47XG5cdCAgICAgICAgfSwgZGwgPSBmdW5jdGlvbihuLCBsLCB1KSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgTWF0Y2goWyBuIF0uY29uY2F0KGwpLmNvbmNhdChbIHUgXSkpO1xuXHQgICAgICAgIH0sIHBsID0gXCJeXCIsIHZsID0gJ1wiXlwiJywgd2wgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcInN0YXJ0XCIpO1xuXHQgICAgICAgIH0sIEFsID0gXCIkXCIsIENsID0gJ1wiJFwiJywgZ2wgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcImVuZFwiKTtcblx0ICAgICAgICB9LCBibCA9IGZ1bmN0aW9uKG4sIGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBRdWFudGlmaWVkKG4sIGwpO1xuXHQgICAgICAgIH0sIGtsID0gXCJRdWFudGlmaWVyXCIsIFRsID0gZnVuY3Rpb24obiwgbCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbCAmJiAobi5ncmVlZHkgPSAhMSksIG47XG5cdCAgICAgICAgfSwgeGwgPSBcIntcIiwgeWwgPSAnXCJ7XCInLCBtbCA9IFwiLFwiLCBSbCA9ICdcIixcIicsIEZsID0gXCJ9XCIsIFFsID0gJ1wifVwiJywgU2wgPSBmdW5jdGlvbihuLCBsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgUXVhbnRpZmllcihuLCBsKTtcblx0ICAgICAgICB9LCBVbCA9IFwiLH1cIiwgRWwgPSAnXCIsfVwiJywgR2wgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgUXVhbnRpZmllcihuLCAxLzApO1xuXHQgICAgICAgIH0sIEJsID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFF1YW50aWZpZXIobiwgbik7XG5cdCAgICAgICAgfSwgamwgPSBcIitcIiwgJGwgPSAnXCIrXCInLCBxbCA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFF1YW50aWZpZXIoMSwgMS8wKTtcblx0ICAgICAgICB9LCBMbCA9IFwiKlwiLCBNbCA9ICdcIipcIicsIERsID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgUXVhbnRpZmllcigwLCAxLzApO1xuXHQgICAgICAgIH0sIEhsID0gXCI/XCIsIE9sID0gJ1wiP1wiJywgV2wgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBRdWFudGlmaWVyKDAsIDEpO1xuXHQgICAgICAgIH0sIHpsID0gL15bMC05XS8sIElsID0gXCJbMC05XVwiLCBKbCA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuICtuLmpvaW4oXCJcIik7XG5cdCAgICAgICAgfSwgS2wgPSBcIihcIiwgTmwgPSAnXCIoXCInLCBQbCA9IFwiKVwiLCBWbCA9ICdcIilcIicsIFhsID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbjtcblx0ICAgICAgICB9LCBZbCA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXB0dXJlR3JvdXAobik7XG5cdCAgICAgICAgfSwgWmwgPSBcIj86XCIsIF9sID0gJ1wiPzpcIicsIG51ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IEdyb3VwKFwibm9uLWNhcHR1cmUtZ3JvdXBcIiwgbik7XG5cdCAgICAgICAgfSwgbHUgPSBcIj89XCIsIHV1ID0gJ1wiPz1cIicsIHR1ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IEdyb3VwKFwicG9zaXRpdmUtbG9va2FoZWFkXCIsIG4pO1xuXHQgICAgICAgIH0sIHJ1ID0gXCI/IVwiLCBldSA9ICdcIj8hXCInLCBvdSA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBHcm91cChcIm5lZ2F0aXZlLWxvb2thaGVhZFwiLCBuKTtcblx0ICAgICAgICB9LCBjdSA9IFwiQ2hhcmFjdGVyU2V0XCIsIGl1ID0gXCJbXCIsIGF1ID0gJ1wiW1wiJywgZnUgPSBcIl1cIiwgc3UgPSAnXCJdXCInLCBodSA9IGZ1bmN0aW9uKG4sIGwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFyU2V0KCEhbiwgbCk7XG5cdCAgICAgICAgfSwgZHUgPSBcIkNoYXJhY3RlclJhbmdlXCIsIHB1ID0gXCItXCIsIHZ1ID0gJ1wiLVwiJywgd3UgPSBmdW5jdGlvbihuLCBsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ2hhcmFjdGVyUmFuZ2UobiwgbCk7XG5cdCAgICAgICAgfSwgQXUgPSBcIkNoYXJhY3RlclwiLCBDdSA9IC9eW15cXFxcXFxdXS8sIGd1ID0gXCJbXlxcXFxcXFxcXFxcXF1dXCIsIGJ1ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWwobik7XG5cdCAgICAgICAgfSwga3UgPSBcIi5cIiwgVHUgPSAnXCIuXCInLCB4dSA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwiYW55LWNoYXJhY3RlclwiKTtcblx0ICAgICAgICB9LCB5dSA9IFwiTGl0ZXJhbFwiLCBtdSA9IC9eW158XFxcXFxcLy5bKCk/KyokXFxeXS8sIFJ1ID0gXCJbXnxcXFxcXFxcXFxcXFwvLlsoKT8rKiRcXFxcXl1cIiwgRnUgPSBcIlxcXFxiXCIsIFF1ID0gJ1wiXFxcXFxcXFxiXCInLCBTdSA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwiYmFja3NwYWNlXCIpO1xuXHQgICAgICAgIH0sIFV1ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJ3b3JkLWJvdW5kYXJ5XCIpO1xuXHQgICAgICAgIH0sIEV1ID0gXCJcXFxcQlwiLCBHdSA9ICdcIlxcXFxcXFxcQlwiJywgQnUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIm5vbi13b3JkLWJvdW5kYXJ5XCIpO1xuXHQgICAgICAgIH0sIGp1ID0gXCJcXFxcZFwiLCAkdSA9ICdcIlxcXFxcXFxcZFwiJywgcXUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcImRpZ2l0XCIpO1xuXHQgICAgICAgIH0sIEx1ID0gXCJcXFxcRFwiLCBNdSA9ICdcIlxcXFxcXFxcRFwiJywgRHUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIm5vbi1kaWdpdFwiKTtcblx0ICAgICAgICB9LCBIdSA9IFwiXFxcXGZcIiwgT3UgPSAnXCJcXFxcXFxcXGZcIicsIFd1ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJmb3JtLWZlZWRcIik7XG5cdCAgICAgICAgfSwgenUgPSBcIlxcXFxuXCIsIEl1ID0gJ1wiXFxcXFxcXFxuXCInLCBKdSA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwibGluZS1mZWVkXCIpO1xuXHQgICAgICAgIH0sIEt1ID0gXCJcXFxcclwiLCBOdSA9ICdcIlxcXFxcXFxcclwiJywgUHUgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcImNhcnJpYWdlLXJldHVyblwiKTtcblx0ICAgICAgICB9LCBWdSA9IFwiXFxcXHNcIiwgWHUgPSAnXCJcXFxcXFxcXHNcIicsIFl1ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJ3aGl0ZS1zcGFjZVwiKTtcblx0ICAgICAgICB9LCBadSA9IFwiXFxcXFNcIiwgX3UgPSAnXCJcXFxcXFxcXFNcIicsIG50ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJub24td2hpdGUtc3BhY2VcIik7XG5cdCAgICAgICAgfSwgbHQgPSBcIlxcXFx0XCIsIHV0ID0gJ1wiXFxcXFxcXFx0XCInLCB0dCA9IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFwidGFiXCIpO1xuXHQgICAgICAgIH0sIHJ0ID0gXCJcXFxcdlwiLCBldCA9ICdcIlxcXFxcXFxcdlwiJywgb3QgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcInZlcnRpY2FsLXRhYlwiKTtcblx0ICAgICAgICB9LCBjdCA9IFwiXFxcXHdcIiwgaXQgPSAnXCJcXFxcXFxcXHdcIicsIGF0ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJ3b3JkXCIpO1xuXHQgICAgICAgIH0sIGZ0ID0gXCJcXFxcV1wiLCBzdCA9ICdcIlxcXFxcXFxcV1wiJywgaHQgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcIm5vbi13b3JkXCIpO1xuXHQgICAgICAgIH0sIGR0ID0gXCJcXFxcY1wiLCBwdCA9ICdcIlxcXFxcXFxcY1wiJywgdnQgPSBcImFueSBjaGFyYWN0ZXJcIiwgd3QgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQ29udHJvbENoYXJhY3RlcihuKTtcblx0ICAgICAgICB9LCBBdCA9IFwiXFxcXFwiLCBDdCA9ICdcIlxcXFxcXFxcXCInLCBndCA9IC9eWzEtOV0vLCBidCA9IFwiWzEtOV1cIiwga3QgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgQmFja1JlZmVyZW5jZShuKTtcblx0ICAgICAgICB9LCBUdCA9IFwiXFxcXDBcIiwgeHQgPSAnXCJcXFxcXFxcXDBcIicsIHl0ID0gL15bMC03XS8sIG10ID0gXCJbMC03XVwiLCBSdCA9IGZ1bmN0aW9uKG4pIHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBPY3RhbChuLmpvaW4oXCJcIikpO1xuXHQgICAgICAgIH0sIEZ0ID0gXCJcXFxceFwiLCBRdCA9ICdcIlxcXFxcXFxceFwiJywgU3QgPSAvXlswLTlhLWZBLUZdLywgVXQgPSBcIlswLTlhLWZBLUZdXCIsIEV0ID0gZnVuY3Rpb24obikge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IEhleChuLmpvaW4oXCJcIikpO1xuXHQgICAgICAgIH0sIEd0ID0gXCJcXFxcdVwiLCBCdCA9ICdcIlxcXFxcXFxcdVwiJywganQgPSBmdW5jdGlvbihuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVW5pY29kZShuLmpvaW4oXCJcIikpO1xuXHQgICAgICAgIH0sICR0ID0gZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXCJudWxsLWNoYXJhY3RlclwiKTtcblx0ICAgICAgICB9LCBxdCA9IDAsIEx0ID0gMCwgTXQgPSAwLCBEdCA9IHtcblx0ICAgICAgICAgICAgbGluZTogMSxcblx0ICAgICAgICAgICAgY29sdW1uOiAxLFxuXHQgICAgICAgICAgICBzZWVuQ1I6ICExXG5cdCAgICAgICAgfSwgSHQgPSAwLCBPdCA9IFtdLCBXdCA9IDA7XG5cdCAgICAgICAgaWYgKFwic3RhcnRSdWxlXCIgaW4gZWwpIHtcblx0ICAgICAgICAgICAgaWYgKCEoZWwuc3RhcnRSdWxlIGluIG9sKSkgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3Qgc3RhcnQgcGFyc2luZyBmcm9tIHJ1bGUgXFxcIlwiICsgZWwuc3RhcnRSdWxlICsgJ1wiLicpO1xuXHQgICAgICAgICAgICBjbCA9IG9sW2VsLnN0YXJ0UnVsZV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChUb2tlbi5vZmZzZXQgPSB0LCBUb2tlbi50ZXh0ID0gdSwgcmwgPSBjbCgpLCBudWxsICE9PSBybCAmJiBxdCA9PT0gbi5sZW5ndGgpIHJldHVybiBybDtcblx0ICAgICAgICB0aHJvdyBvKE90KSwgTHQgPSBNYXRoLm1heChxdCwgSHQpLCBuZXcgbChPdCwgTHQgPCBuLmxlbmd0aCA/IG4uY2hhckF0KEx0KSA6IG51bGwsIEx0LCByKEx0KS5saW5lLCByKEx0KS5jb2x1bW4pO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIG4obCwgRXJyb3IpLCB7XG5cdCAgICAgICAgU3ludGF4RXJyb3I6IGwsXG5cdCAgICAgICAgcGFyc2U6IHVcblx0ICAgIH07XG5cdH0oKSwgaW5kZXggPSAxLCBjZ3MgPSB7fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHBhcnNlclxuXG4vKioqLyB9KSxcbi8qIDIyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIFJlZ0V4cCBIYW5kbGVyXG5cblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JiZXNMaW5kZXNheS9yZWdleHBcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9kbWFqZGEvcGVnanNcblx0ICAgIGh0dHA6Ly93d3cucmVnZXhwZXIuY29tL1xuXG5cdCAgICDmr4/kuKroioLngrnnmoTnu5PmnoRcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIHR5cGU6ICcnLFxuXHQgICAgICAgICAgICBvZmZzZXQ6IG51bWJlcixcblx0ICAgICAgICAgICAgdGV4dDogJycsXG5cdCAgICAgICAgICAgIGJvZHk6IHt9LFxuXHQgICAgICAgICAgICBlc2NhcGVkOiB0cnVlL2ZhbHNlXG5cdCAgICAgICAgfVxuXG5cdCAgICB0eXBlIOWPr+mAieWAvFxuXHQgICAgICAgIGFsdGVybmF0ZSAgICAgICAgICAgICB8ICAgICAgICAg6YCJ5oupXG5cdCAgICAgICAgbWF0Y2ggICAgICAgICAgICAgICAgIOWMuemFjVxuXHQgICAgICAgIGNhcHR1cmUtZ3JvdXAgICAgICAgICAoKSAgICAgICAg5o2V6I6357uEXG5cdCAgICAgICAgbm9uLWNhcHR1cmUtZ3JvdXAgICAgICg/Oi4uLikgICDpnZ7mjZXojrfnu4Rcblx0ICAgICAgICBwb3NpdGl2ZS1sb29rYWhlYWQgICAgKD89cCkgICAgIOmbtuWuveato+WQkeWFiOihjOaWreiogFxuXHQgICAgICAgIG5lZ2F0aXZlLWxvb2thaGVhZCAgICAoPyFwKSAgICAg6Zu25a696LSf5ZCR5YWI6KGM5pat6KiAXG5cdCAgICAgICAgcXVhbnRpZmllZCAgICAgICAgICAgIGEqICAgICAgICDph43lpI3oioLngrlcblx0ICAgICAgICBxdWFudGlmaWVyICAgICAgICAgICAgKiAgICAgICAgIOmHj+ivjVxuXHQgICAgICAgIGNoYXJzZXQgICAgICAgICAgICAgICBbXSAgICAgICAg5a2X56ym6ZuGXG5cdCAgICAgICAgcmFuZ2UgICAgICAgICAgICAgICAgIHttLCBufSAgICDojIPlm7Rcblx0ICAgICAgICBsaXRlcmFsICAgICAgICAgICAgICAgYSAgICAgICAgIOebtOaOpemHj+Wtl+esplxuXHQgICAgICAgIHVuaWNvZGUgICAgICAgICAgICAgICBcXHV4eHh4ICAgIFVuaWNvZGVcblx0ICAgICAgICBoZXggICAgICAgICAgICAgICAgICAgXFx4ICAgICAgICDljYHlha3ov5vliLZcblx0ICAgICAgICBvY3RhbCAgICAgICAgICAgICAgICAg5YWr6L+b5Yi2XG5cdCAgICAgICAgYmFjay1yZWZlcmVuY2UgICAgICAgIFxcbiAgICAgICAg5Y+N5ZCR5byV55SoXG5cdCAgICAgICAgY29udHJvbC1jaGFyYWN0ZXIgICAgIFxcY1ggICAgICAg5o6n5Yi25a2X56ymXG5cblx0ICAgICAgICAvLyBUb2tlblxuXHQgICAgICAgIHN0YXJ0ICAgICAgICAgICAgICAgXiAgICAgICDlvIDlpLRcblx0ICAgICAgICBlbmQgICAgICAgICAgICAgICAgICQgICAgICAg57uT5bC+XG5cdCAgICAgICAgYW55LWNoYXJhY3RlciAgICAgICAuICAgICAgIOS7u+aEj+Wtl+esplxuXHQgICAgICAgIGJhY2tzcGFjZSAgICAgICAgICAgW1xcYl0gICAg6YCA5qC855u05o6l6YePXG5cdCAgICAgICAgd29yZC1ib3VuZGFyeSAgICAgICBcXGIgICAgICDljZXor43ovrnnlYxcblx0ICAgICAgICBub24td29yZC1ib3VuZGFyeSAgIFxcQiAgICAgIOmdnuWNleivjei+ueeVjFxuXHQgICAgICAgIGRpZ2l0ICAgICAgICAgICAgICAgXFxkICAgICAgQVNDSUkg5pWw5a2X77yMWzAtOV1cblx0ICAgICAgICBub24tZGlnaXQgICAgICAgICAgIFxcRCAgICAgIOmdniBBU0NJSSDmlbDlrZfvvIxbXjAtOV1cblx0ICAgICAgICBmb3JtLWZlZWQgICAgICAgICAgIFxcZiAgICAgIOaNoumhteesplxuXHQgICAgICAgIGxpbmUtZmVlZCAgICAgICAgICAgXFxuICAgICAg5o2i6KGM56ymXG5cdCAgICAgICAgY2FycmlhZ2UtcmV0dXJuICAgICBcXHIgICAgICDlm57ovabnrKZcblx0ICAgICAgICB3aGl0ZS1zcGFjZSAgICAgICAgIFxccyAgICAgIOepuueZveesplxuXHQgICAgICAgIG5vbi13aGl0ZS1zcGFjZSAgICAgXFxTICAgICAg6Z2e56m655m956ymXG5cdCAgICAgICAgdGFiICAgICAgICAgICAgICAgICBcXHQgICAgICDliLbooajnrKZcblx0ICAgICAgICB2ZXJ0aWNhbC10YWIgICAgICAgIFxcdiAgICAgIOWeguebtOWItuihqOesplxuXHQgICAgICAgIHdvcmQgICAgICAgICAgICAgICAgXFx3ICAgICAgQVNDSUkg5a2X56ym77yMW2EtekEtWjAtOV1cblx0ICAgICAgICBub24td29yZCAgICAgICAgICAgIFxcVyAgICAgIOmdniBBU0NJSSDlrZfnrKbvvIxbXmEtekEtWjAtOV1cblx0ICAgICAgICBudWxsLWNoYXJhY3RlciAgICAgIFxcbyAgICAgIE5VTCDlrZfnrKZcblx0ICovXG5cblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cdHZhciBSYW5kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpXG5cdCAgICAvKlxuXHQgICAgICAgIFxuXHQgICAgKi9cblx0dmFyIEhhbmRsZXIgPSB7XG5cdCAgICBleHRlbmQ6IFV0aWwuZXh0ZW5kXG5cdH1cblxuXHQvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FTQ0lJI0FTQ0lJX3ByaW50YWJsZV9jb2RlX2NoYXJ0XG5cdC8qdmFyIEFTQ0lJX0NPTlRST0xfQ09ERV9DSEFSVCA9IHtcblx0ICAgICdAJzogWydcXHUwMDAwJ10sXG5cdCAgICBBOiBbJ1xcdTAwMDEnXSxcblx0ICAgIEI6IFsnXFx1MDAwMiddLFxuXHQgICAgQzogWydcXHUwMDAzJ10sXG5cdCAgICBEOiBbJ1xcdTAwMDQnXSxcblx0ICAgIEU6IFsnXFx1MDAwNSddLFxuXHQgICAgRjogWydcXHUwMDA2J10sXG5cdCAgICBHOiBbJ1xcdTAwMDcnLCAnXFxhJ10sXG5cdCAgICBIOiBbJ1xcdTAwMDgnLCAnXFxiJ10sXG5cdCAgICBJOiBbJ1xcdTAwMDknLCAnXFx0J10sXG5cdCAgICBKOiBbJ1xcdTAwMEEnLCAnXFxuJ10sXG5cdCAgICBLOiBbJ1xcdTAwMEInLCAnXFx2J10sXG5cdCAgICBMOiBbJ1xcdTAwMEMnLCAnXFxmJ10sXG5cdCAgICBNOiBbJ1xcdTAwMEQnLCAnXFxyJ10sXG5cdCAgICBOOiBbJ1xcdTAwMEUnXSxcblx0ICAgIE86IFsnXFx1MDAwRiddLFxuXHQgICAgUDogWydcXHUwMDEwJ10sXG5cdCAgICBROiBbJ1xcdTAwMTEnXSxcblx0ICAgIFI6IFsnXFx1MDAxMiddLFxuXHQgICAgUzogWydcXHUwMDEzJ10sXG5cdCAgICBUOiBbJ1xcdTAwMTQnXSxcblx0ICAgIFU6IFsnXFx1MDAxNSddLFxuXHQgICAgVjogWydcXHUwMDE2J10sXG5cdCAgICBXOiBbJ1xcdTAwMTcnXSxcblx0ICAgIFg6IFsnXFx1MDAxOCddLFxuXHQgICAgWTogWydcXHUwMDE5J10sXG5cdCAgICBaOiBbJ1xcdTAwMUEnXSxcblx0ICAgICdbJzogWydcXHUwMDFCJywgJ1xcZSddLFxuXHQgICAgJ1xcXFwnOiBbJ1xcdTAwMUMnXSxcblx0ICAgICddJzogWydcXHUwMDFEJ10sXG5cdCAgICAnXic6IFsnXFx1MDAxRSddLFxuXHQgICAgJ18nOiBbJ1xcdTAwMUYnXVxuXHR9Ki9cblxuXHQvLyBBU0NJSSBwcmludGFibGUgY29kZSBjaGFydFxuXHQvLyB2YXIgTE9XRVIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cdC8vIHZhciBVUFBFUiA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidcblx0Ly8gdmFyIE5VTUJFUiA9ICcwMTIzNDU2Nzg5J1xuXHQvLyB2YXIgU1lNQk9MID0gJyAhXCIjJCUmXFwnKCkqKywtLi8nICsgJzo7PD0+P0AnICsgJ1tcXFxcXV5fYCcgKyAne3x9fidcblx0dmFyIExPV0VSID0gYXNjaWkoOTcsIDEyMilcblx0dmFyIFVQUEVSID0gYXNjaWkoNjUsIDkwKVxuXHR2YXIgTlVNQkVSID0gYXNjaWkoNDgsIDU3KVxuXHR2YXIgT1RIRVIgPSBhc2NpaSgzMiwgNDcpICsgYXNjaWkoNTgsIDY0KSArIGFzY2lpKDkxLCA5NikgKyBhc2NpaSgxMjMsIDEyNikgLy8g5o6S6ZmkIDk1IF8gYXNjaWkoOTEsIDk0KSArIGFzY2lpKDk2LCA5Nilcblx0dmFyIFBSSU5UQUJMRSA9IGFzY2lpKDMyLCAxMjYpXG5cdHZhciBTUEFDRSA9ICcgXFxmXFxuXFxyXFx0XFx2XFx1MDBBMFxcdTIwMjhcXHUyMDI5J1xuXHR2YXIgQ0hBUkFDVEVSX0NMQVNTRVMgPSB7XG5cdCAgICAnXFxcXHcnOiBMT1dFUiArIFVQUEVSICsgTlVNQkVSICsgJ18nLCAvLyBhc2NpaSg5NSwgOTUpXG5cdCAgICAnXFxcXFcnOiBPVEhFUi5yZXBsYWNlKCdfJywgJycpLFxuXHQgICAgJ1xcXFxzJzogU1BBQ0UsXG5cdCAgICAnXFxcXFMnOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gUFJJTlRBQkxFXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBTUEFDRS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShTUEFDRVtpXSwgJycpXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0oKSxcblx0ICAgICdcXFxcZCc6IE5VTUJFUixcblx0ICAgICdcXFxcRCc6IExPV0VSICsgVVBQRVIgKyBPVEhFUlxuXHR9XG5cblx0ZnVuY3Rpb24gYXNjaWkoZnJvbSwgdG8pIHtcblx0ICAgIHZhciByZXN1bHQgPSAnJ1xuXHQgICAgZm9yICh2YXIgaSA9IGZyb207IGkgPD0gdG87IGkrKykge1xuXHQgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXG5cdCAgICB9XG5cdCAgICByZXR1cm4gcmVzdWx0XG5cdH1cblxuXHQvLyB2YXIgYXN0ID0gUmVnRXhwUGFyc2VyLnBhcnNlKHJlZ2V4cC5zb3VyY2UpXG5cdEhhbmRsZXIuZ2VuID0gZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgY2FjaGUgPSBjYWNoZSB8fCB7XG5cdCAgICAgICAgZ3VpZDogMVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIEhhbmRsZXJbbm9kZS50eXBlXSA/IEhhbmRsZXJbbm9kZS50eXBlXShub2RlLCByZXN1bHQsIGNhY2hlKSA6XG5cdCAgICAgICAgSGFuZGxlci50b2tlbihub2RlLCByZXN1bHQsIGNhY2hlKVxuXHR9XG5cblx0SGFuZGxlci5leHRlbmQoe1xuXHQgICAgLyoganNoaW50IHVudXNlZDpmYWxzZSAqL1xuXHQgICAgdG9rZW46IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlICdzdGFydCc6XG5cdCAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gJydcblx0ICAgICAgICAgICAgY2FzZSAnYW55LWNoYXJhY3Rlcic6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLmNoYXJhY3RlcigpXG5cdCAgICAgICAgICAgIGNhc2UgJ2JhY2tzcGFjZSc6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gJydcblx0ICAgICAgICAgICAgY2FzZSAnd29yZC1ib3VuZGFyeSc6IC8vIFRPRE9cblx0ICAgICAgICAgICAgICAgIHJldHVybiAnJ1xuXHQgICAgICAgICAgICBjYXNlICdub24td29yZC1ib3VuZGFyeSc6IC8vIFRPRE9cblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgJ2RpZ2l0Jzpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICBOVU1CRVIuc3BsaXQoJycpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIGNhc2UgJ25vbi1kaWdpdCc6XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLnBpY2soXG5cdCAgICAgICAgICAgICAgICAgICAgKExPV0VSICsgVVBQRVIgKyBPVEhFUikuc3BsaXQoJycpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIGNhc2UgJ2Zvcm0tZmVlZCc6XG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlICdsaW5lLWZlZWQnOlxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keSB8fCBub2RlLnRleHRcblx0ICAgICAgICAgICAgY2FzZSAnY2FycmlhZ2UtcmV0dXJuJzpcblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgJ3doaXRlLXNwYWNlJzpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICBTUEFDRS5zcGxpdCgnJylcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgY2FzZSAnbm9uLXdoaXRlLXNwYWNlJzpcblx0ICAgICAgICAgICAgICAgIHJldHVybiBSYW5kb20ucGljayhcblx0ICAgICAgICAgICAgICAgICAgICAoTE9XRVIgKyBVUFBFUiArIE5VTUJFUikuc3BsaXQoJycpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIGNhc2UgJ3RhYic6XG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlICd2ZXJ0aWNhbC10YWInOlxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICAgICAgY2FzZSAnd29yZCc6IC8vIFxcdyBbYS16QS1aMC05XVxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmRvbS5waWNrKFxuXHQgICAgICAgICAgICAgICAgICAgIChMT1dFUiArIFVQUEVSICsgTlVNQkVSKS5zcGxpdCgnJylcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgY2FzZSAnbm9uLXdvcmQnOiAvLyBcXFcgW15hLXpBLVowLTldXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gUmFuZG9tLnBpY2soXG5cdCAgICAgICAgICAgICAgICAgICAgT1RIRVIucmVwbGFjZSgnXycsICcnKS5zcGxpdCgnJylcblx0ICAgICAgICAgICAgICAgIClcblx0ICAgICAgICAgICAgY2FzZSAnbnVsbC1jaGFyYWN0ZXInOlxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG5vZGUuYm9keSB8fCBub2RlLnRleHRcblx0ICAgIH0sXG5cdCAgICAvKlxuXHQgICAgICAgIHtcblx0ICAgICAgICAgICAgdHlwZTogJ2FsdGVybmF0ZScsXG5cdCAgICAgICAgICAgIG9mZnNldDogMCxcblx0ICAgICAgICAgICAgdGV4dDogJycsXG5cdCAgICAgICAgICAgIGxlZnQ6IHtcblx0ICAgICAgICAgICAgICAgIGJveWQ6IFtdXG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIHJpZ2h0OiB7XG5cdCAgICAgICAgICAgICAgICBib3lkOiBbXVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgKi9cblx0ICAgIGFsdGVybmF0ZTogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIC8vIG5vZGUubGVmdC9yaWdodCB7fVxuXHQgICAgICAgIHJldHVybiB0aGlzLmdlbihcblx0ICAgICAgICAgICAgUmFuZG9tLmJvb2xlYW4oKSA/IG5vZGUubGVmdCA6IG5vZGUucmlnaHQsXG5cdCAgICAgICAgICAgIHJlc3VsdCxcblx0ICAgICAgICAgICAgY2FjaGVcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLypcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAgIHR5cGU6ICdtYXRjaCcsXG5cdCAgICAgICAgICAgIG9mZnNldDogMCxcblx0ICAgICAgICAgICAgdGV4dDogJycsXG5cdCAgICAgICAgICAgIGJvZHk6IFtdXG5cdCAgICAgICAgfVxuXHQgICAgKi9cblx0ICAgIG1hdGNoOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgcmVzdWx0ID0gJydcblx0ICAgICAgICAgICAgLy8gbm9kZS5ib2R5IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmJvZHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZ2VuKG5vZGUuYm9keVtpXSwgcmVzdWx0LCBjYWNoZSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8vICgpXG5cdCAgICAnY2FwdHVyZS1ncm91cCc6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICAvLyBub2RlLmJvZHkge31cblx0ICAgICAgICByZXN1bHQgPSB0aGlzLmdlbihub2RlLmJvZHksIHJlc3VsdCwgY2FjaGUpXG5cdCAgICAgICAgY2FjaGVbY2FjaGUuZ3VpZCsrXSA9IHJlc3VsdFxuXHQgICAgICAgIHJldHVybiByZXN1bHRcblx0ICAgIH0sXG5cdCAgICAvLyAoPzouLi4pXG5cdCAgICAnbm9uLWNhcHR1cmUtZ3JvdXAnOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgLy8gbm9kZS5ib2R5IHt9XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZ2VuKG5vZGUuYm9keSwgcmVzdWx0LCBjYWNoZSlcblx0ICAgIH0sXG5cdCAgICAvLyAoPz1wKVxuXHQgICAgJ3Bvc2l0aXZlLWxvb2thaGVhZCc6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICAvLyBub2RlLmJvZHlcblx0ICAgICAgICByZXR1cm4gdGhpcy5nZW4obm9kZS5ib2R5LCByZXN1bHQsIGNhY2hlKVxuXHQgICAgfSxcblx0ICAgIC8vICg/IXApXG5cdCAgICAnbmVnYXRpdmUtbG9va2FoZWFkJzogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIC8vIG5vZGUuYm9keVxuXHQgICAgICAgIHJldHVybiAnJ1xuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgICB0eXBlOiAncXVhbnRpZmllZCcsXG5cdCAgICAgICAgICAgIG9mZnNldDogMyxcblx0ICAgICAgICAgICAgdGV4dDogJ2MqJyxcblx0ICAgICAgICAgICAgYm9keToge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuXHQgICAgICAgICAgICAgICAgb2Zmc2V0OiAzLFxuXHQgICAgICAgICAgICAgICAgdGV4dDogJ2MnLFxuXHQgICAgICAgICAgICAgICAgYm9keTogJ2MnLFxuXHQgICAgICAgICAgICAgICAgZXNjYXBlZDogZmFsc2Vcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgcXVhbnRpZmllcjoge1xuXHQgICAgICAgICAgICAgICAgdHlwZTogJ3F1YW50aWZpZXInLFxuXHQgICAgICAgICAgICAgICAgb2Zmc2V0OiA0LFxuXHQgICAgICAgICAgICAgICAgdGV4dDogJyonLFxuXHQgICAgICAgICAgICAgICAgbWluOiAwLFxuXHQgICAgICAgICAgICAgICAgbWF4OiBJbmZpbml0eSxcblx0ICAgICAgICAgICAgICAgIGdyZWVkeTogdHJ1ZVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgKi9cblx0ICAgIHF1YW50aWZpZWQ6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXN1bHQgPSAnJ1xuXHQgICAgICAgICAgICAvLyBub2RlLnF1YW50aWZpZXIge31cblx0ICAgICAgICB2YXIgY291bnQgPSB0aGlzLnF1YW50aWZpZXIobm9kZS5xdWFudGlmaWVyKTtcblx0ICAgICAgICAvLyBub2RlLmJvZHkge31cblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0ICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZ2VuKG5vZGUuYm9keSwgcmVzdWx0LCBjYWNoZSlcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAgcXVhbnRpZmllcjoge1xuXHQgICAgICAgICAgICB0eXBlOiAncXVhbnRpZmllcicsXG5cdCAgICAgICAgICAgIG9mZnNldDogNCxcblx0ICAgICAgICAgICAgdGV4dDogJyonLFxuXHQgICAgICAgICAgICBtaW46IDAsXG5cdCAgICAgICAgICAgIG1heDogSW5maW5pdHksXG5cdCAgICAgICAgICAgIGdyZWVkeTogdHJ1ZVxuXHQgICAgICAgIH1cblx0ICAgICovXG5cdCAgICBxdWFudGlmaWVyOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgdmFyIG1pbiA9IE1hdGgubWF4KG5vZGUubWluLCAwKVxuXHQgICAgICAgIHZhciBtYXggPSBpc0Zpbml0ZShub2RlLm1heCkgPyBub2RlLm1heCA6XG5cdCAgICAgICAgICAgIG1pbiArIFJhbmRvbS5pbnRlZ2VyKDMsIDcpXG5cdCAgICAgICAgcmV0dXJuIFJhbmRvbS5pbnRlZ2VyKG1pbiwgbWF4KVxuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAgXG5cdCAgICAqL1xuXHQgICAgY2hhcnNldDogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIC8vIG5vZGUuaW52ZXJ0XG5cdCAgICAgICAgaWYgKG5vZGUuaW52ZXJ0KSByZXR1cm4gdGhpc1snaW52ZXJ0LWNoYXJzZXQnXShub2RlLCByZXN1bHQsIGNhY2hlKVxuXG5cdCAgICAgICAgLy8gbm9kZS5ib2R5IFtdXG5cdCAgICAgICAgdmFyIGxpdGVyYWwgPSBSYW5kb20ucGljayhub2RlLmJvZHkpXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuZ2VuKGxpdGVyYWwsIHJlc3VsdCwgY2FjaGUpXG5cdCAgICB9LFxuXHQgICAgJ2ludmVydC1jaGFyc2V0JzogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIHZhciBwb29sID0gUFJJTlRBQkxFXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDAsIGl0ZW07IGkgPCBub2RlLmJvZHkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgaXRlbSA9IG5vZGUuYm9keVtpXVxuXHQgICAgICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAnbGl0ZXJhbCc6XG5cdCAgICAgICAgICAgICAgICAgICAgcG9vbCA9IHBvb2wucmVwbGFjZShpdGVtLmJvZHksICcnKVxuXHQgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgICAgICBjYXNlICdyYW5nZSc6XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuZ2VuKGl0ZW0uc3RhcnQsIHJlc3VsdCwgY2FjaGUpLmNoYXJDb2RlQXQoKVxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLmdlbihpdGVtLmVuZCwgcmVzdWx0LCBjYWNoZSkuY2hhckNvZGVBdCgpXG5cdCAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaWkgPSBtaW47IGlpIDw9IG1heDsgaWkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBwb29sID0gcG9vbC5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoaWkpLCAnJylcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXHQgICAgICAgICAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVycyA9IENIQVJBQ1RFUl9DTEFTU0VTW2l0ZW0udGV4dF1cblx0ICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVycykge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaWkgPSAwOyBpaWkgPD0gY2hhcmFjdGVycy5sZW5ndGg7IGlpaSsrKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sID0gcG9vbC5yZXBsYWNlKGNoYXJhY3RlcnNbaWlpXSwgJycpXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFJhbmRvbS5waWNrKHBvb2wuc3BsaXQoJycpKVxuXHQgICAgfSxcblx0ICAgIHJhbmdlOiBmdW5jdGlvbihub2RlLCByZXN1bHQsIGNhY2hlKSB7XG5cdCAgICAgICAgLy8gbm9kZS5zdGFydCwgbm9kZS5lbmRcblx0ICAgICAgICB2YXIgbWluID0gdGhpcy5nZW4obm9kZS5zdGFydCwgcmVzdWx0LCBjYWNoZSkuY2hhckNvZGVBdCgpXG5cdCAgICAgICAgdmFyIG1heCA9IHRoaXMuZ2VuKG5vZGUuZW5kLCByZXN1bHQsIGNhY2hlKS5jaGFyQ29kZUF0KClcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgUmFuZG9tLmludGVnZXIobWluLCBtYXgpXG5cdCAgICAgICAgKVxuXHQgICAgfSxcblx0ICAgIGxpdGVyYWw6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gbm9kZS5lc2NhcGVkID8gbm9kZS5ib2R5IDogbm9kZS50ZXh0XG5cdCAgICB9LFxuXHQgICAgLy8gVW5pY29kZSBcXHVcblx0ICAgIHVuaWNvZGU6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgcGFyc2VJbnQobm9kZS5jb2RlLCAxNilcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLy8g5Y2B5YWt6L+b5Yi2IFxceEZGXG5cdCAgICBoZXg6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgcGFyc2VJbnQobm9kZS5jb2RlLCAxNilcblx0ICAgICAgICApXG5cdCAgICB9LFxuXHQgICAgLy8g5YWr6L+b5Yi2IFxcMFxuXHQgICAgb2N0YWw6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0ICAgICAgICAgICAgcGFyc2VJbnQobm9kZS5jb2RlLCA4KVxuXHQgICAgICAgIClcblx0ICAgIH0sXG5cdCAgICAvLyDlj43lkJHlvJXnlKhcblx0ICAgICdiYWNrLXJlZmVyZW5jZSc6IGZ1bmN0aW9uKG5vZGUsIHJlc3VsdCwgY2FjaGUpIHtcblx0ICAgICAgICByZXR1cm4gY2FjaGVbbm9kZS5jb2RlXSB8fCAnJ1xuXHQgICAgfSxcblx0ICAgIC8qXG5cdCAgICAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DMF9hbmRfQzFfY29udHJvbF9jb2Rlc1xuXHQgICAgKi9cblx0ICAgIENPTlRST0xfQ0hBUkFDVEVSX01BUDogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgdmFyIENPTlRST0xfQ0hBUkFDVEVSID0gJ0AgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIFsgXFxcXCBdIF4gXycuc3BsaXQoJyAnKVxuXHQgICAgICAgIHZhciBDT05UUk9MX0NIQVJBQ1RFUl9VTklDT0RFID0gJ1xcdTAwMDAgXFx1MDAwMSBcXHUwMDAyIFxcdTAwMDMgXFx1MDAwNCBcXHUwMDA1IFxcdTAwMDYgXFx1MDAwNyBcXHUwMDA4IFxcdTAwMDkgXFx1MDAwQSBcXHUwMDBCIFxcdTAwMEMgXFx1MDAwRCBcXHUwMDBFIFxcdTAwMEYgXFx1MDAxMCBcXHUwMDExIFxcdTAwMTIgXFx1MDAxMyBcXHUwMDE0IFxcdTAwMTUgXFx1MDAxNiBcXHUwMDE3IFxcdTAwMTggXFx1MDAxOSBcXHUwMDFBIFxcdTAwMUIgXFx1MDAxQyBcXHUwMDFEIFxcdTAwMUUgXFx1MDAxRicuc3BsaXQoJyAnKVxuXHQgICAgICAgIHZhciBtYXAgPSB7fVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQ09OVFJPTF9DSEFSQUNURVIubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgbWFwW0NPTlRST0xfQ0hBUkFDVEVSW2ldXSA9IENPTlRST0xfQ0hBUkFDVEVSX1VOSUNPREVbaV1cblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIG1hcFxuXHQgICAgfSgpLFxuXHQgICAgJ2NvbnRyb2wtY2hhcmFjdGVyJzogZnVuY3Rpb24obm9kZSwgcmVzdWx0LCBjYWNoZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLkNPTlRST0xfQ0hBUkFDVEVSX01BUFtub2RlLmNvZGVdXG5cdCAgICB9XG5cdH0pXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBIYW5kbGVyXG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpXG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKlxuXHQgICAgIyMgdG9KU09OU2NoZW1hXG5cblx0ICAgIOaKiiBNb2NrLmpzIOmjjuagvOeahOaVsOaNruaooeadv+i9rOaNouaIkCBKU09OIFNjaGVtYeOAglxuXG5cdCAgICA+IFtKU09OIFNjaGVtYV0oaHR0cDovL2pzb24tc2NoZW1hLm9yZy8pXG5cdCAqL1xuXHR2YXIgQ29uc3RhbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXG5cdHZhciBVdGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKVxuXHR2YXIgUGFyc2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KVxuXG5cdGZ1bmN0aW9uIHRvSlNPTlNjaGVtYSh0ZW1wbGF0ZSwgbmFtZSwgcGF0aCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0ICAgIC8vIHR5cGUgcnVsZSBwcm9wZXJ0aWVzIGl0ZW1zXG5cdCAgICBwYXRoID0gcGF0aCB8fCBbXVxuXHQgICAgdmFyIHJlc3VsdCA9IHtcblx0ICAgICAgICBuYW1lOiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgPyBuYW1lLnJlcGxhY2UoQ29uc3RhbnQuUkVfS0VZLCAnJDEnKSA6IG5hbWUsXG5cdCAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuXHQgICAgICAgIHR5cGU6IFV0aWwudHlwZSh0ZW1wbGF0ZSksIC8vIOWPr+iDveS4jeWHhuehru+8jOS+i+WmgiB7ICduYW1lfDEnOiBbe30sIHt9IC4uLl0gfVxuXHQgICAgICAgIHJ1bGU6IFBhcnNlci5wYXJzZShuYW1lKVxuXHQgICAgfVxuXHQgICAgcmVzdWx0LnBhdGggPSBwYXRoLnNsaWNlKDApXG5cdCAgICByZXN1bHQucGF0aC5wdXNoKG5hbWUgPT09IHVuZGVmaW5lZCA/ICdST09UJyA6IHJlc3VsdC5uYW1lKVxuXG5cdCAgICBzd2l0Y2ggKHJlc3VsdC50eXBlKSB7XG5cdCAgICAgICAgY2FzZSAnYXJyYXknOlxuXHQgICAgICAgICAgICByZXN1bHQuaXRlbXMgPSBbXVxuXHQgICAgICAgICAgICBVdGlsLmVhY2godGVtcGxhdGUsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuXHQgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZW1zLnB1c2goXG5cdCAgICAgICAgICAgICAgICAgICAgdG9KU09OU2NoZW1hKHZhbHVlLCBpbmRleCwgcmVzdWx0LnBhdGgpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgY2FzZSAnb2JqZWN0Jzpcblx0ICAgICAgICAgICAgcmVzdWx0LnByb3BlcnRpZXMgPSBbXVxuXHQgICAgICAgICAgICBVdGlsLmVhY2godGVtcGxhdGUsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG5cdCAgICAgICAgICAgICAgICByZXN1bHQucHJvcGVydGllcy5wdXNoKFxuXHQgICAgICAgICAgICAgICAgICAgIHRvSlNPTlNjaGVtYSh2YWx1ZSwgbmFtZSwgcmVzdWx0LnBhdGgpXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICAgIGJyZWFrXG5cdCAgICB9XG5cblx0ICAgIHJldHVybiByZXN1bHRcblxuXHR9XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB0b0pTT05TY2hlbWFcblxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KVxuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Lypcblx0ICAgICMjIHZhbGlkKHRlbXBsYXRlLCBkYXRhKVxuXG5cdCAgICDmoKHpqoznnJ/lrp7mlbDmja4gZGF0YSDmmK/lkKbkuI7mlbDmja7mqKHmnb8gdGVtcGxhdGUg5Yy56YWN44CCXG5cdCAgICBcblx0ICAgIOWunueOsOaAnei3r++8mlxuXHQgICAgMS4g6Kej5p6Q6KeE5YiZ44CCXG5cdCAgICAgICAg5YWI5oqK5pWw5o2u5qih5p2/IHRlbXBsYXRlIOino+aekOS4uuabtOaWueS+v+acuuWZqOino+aekOeahCBKU09OLVNjaGFtZVxuXHQgICAgICAgIG5hbWUgICAgICAgICAgICAgICDlsZ7mgKflkI0gXG5cdCAgICAgICAgdHlwZSAgICAgICAgICAgICAgIOWxnuaAp+WAvOexu+Wei1xuXHQgICAgICAgIHRlbXBsYXRlICAgICAgICAgICDlsZ7mgKflgLzmqKHmnb9cblx0ICAgICAgICBwcm9wZXJ0aWVzICAgICAgICAg5a+56LGh5bGe5oCn5pWw57uEXG5cdCAgICAgICAgaXRlbXMgICAgICAgICAgICAgIOaVsOe7hOWFg+e0oOaVsOe7hFxuXHQgICAgICAgIHJ1bGUgICAgICAgICAgICAgICDlsZ7mgKflgLznlJ/miJDop4TliJlcblx0ICAgIDIuIOmAkuW9kumqjOivgeinhOWImeOAglxuXHQgICAgICAgIOeEtuWQjueUqCBKU09OLVNjaGVtYSDmoKHpqoznnJ/lrp7mlbDmja7vvIzmoKHpqozpobnljIXmi6zlsZ7mgKflkI3jgIHlgLznsbvlnovjgIHlgLzjgIHlgLznlJ/miJDop4TliJnjgIJcblxuXHQgICAg5o+Q56S65L+h5oGvIFxuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL2ZnZS9qc29uLXNjaGVtYS12YWxpZGF0b3IvYmxvYi9tYXN0ZXIvc3JjL21haW4vcmVzb3VyY2VzL2NvbS9naXRodWIvZmdlL2pzb25zY2hlbWEvdmFsaWRhdG9yL3ZhbGlkYXRpb24ucHJvcGVydGllc1xuXHQgICAgW0pTT04tU2NoYW1hIHZhbGlkYXRvcl0oaHR0cDovL2pzb24tc2NoZW1hLXZhbGlkYXRvci5oZXJva3VhcHAuY29tLylcblx0ICAgIFtSZWdleHAgRGVtb10oaHR0cDovL2RlbW9zLmZvcmJlc2xpbmRlc2F5LmNvLnVrL3JlZ2V4cC8pXG5cdCovXG5cdHZhciBDb25zdGFudCA9IF9fd2VicGFja19yZXF1aXJlX18oMilcblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cdHZhciB0b0pTT05TY2hlbWEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKVxuXG5cdGZ1bmN0aW9uIHZhbGlkKHRlbXBsYXRlLCBkYXRhKSB7XG5cdCAgICB2YXIgc2NoZW1hID0gdG9KU09OU2NoZW1hKHRlbXBsYXRlKVxuXHQgICAgdmFyIHJlc3VsdCA9IERpZmYuZGlmZihzY2hlbWEsIGRhdGEpXG5cdCAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgIC8vIGNvbnNvbGUubG9nKHRlbXBsYXRlLCBkYXRhKVxuXHQgICAgICAgIC8vIGNvbnNvbGUud2FybihBc3NlcnQubWVzc2FnZShyZXN1bHRbaV0pKVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHJlc3VsdFxuXHR9XG5cblx0Lypcblx0ICAgICMjIG5hbWVcblx0ICAgICAgICDmnInnlJ/miJDop4TliJnvvJrmr5TovoPop6PmnpDlkI7nmoQgbmFtZVxuXHQgICAgICAgIOaXoOeUn+aIkOinhOWIme+8muebtOaOpeavlOi+g1xuXHQgICAgIyMgdHlwZVxuXHQgICAgICAgIOaXoOexu+Wei+i9rOaNou+8muebtOaOpeavlOi+g1xuXHQgICAgICAgIOacieexu+Wei+i9rOaNou+8muWFiOivleedgOino+aekCB0ZW1wbGF0Ze+8jOeEtuWQjuWGjeajgOafpe+8n1xuXHQgICAgIyMgdmFsdWUgdnMuIHRlbXBsYXRlXG5cdCAgICAgICAg5Z+65pys57G75Z6LXG5cdCAgICAgICAgICAgIOaXoOeUn+aIkOinhOWIme+8muebtOaOpeavlOi+g1xuXHQgICAgICAgICAgICDmnInnlJ/miJDop4TliJnvvJpcblx0ICAgICAgICAgICAgICAgIG51bWJlclxuXHQgICAgICAgICAgICAgICAgICAgIG1pbi1tYXguZG1pbi1kbWF4XG5cdCAgICAgICAgICAgICAgICAgICAgbWluLW1heC5kY291bnRcblx0ICAgICAgICAgICAgICAgICAgICBjb3VudC5kbWluLWRtYXhcblx0ICAgICAgICAgICAgICAgICAgICBjb3VudC5kY291bnRcblx0ICAgICAgICAgICAgICAgICAgICArc3RlcFxuXHQgICAgICAgICAgICAgICAgICAgIOaVtOaVsOmDqOWIhlxuXHQgICAgICAgICAgICAgICAgICAgIOWwj+aVsOmDqOWIhlxuXHQgICAgICAgICAgICAgICAgYm9vbGVhbiBcblx0ICAgICAgICAgICAgICAgIHN0cmluZyAgXG5cdCAgICAgICAgICAgICAgICAgICAgbWluLW1heFxuXHQgICAgICAgICAgICAgICAgICAgIGNvdW50XG5cdCAgICAjIyBwcm9wZXJ0aWVzXG5cdCAgICAgICAg5a+56LGhXG5cdCAgICAgICAgICAgIOacieeUn+aIkOinhOWIme+8muajgOa1i+acn+acm+eahOWxnuaAp+S4quaVsO+8jOe7p+e7remAkuW9klxuXHQgICAgICAgICAgICDml6DnlJ/miJDop4TliJnvvJrmo4DmtYvlhajpg6jnmoTlsZ7mgKfkuKrmlbDvvIznu6fnu63pgJLlvZJcblx0ICAgICMjIGl0ZW1zXG5cdCAgICAgICAg5pWw57uEXG5cdCAgICAgICAgICAgIOacieeUn+aIkOinhOWIme+8mlxuXHQgICAgICAgICAgICAgICAgYCduYW1lfDEnOiBbe30sIHt9IC4uLl1gICAgICAgICAgICAg5YW25Lit5LmL5LiA77yM57un57ut6YCS5b2SXG5cdCAgICAgICAgICAgICAgICBgJ25hbWV8KzEnOiBbe30sIHt9IC4uLl1gICAgICAgICAgICDpobrluo/mo4DmtYvvvIznu6fnu63pgJLlvZJcblx0ICAgICAgICAgICAgICAgIGAnbmFtZXxtaW4tbWF4JzogW3t9LCB7fSAuLi5dYCAgICAgIOajgOa1i+S4quaVsO+8jOe7p+e7remAkuW9klxuXHQgICAgICAgICAgICAgICAgYCduYW1lfGNvdW50JzogW3t9LCB7fSAuLi5dYCAgICAgICAg5qOA5rWL5Liq5pWw77yM57un57ut6YCS5b2SXG5cdCAgICAgICAgICAgIOaXoOeUn+aIkOinhOWIme+8muajgOa1i+WFqOmDqOeahOWFg+e0oOS4quaVsO+8jOe7p+e7remAkuW9klxuXHQqL1xuXHR2YXIgRGlmZiA9IHtcblx0ICAgIGRpZmY6IGZ1bmN0aW9uIGRpZmYoc2NoZW1hLCBkYXRhLCBuYW1lIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHQgICAgICAgIHZhciByZXN1bHQgPSBbXVxuXG5cdCAgICAgICAgLy8g5YWI5qOA5rWL5ZCN56ewIG5hbWUg5ZKM57G75Z6LIHR5cGXvvIzlpoLmnpzljLnphY3vvIzmiY3mnInlv4XopoHnu6fnu63mo4DmtYtcblx0ICAgICAgICBpZiAoXG5cdCAgICAgICAgICAgIHRoaXMubmFtZShzY2hlbWEsIGRhdGEsIG5hbWUsIHJlc3VsdCkgJiZcblx0ICAgICAgICAgICAgdGhpcy50eXBlKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KVxuXHQgICAgICAgICkge1xuXHQgICAgICAgICAgICB0aGlzLnZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KVxuXHQgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMoc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpXG5cdCAgICAgICAgICAgIHRoaXMuaXRlbXMoc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdFxuXHQgICAgfSxcblx0ICAgIC8qIGpzaGludCB1bnVzZWQ6ZmFsc2UgKi9cblx0ICAgIG5hbWU6IGZ1bmN0aW9uKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KSB7XG5cdCAgICAgICAgdmFyIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGhcblxuXHQgICAgICAgIEFzc2VydC5lcXVhbCgnbmFtZScsIHNjaGVtYS5wYXRoLCBuYW1lICsgJycsIHNjaGVtYS5uYW1lICsgJycsIHJlc3VsdClcblxuXHQgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgIH0sXG5cdCAgICB0eXBlOiBmdW5jdGlvbihzY2hlbWEsIGRhdGEsIG5hbWUsIHJlc3VsdCkge1xuXHQgICAgICAgIHZhciBsZW5ndGggPSByZXN1bHQubGVuZ3RoXG5cblx0ICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG5cdCAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cdCAgICAgICAgICAgICAgICAvLyDot7Pov4flkKvmnInjgI7ljaDkvY3nrKbjgI/nmoTlsZ7mgKflgLzvvIzlm6DkuLrjgI7ljaDkvY3nrKbjgI/ov5Tlm57lgLznmoTnsbvlnovlj6/og73lkozmqKHmnb/kuI3kuIDoh7TvvIzkvovlpoIgJ0BpbnQnIOS8mui/lOWbnuS4gOS4quaVtOW9ouWAvFxuXHQgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS50ZW1wbGF0ZS5tYXRjaChDb25zdGFudC5SRV9QTEFDRUhPTERFUikpIHJldHVybiB0cnVlXG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICBjYXNlICdhcnJheSc6XG5cdCAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLnJ1bGUucGFyYW1ldGVycykge1xuXHQgICAgICAgICAgICAgICAgICAgIC8vIG5hbWV8Y291bnQ6IGFycmF5XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5ydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYS5ydWxlLm1heCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIC8vIOi3s+i/hyBuYW1lfDE6IGFycmF577yM5Zug5Li65pyA57uI5YC855qE57G75Z6L77yI5b6I5Y+v6IO977yJ5LiN5piv5pWw57uE77yM5Lmf5LiN5LiA5a6a5LiOIGBhcnJheWAg5Lit55qE57G75Z6L5LiA6Ie0XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEucnVsZS5jb3VudCA9PT0gMSkgcmV0dXJuIHRydWVcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgLy8g6Lez6L+HIG5hbWV8K2luYzogYXJyYXlcblx0ICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLnJ1bGUucGFyYW1ldGVyc1syXSkgcmV0dXJuIHRydWVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcblx0ICAgICAgICAgICAgICAgIC8vIOi3s+i/hyBgJ25hbWUnOiBmdW5jdGlvbmDvvIzlm6DkuLrlh73mlbDlj6/ku6Xov5Tlm57ku7vkvZXnsbvlnovnmoTlgLzjgIJcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgQXNzZXJ0LmVxdWFsKCd0eXBlJywgc2NoZW1hLnBhdGgsIFV0aWwudHlwZShkYXRhKSwgc2NoZW1hLnR5cGUsIHJlc3VsdClcblxuXHQgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgIH0sXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24oc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpIHtcblx0ICAgICAgICB2YXIgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aFxuXG5cdCAgICAgICAgdmFyIHJ1bGUgPSBzY2hlbWEucnVsZVxuXHQgICAgICAgIHZhciB0ZW1wbGF0ZVR5cGUgPSBzY2hlbWEudHlwZVxuXHQgICAgICAgIGlmICh0ZW1wbGF0ZVR5cGUgPT09ICdvYmplY3QnIHx8IHRlbXBsYXRlVHlwZSA9PT0gJ2FycmF5JyB8fCB0ZW1wbGF0ZVR5cGUgPT09ICdmdW5jdGlvbicpIHJldHVybiB0cnVlXG5cblx0ICAgICAgICAvLyDml6DnlJ/miJDop4TliJlcblx0ICAgICAgICBpZiAoIXJ1bGUucGFyYW1ldGVycykge1xuXHQgICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlVHlwZSkge1xuXHQgICAgICAgICAgICAgICAgY2FzZSAncmVnZXhwJzpcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQubWF0Y2goJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIGRhdGEsIHNjaGVtYS50ZW1wbGF0ZSwgcmVzdWx0KVxuXHQgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cdCAgICAgICAgICAgICAgICAgICAgLy8g5ZCM5qC36Lez6L+H5ZCr5pyJ44CO5Y2g5L2N56ym44CP55qE5bGe5oCn5YC877yM5Zug5Li644CO5Y2g5L2N56ym44CP55qE6L+U5Zue5YC85Lya6YCa5bi45Lya5LiO5qih5p2/5LiN5LiA6Ie0XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS50ZW1wbGF0ZS5tYXRjaChDb25zdGFudC5SRV9QTEFDRUhPTERFUikpIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIEFzc2VydC5lcXVhbCgndmFsdWUnLCBzY2hlbWEucGF0aCwgZGF0YSwgc2NoZW1hLnRlbXBsYXRlLCByZXN1bHQpXG5cdCAgICAgICAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmnInnlJ/miJDop4TliJlcblx0ICAgICAgICB2YXIgYWN0dWFsUmVwZWF0Q291bnRcblx0ICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlVHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlICdudW1iZXInOlxuXHQgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gKGRhdGEgKyAnJykuc3BsaXQoJy4nKVxuXHQgICAgICAgICAgICAgICAgcGFydHNbMF0gPSArcGFydHNbMF1cblxuXHQgICAgICAgICAgICAgICAgLy8g5pW05pWw6YOo5YiGXG5cdCAgICAgICAgICAgICAgICAvLyB8bWluLW1heFxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIEFzc2VydC5ncmVhdGVyVGhhbk9yRXF1YWxUbygndmFsdWUnLCBzY2hlbWEucGF0aCwgcGFydHNbMF0sIE1hdGgubWluKHJ1bGUubWluLCBydWxlLm1heCksIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgICAgICAgICAgLy8gLCAnbnVtZXJpYyBpbnN0YW5jZSBpcyBsb3dlciB0aGFuIHRoZSByZXF1aXJlZCBtaW5pbXVtIChtaW5pbXVtOiB7ZXhwZWN0ZWR9LCBmb3VuZDoge2FjdHVhbH0pJylcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQubGVzc1RoYW5PckVxdWFsVG8oJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzBdLCBNYXRoLm1heChydWxlLm1pbiwgcnVsZS5tYXgpLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzBdLCBydWxlLm1pbiwgcmVzdWx0LCAnW3ZhbHVlXSAnICsgbmFtZSlcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8g5bCP5pWw6YOo5YiGXG5cdCAgICAgICAgICAgICAgICBpZiAocnVsZS5kZWNpbWFsKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gfGRtaW4tZG1heFxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmRtaW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLmRtYXggIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZ3JlYXRlclRoYW5PckVxdWFsVG8oJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzFdLmxlbmd0aCwgcnVsZS5kbWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5sZXNzVGhhbk9yRXF1YWxUbygndmFsdWUnLCBzY2hlbWEucGF0aCwgcGFydHNbMV0ubGVuZ3RoLCBydWxlLmRtYXgsIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gfGRjb3VudFxuXHQgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmRtaW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLmRtYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ3ZhbHVlJywgc2NoZW1hLnBhdGgsIHBhcnRzWzFdLmxlbmd0aCwgcnVsZS5kbWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICBicmVha1xuXG5cdCAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblxuXHQgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuXHQgICAgICAgICAgICAgICAgLy8gJ2FhYScubWF0Y2goL2EvZylcblx0ICAgICAgICAgICAgICAgIGFjdHVhbFJlcGVhdENvdW50ID0gZGF0YS5tYXRjaChuZXcgUmVnRXhwKHNjaGVtYS50ZW1wbGF0ZSwgJ2cnKSlcblx0ICAgICAgICAgICAgICAgIGFjdHVhbFJlcGVhdENvdW50ID0gYWN0dWFsUmVwZWF0Q291bnQgPyBhY3R1YWxSZXBlYXRDb3VudC5sZW5ndGggOiAwXG5cblx0ICAgICAgICAgICAgICAgIC8vIHxtaW4tbWF4XG5cdCAgICAgICAgICAgICAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmdyZWF0ZXJUaGFuT3JFcXVhbFRvKCdyZXBlYXQgY291bnQnLCBzY2hlbWEucGF0aCwgYWN0dWFsUmVwZWF0Q291bnQsIHJ1bGUubWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICAgICAgQXNzZXJ0Lmxlc3NUaGFuT3JFcXVhbFRvKCdyZXBlYXQgY291bnQnLCBzY2hlbWEucGF0aCwgYWN0dWFsUmVwZWF0Q291bnQsIHJ1bGUubWF4LCByZXN1bHQpXG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ3JlcGVhdCBjb3VudCcsIHNjaGVtYS5wYXRoLCBhY3R1YWxSZXBlYXRDb3VudCwgcnVsZS5taW4sIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblxuXHQgICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuXHQgICAgICAgICAgICAgICAgYWN0dWFsUmVwZWF0Q291bnQgPSBkYXRhLm1hdGNoKG5ldyBSZWdFeHAoc2NoZW1hLnRlbXBsYXRlLnNvdXJjZS5yZXBsYWNlKC9eXFxefFxcJCQvZywgJycpLCAnZycpKVxuXHQgICAgICAgICAgICAgICAgYWN0dWFsUmVwZWF0Q291bnQgPSBhY3R1YWxSZXBlYXRDb3VudCA/IGFjdHVhbFJlcGVhdENvdW50Lmxlbmd0aCA6IDBcblxuXHQgICAgICAgICAgICAgICAgLy8gfG1pbi1tYXhcblx0ICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQuZ3JlYXRlclRoYW5PckVxdWFsVG8oJ3JlcGVhdCBjb3VudCcsIHNjaGVtYS5wYXRoLCBhY3R1YWxSZXBlYXRDb3VudCwgcnVsZS5taW4sIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgICAgICBBc3NlcnQubGVzc1RoYW5PckVxdWFsVG8oJ3JlcGVhdCBjb3VudCcsIHNjaGVtYS5wYXRoLCBhY3R1YWxSZXBlYXRDb3VudCwgcnVsZS5tYXgsIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIC8vIHxjb3VudFxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgICAgIEFzc2VydC5lcXVhbCgncmVwZWF0IGNvdW50Jywgc2NoZW1hLnBhdGgsIGFjdHVhbFJlcGVhdENvdW50LCBydWxlLm1pbiwgcmVzdWx0KVxuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gbGVuZ3RoXG5cdCAgICB9LFxuXHQgICAgcHJvcGVydGllczogZnVuY3Rpb24oc2NoZW1hLCBkYXRhLCBuYW1lLCByZXN1bHQpIHtcblx0ICAgICAgICB2YXIgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aFxuXG5cdCAgICAgICAgdmFyIHJ1bGUgPSBzY2hlbWEucnVsZVxuXHQgICAgICAgIHZhciBrZXlzID0gVXRpbC5rZXlzKGRhdGEpXG5cdCAgICAgICAgaWYgKCFzY2hlbWEucHJvcGVydGllcykgcmV0dXJuXG5cblx0ICAgICAgICAvLyDml6DnlJ/miJDop4TliJlcblx0ICAgICAgICBpZiAoIXNjaGVtYS5ydWxlLnBhcmFtZXRlcnMpIHtcblx0ICAgICAgICAgICAgQXNzZXJ0LmVxdWFsKCdwcm9wZXJ0aWVzIGxlbmd0aCcsIHNjaGVtYS5wYXRoLCBrZXlzLmxlbmd0aCwgc2NoZW1hLnByb3BlcnRpZXMubGVuZ3RoLCByZXN1bHQpXG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgLy8g5pyJ55Sf5oiQ6KeE5YiZXG5cdCAgICAgICAgICAgIC8vIHxtaW4tbWF4XG5cdCAgICAgICAgICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkICYmIHJ1bGUubWF4ICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgIEFzc2VydC5ncmVhdGVyVGhhbk9yRXF1YWxUbygncHJvcGVydGllcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwga2V5cy5sZW5ndGgsIE1hdGgubWluKHJ1bGUubWluLCBydWxlLm1heCksIHJlc3VsdClcblx0ICAgICAgICAgICAgICAgIEFzc2VydC5sZXNzVGhhbk9yRXF1YWxUbygncHJvcGVydGllcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwga2V5cy5sZW5ndGgsIE1hdGgubWF4KHJ1bGUubWluLCBydWxlLm1heCksIHJlc3VsdClcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gfDEsIHw+MVxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY291bnQgIT09IDEpIEFzc2VydC5lcXVhbCgncHJvcGVydGllcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwga2V5cy5sZW5ndGgsIHJ1bGUubWluLCByZXN1bHQpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPT0gbGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICByZXN1bHQucHVzaC5hcHBseShcblx0ICAgICAgICAgICAgICAgIHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgIHRoaXMuZGlmZihcblx0ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIFV0aWwuZWFjaChzY2hlbWEucHJvcGVydGllcywgZnVuY3Rpb24oaXRlbSAvKiwgaW5kZXgqLyApIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT09IGtleXNbaV0pIHByb3BlcnR5ID0gaXRlbVxuXHQgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHkgfHwgc2NoZW1hLnByb3BlcnRpZXNbaV1cblx0ICAgICAgICAgICAgICAgICAgICB9KCksXG5cdCAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXlzW2ldXSxcblx0ICAgICAgICAgICAgICAgICAgICBrZXlzW2ldXG5cdCAgICAgICAgICAgICAgICApXG5cdCAgICAgICAgICAgIClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gbGVuZ3RoXG5cdCAgICB9LFxuXHQgICAgaXRlbXM6IGZ1bmN0aW9uKHNjaGVtYSwgZGF0YSwgbmFtZSwgcmVzdWx0KSB7XG5cdCAgICAgICAgdmFyIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGhcblxuXHQgICAgICAgIGlmICghc2NoZW1hLml0ZW1zKSByZXR1cm5cblxuXHQgICAgICAgIHZhciBydWxlID0gc2NoZW1hLnJ1bGVcblxuXHQgICAgICAgIC8vIOaXoOeUn+aIkOinhOWImVxuXHQgICAgICAgIGlmICghc2NoZW1hLnJ1bGUucGFyYW1ldGVycykge1xuXHQgICAgICAgICAgICBBc3NlcnQuZXF1YWwoJ2l0ZW1zIGxlbmd0aCcsIHNjaGVtYS5wYXRoLCBkYXRhLmxlbmd0aCwgc2NoZW1hLml0ZW1zLmxlbmd0aCwgcmVzdWx0KVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIC8vIOacieeUn+aIkOinhOWImVxuXHQgICAgICAgICAgICAvLyB8bWluLW1heFxuXHQgICAgICAgICAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCAmJiBydWxlLm1heCAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICBBc3NlcnQuZ3JlYXRlclRoYW5PckVxdWFsVG8oJ2l0ZW1zJywgc2NoZW1hLnBhdGgsIGRhdGEubGVuZ3RoLCAoTWF0aC5taW4ocnVsZS5taW4sIHJ1bGUubWF4KSAqIHNjaGVtYS5pdGVtcy5sZW5ndGgpLCByZXN1bHQsXG5cdCAgICAgICAgICAgICAgICAgICAgJ1t7dXR5cGV9XSBhcnJheSBpcyB0b28gc2hvcnQ6IHtwYXRofSBtdXN0IGhhdmUgYXQgbGVhc3Qge2V4cGVjdGVkfSBlbGVtZW50cyBidXQgaW5zdGFuY2UgaGFzIHthY3R1YWx9IGVsZW1lbnRzJylcblx0ICAgICAgICAgICAgICAgIEFzc2VydC5sZXNzVGhhbk9yRXF1YWxUbygnaXRlbXMnLCBzY2hlbWEucGF0aCwgZGF0YS5sZW5ndGgsIChNYXRoLm1heChydWxlLm1pbiwgcnVsZS5tYXgpICogc2NoZW1hLml0ZW1zLmxlbmd0aCksIHJlc3VsdCxcblx0ICAgICAgICAgICAgICAgICAgICAnW3t1dHlwZX1dIGFycmF5IGlzIHRvbyBsb25nOiB7cGF0aH0gbXVzdCBoYXZlIGF0IG1vc3Qge2V4cGVjdGVkfSBlbGVtZW50cyBidXQgaW5zdGFuY2UgaGFzIHthY3R1YWx9IGVsZW1lbnRzJylcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyB8Y291bnRcblx0ICAgICAgICAgICAgaWYgKHJ1bGUubWluICE9PSB1bmRlZmluZWQgJiYgcnVsZS5tYXggPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgLy8gfDEsIHw+MVxuXHQgICAgICAgICAgICAgICAgaWYgKHJ1bGUuY291bnQgPT09IDEpIHJldHVybiByZXN1bHQubGVuZ3RoID09PSBsZW5ndGhcblx0ICAgICAgICAgICAgICAgIGVsc2UgQXNzZXJ0LmVxdWFsKCdpdGVtcyBsZW5ndGgnLCBzY2hlbWEucGF0aCwgZGF0YS5sZW5ndGgsIChydWxlLm1pbiAqIHNjaGVtYS5pdGVtcy5sZW5ndGgpLCByZXN1bHQpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgLy8gfCtpbmNcblx0ICAgICAgICAgICAgaWYgKHJ1bGUucGFyYW1ldGVyc1syXSkgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IGxlbmd0aFxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZVxuXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdC5wdXNoLmFwcGx5KFxuXHQgICAgICAgICAgICAgICAgcmVzdWx0LFxuXHQgICAgICAgICAgICAgICAgdGhpcy5kaWZmKFxuXHQgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5pdGVtc1tpICUgc2NoZW1hLml0ZW1zLmxlbmd0aF0sXG5cdCAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSxcblx0ICAgICAgICAgICAgICAgICAgICBpICUgc2NoZW1hLml0ZW1zLmxlbmd0aFxuXHQgICAgICAgICAgICAgICAgKVxuXHQgICAgICAgICAgICApXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IGxlbmd0aFxuXHQgICAgfVxuXHR9XG5cblx0Lypcblx0ICAgIOWujOWWhOOAgeWPi+WlveeahOaPkOekuuS/oeaBr1xuXHQgICAgXG5cdCAgICBFcXVhbCwgbm90IGVxdWFsIHRvLCBncmVhdGVyIHRoYW4sIGxlc3MgdGhhbiwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvLCBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cblx0ICAgIOi3r+W+hCDpqozor4Hnsbvlnosg5o+P6L+wIFxuXG5cdCAgICBFeHBlY3QgcGF0aC5uYW1lIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBleHBlY3RlZCwgYnV0IHBhdGgubmFtZSBpcyBhY3R1YWwuXG5cblx0ICAgIEV4cGVjdCBwYXRoLm5hbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGV4cGVjdGVkLCBidXQgcGF0aC5uYW1lIGlzIGFjdHVhbC5cblx0ICAgIEV4cGVjdCBwYXRoLm5hbWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGV4cGVjdGVkLCBidXQgcGF0aC5uYW1lIGlzIGFjdHVhbC5cblxuXHQqL1xuXHR2YXIgQXNzZXJ0ID0ge1xuXHQgICAgbWVzc2FnZTogZnVuY3Rpb24oaXRlbSkge1xuXHQgICAgICAgIHJldHVybiAoaXRlbS5tZXNzYWdlIHx8XG5cdCAgICAgICAgICAgICAgICAnW3t1dHlwZX1dIEV4cGVjdCB7cGF0aH1cXCd7bHR5cGV9IHthY3Rpb259IHtleHBlY3RlZH0sIGJ1dCBpcyB7YWN0dWFsfScpXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7dXR5cGV9JywgaXRlbS50eXBlLnRvVXBwZXJDYXNlKCkpXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7bHR5cGV9JywgaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7cGF0aH0nLCBVdGlsLmlzQXJyYXkoaXRlbS5wYXRoKSAmJiBpdGVtLnBhdGguam9pbignLicpIHx8IGl0ZW0ucGF0aClcblx0ICAgICAgICAgICAgLnJlcGxhY2UoJ3thY3Rpb259JywgaXRlbS5hY3Rpb24pXG5cdCAgICAgICAgICAgIC5yZXBsYWNlKCd7ZXhwZWN0ZWR9JywgaXRlbS5leHBlY3RlZClcblx0ICAgICAgICAgICAgLnJlcGxhY2UoJ3thY3R1YWx9JywgaXRlbS5hY3R1YWwpXG5cdCAgICB9LFxuXHQgICAgZXF1YWw6IGZ1bmN0aW9uKHR5cGUsIHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQsIHJlc3VsdCwgbWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHN3aXRjaCAodHlwZSkge1xuXHQgICAgICAgICAgICBjYXNlICd0eXBlJzpcblx0ICAgICAgICAgICAgICAgIC8vIOato+WImeaooeadvyA9PT0g5a2X56ym5Liy5pyA57uI5YC8XG5cdCAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQgPT09ICdyZWdleHAnICYmIGFjdHVhbCA9PT0gJ3N0cmluZycpIHJldHVybiB0cnVlXG5cdCAgICAgICAgICAgICAgICBicmVha1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBlcXVhbCB0bycsXG5cdCAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2Vcblx0ICAgICAgICB9XG5cdCAgICAgICAgaXRlbS5tZXNzYWdlID0gQXNzZXJ0Lm1lc3NhZ2UoaXRlbSlcblx0ICAgICAgICByZXN1bHQucHVzaChpdGVtKVxuXHQgICAgICAgIHJldHVybiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIC8vIGFjdHVhbCBtYXRjaGVzIGV4cGVjdGVkXG5cdCAgICBtYXRjaDogZnVuY3Rpb24odHlwZSwgcGF0aCwgYWN0dWFsLCBleHBlY3RlZCwgcmVzdWx0LCBtZXNzYWdlKSB7XG5cdCAgICAgICAgaWYgKGV4cGVjdGVkLnRlc3QoYWN0dWFsKSkgcmV0dXJuIHRydWVcblxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdtYXRjaGVzJyxcblx0ICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpdGVtLm1lc3NhZ2UgPSBBc3NlcnQubWVzc2FnZShpdGVtKVxuXHQgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pXG5cdCAgICAgICAgcmV0dXJuIGZhbHNlXG5cdCAgICB9LFxuXHQgICAgbm90RXF1YWw6IGZ1bmN0aW9uKHR5cGUsIHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQsIHJlc3VsdCwgbWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBub3QgZXF1YWwgdG8nLFxuXHQgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGl0ZW0ubWVzc2FnZSA9IEFzc2VydC5tZXNzYWdlKGl0ZW0pXG5cdCAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICByZXR1cm4gZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBncmVhdGVyVGhhbjogZnVuY3Rpb24odHlwZSwgcGF0aCwgYWN0dWFsLCBleHBlY3RlZCwgcmVzdWx0LCBtZXNzYWdlKSB7XG5cdCAgICAgICAgaWYgKGFjdHVhbCA+IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBncmVhdGVyIHRoYW4nLFxuXHQgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGl0ZW0ubWVzc2FnZSA9IEFzc2VydC5tZXNzYWdlKGl0ZW0pXG5cdCAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICByZXR1cm4gZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBsZXNzVGhhbjogZnVuY3Rpb24odHlwZSwgcGF0aCwgYWN0dWFsLCBleHBlY3RlZCwgcmVzdWx0LCBtZXNzYWdlKSB7XG5cdCAgICAgICAgaWYgKGFjdHVhbCA8IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBsZXNzIHRvJyxcblx0ICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpdGVtLm1lc3NhZ2UgPSBBc3NlcnQubWVzc2FnZShpdGVtKVxuXHQgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pXG5cdCAgICAgICAgcmV0dXJuIGZhbHNlXG5cdCAgICB9LFxuXHQgICAgZ3JlYXRlclRoYW5PckVxdWFsVG86IGZ1bmN0aW9uKHR5cGUsIHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQsIHJlc3VsdCwgbWVzc2FnZSkge1xuXHQgICAgICAgIGlmIChhY3R1YWwgPj0gZXhwZWN0ZWQpIHJldHVybiB0cnVlXG5cdCAgICAgICAgdmFyIGl0ZW0gPSB7XG5cdCAgICAgICAgICAgIHBhdGg6IHBhdGgsXG5cdCAgICAgICAgICAgIHR5cGU6IHR5cGUsXG5cdCAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuXHQgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG5cdCAgICAgICAgICAgIGFjdGlvbjogJ2lzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycsXG5cdCAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2Vcblx0ICAgICAgICB9XG5cdCAgICAgICAgaXRlbS5tZXNzYWdlID0gQXNzZXJ0Lm1lc3NhZ2UoaXRlbSlcblx0ICAgICAgICByZXN1bHQucHVzaChpdGVtKVxuXHQgICAgICAgIHJldHVybiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIGxlc3NUaGFuT3JFcXVhbFRvOiBmdW5jdGlvbih0eXBlLCBwYXRoLCBhY3R1YWwsIGV4cGVjdGVkLCByZXN1bHQsIG1lc3NhZ2UpIHtcblx0ICAgICAgICBpZiAoYWN0dWFsIDw9IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZVxuXHQgICAgICAgIHZhciBpdGVtID0ge1xuXHQgICAgICAgICAgICBwYXRoOiBwYXRoLFxuXHQgICAgICAgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcblx0ICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuXHQgICAgICAgICAgICBhY3Rpb246ICdpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8nLFxuXHQgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGl0ZW0ubWVzc2FnZSA9IEFzc2VydC5tZXNzYWdlKGl0ZW0pXG5cdCAgICAgICAgcmVzdWx0LnB1c2goaXRlbSlcblx0ICAgICAgICByZXR1cm4gZmFsc2Vcblx0ICAgIH1cblx0fVxuXG5cdHZhbGlkLkRpZmYgPSBEaWZmXG5cdHZhbGlkLkFzc2VydCA9IEFzc2VydFxuXG5cdG1vZHVsZS5leHBvcnRzID0gdmFsaWRcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOClcblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qIGdsb2JhbCB3aW5kb3csIGRvY3VtZW50LCBsb2NhdGlvbiwgRXZlbnQsIHNldFRpbWVvdXQgKi9cblx0Lypcblx0ICAgICMjIE1vY2tYTUxIdHRwUmVxdWVzdFxuXG5cdCAgICDmnJ/mnJvnmoTlip/og73vvJpcblx0ICAgIDEuIOWujOaVtOWcsOimhuebluWOn+eUnyBYSFIg55qE6KGM5Li6XG5cdCAgICAyLiDlrozmlbTlnLDmqKHmi5/ljp/nlJ8gWEhSIOeahOihjOS4ulxuXHQgICAgMy4g5Zyo5Y+R6LW36K+35rGC5pe277yM6Ieq5Yqo5qOA5rWL5piv5ZCm6ZyA6KaB5oum5oiqXG5cdCAgICA0LiDlpoLmnpzkuI3lv4Xmi6bmiKrvvIzliJnmiafooYzljp/nlJ8gWEhSIOeahOihjOS4ulxuXHQgICAgNS4g5aaC5p6c6ZyA6KaB5oum5oiq77yM5YiZ5omn6KGM6Jma5oufIFhIUiDnmoTooYzkuLpcblx0ICAgIDYuIOWFvOWuuSBYTUxIdHRwUmVxdWVzdCDlkowgQWN0aXZlWE9iamVjdFxuXHQgICAgICAgIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKVxuXHQgICAgICAgIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdChcIk1pY3Jvc29mdC5YTUxIVFRQXCIpXG5cblx0ICAgIOWFs+mUruaWueazleeahOmAu+i+ke+8mlxuXHQgICAgKiBuZXcgICDmraTml7blsJrml6Dms5Xnoa7lrprmmK/lkKbpnIDopoHmi6bmiKrvvIzmiYDku6XliJvlu7rljp/nlJ8gWEhSIOWvueixoeaYr+W/hemhu+eahOOAglxuXHQgICAgKiBvcGVuICDmraTml7blj6/ku6Xlj5bliLAgVVJM77yM5Y+v5Lul5Yaz5a6a5piv5ZCm6L+b6KGM5oum5oiq44CCXG5cdCAgICAqIHNlbmQgIOatpOaXtuW3sue7j+ehruWumuS6huivt+axguaWueW8j+OAglxuXG5cdCAgICDop4TojIPvvJpcblx0ICAgIGh0dHA6Ly94aHIuc3BlYy53aGF0d2cub3JnL1xuXHQgICAgaHR0cDovL3d3dy53My5vcmcvVFIvWE1MSHR0cFJlcXVlc3QyL1xuXG5cdCAgICDlj4LogIPlrp7njrDvvJpcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaWtvbi9Nb2NrSHR0cFJlcXVlc3QvYmxvYi9tYXN0ZXIvbGliL21vY2suanNcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90cmVrL0Zha2VYTUxIdHRwUmVxdWVzdC9ibG9iL21hc3Rlci9mYWtlX3htbF9odHRwX3JlcXVlc3QuanNcblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9pbGluc2t5L3htbGh0dHByZXF1ZXN0L2Jsb2IvbWFzdGVyL1hNTEh0dHBSZXF1ZXN0LmpzXG5cdCAgICBodHRwczovL2dpdGh1Yi5jb20vZmlyZWJ1Zy9maXJlYnVnLWxpdGUvYmxvYi9tYXN0ZXIvY29udGVudC9saXRlL3hoci5qc1xuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL3RoeC9SQVAvYmxvYi9tYXN0ZXIvbGFiL3JhcC5wbHVnaW4ueGluZ2xpZS5qc1xuXG5cdCAgICAqKumcgOS4jemcgOimgeWFqOmdoumHjeWGmSBYTUxIdHRwUmVxdWVzdO+8nyoqXG5cdCAgICAgICAgaHR0cDovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS14bWxodHRwcmVxdWVzdFxuXHQgICAgICAgIOWFs+mUruWxnuaApyByZWFkeVN0YXRl44CBc3RhdHVz44CBc3RhdHVzVGV4dOOAgXJlc3BvbnNl44CBcmVzcG9uc2VUZXh044CBcmVzcG9uc2VYTUwg5pivIHJlYWRvbmx577yM5omA5Lul77yM6K+V5Zu+6YCa6L+H5L+u5pS56L+Z5Lqb54q25oCB77yM5p2l5qih5ouf5ZON5bqU5piv5LiN5Y+v6KGM55qE44CCXG5cdCAgICAgICAg5Zug5q2k77yM5ZSv5LiA55qE5Yqe5rOV5piv5qih5ouf5pW05LiqIFhNTEh0dHBSZXF1ZXN077yM5bCx5YOPIGpRdWVyeSDlr7nkuovku7bmqKHlnovnmoTlsIHoo4XjgIJcblxuXHQgICAgLy8gRXZlbnQgaGFuZGxlcnNcblx0ICAgIG9ubG9hZHN0YXJ0ICAgICAgICAgbG9hZHN0YXJ0XG5cdCAgICBvbnByb2dyZXNzICAgICAgICAgIHByb2dyZXNzXG5cdCAgICBvbmFib3J0ICAgICAgICAgICAgIGFib3J0XG5cdCAgICBvbmVycm9yICAgICAgICAgICAgIGVycm9yXG5cdCAgICBvbmxvYWQgICAgICAgICAgICAgIGxvYWRcblx0ICAgIG9udGltZW91dCAgICAgICAgICAgdGltZW91dFxuXHQgICAgb25sb2FkZW5kICAgICAgICAgICBsb2FkZW5kXG5cdCAgICBvbnJlYWR5c3RhdGVjaGFuZ2UgIHJlYWR5c3RhdGVjaGFuZ2Vcblx0ICovXG5cblx0dmFyIFV0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpXG5cblx0Ly8g5aSH5Lu95Y6f55SfIFhNTEh0dHBSZXF1ZXN0XG5cdHdpbmRvdy5fWE1MSHR0cFJlcXVlc3QgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3Rcblx0d2luZG93Ll9BY3RpdmVYT2JqZWN0ID0gd2luZG93LkFjdGl2ZVhPYmplY3RcblxuXHQvKlxuXHQgICAgUGhhbnRvbUpTXG5cdCAgICBUeXBlRXJyb3I6ICdbb2JqZWN0IEV2ZW50Q29uc3RydWN0b3JdJyBpcyBub3QgYSBjb25zdHJ1Y3RvciAoZXZhbHVhdGluZyAnbmV3IEV2ZW50KFwicmVhZHlzdGF0ZWNoYW5nZVwiKScpXG5cblx0ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlcmFpbC90d2l0dGVyLWJvb3RzdHJhcC1yYWlscy1jb25maXJtL2lzc3Vlcy8xOFxuXHQgICAgaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3BoYW50b21qcy9pc3N1ZXMvMTEyODlcblx0Ki9cblx0dHJ5IHtcblx0ICAgIG5ldyB3aW5kb3cuRXZlbnQoJ2N1c3RvbScpXG5cdH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuXHQgICAgd2luZG93LkV2ZW50ID0gZnVuY3Rpb24odHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZGV0YWlsKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50JykgLy8gTVVTVCBiZSAnQ3VzdG9tRXZlbnQnXG5cdCAgICAgICAgZXZlbnQuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRldGFpbClcblx0ICAgICAgICByZXR1cm4gZXZlbnRcblx0ICAgIH1cblx0fVxuXG5cdHZhciBYSFJfU1RBVEVTID0ge1xuXHQgICAgLy8gVGhlIG9iamVjdCBoYXMgYmVlbiBjb25zdHJ1Y3RlZC5cblx0ICAgIFVOU0VOVDogMCxcblx0ICAgIC8vIFRoZSBvcGVuKCkgbWV0aG9kIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnZva2VkLlxuXHQgICAgT1BFTkVEOiAxLFxuXHQgICAgLy8gQWxsIHJlZGlyZWN0cyAoaWYgYW55KSBoYXZlIGJlZW4gZm9sbG93ZWQgYW5kIGFsbCBIVFRQIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlIGhhdmUgYmVlbiByZWNlaXZlZC5cblx0ICAgIEhFQURFUlNfUkVDRUlWRUQ6IDIsXG5cdCAgICAvLyBUaGUgcmVzcG9uc2UncyBib2R5IGlzIGJlaW5nIHJlY2VpdmVkLlxuXHQgICAgTE9BRElORzogMyxcblx0ICAgIC8vIFRoZSBkYXRhIHRyYW5zZmVyIGhhcyBiZWVuIGNvbXBsZXRlZCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgdGhlIHRyYW5zZmVyIChlLmcuIGluZmluaXRlIHJlZGlyZWN0cykuXG5cdCAgICBET05FOiA0XG5cdH1cblxuXHR2YXIgWEhSX0VWRU5UUyA9ICdyZWFkeXN0YXRlY2hhbmdlIGxvYWRzdGFydCBwcm9ncmVzcyBhYm9ydCBlcnJvciBsb2FkIHRpbWVvdXQgbG9hZGVuZCcuc3BsaXQoJyAnKVxuXHR2YXIgWEhSX1JFUVVFU1RfUFJPUEVSVElFUyA9ICd0aW1lb3V0IHdpdGhDcmVkZW50aWFscycuc3BsaXQoJyAnKVxuXHR2YXIgWEhSX1JFU1BPTlNFX1BST1BFUlRJRVMgPSAncmVhZHlTdGF0ZSByZXNwb25zZVVSTCBzdGF0dXMgc3RhdHVzVGV4dCByZXNwb25zZVR5cGUgcmVzcG9uc2UgcmVzcG9uc2VUZXh0IHJlc3BvbnNlWE1MJy5zcGxpdCgnICcpXG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RyZWsvRmFrZVhNTEh0dHBSZXF1ZXN0L2Jsb2IvbWFzdGVyL2Zha2VfeG1sX2h0dHBfcmVxdWVzdC5qcyNMMzJcblx0dmFyIEhUVFBfU1RBVFVTX0NPREVTID0ge1xuXHQgICAgMTAwOiBcIkNvbnRpbnVlXCIsXG5cdCAgICAxMDE6IFwiU3dpdGNoaW5nIFByb3RvY29sc1wiLFxuXHQgICAgMjAwOiBcIk9LXCIsXG5cdCAgICAyMDE6IFwiQ3JlYXRlZFwiLFxuXHQgICAgMjAyOiBcIkFjY2VwdGVkXCIsXG5cdCAgICAyMDM6IFwiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25cIixcblx0ICAgIDIwNDogXCJObyBDb250ZW50XCIsXG5cdCAgICAyMDU6IFwiUmVzZXQgQ29udGVudFwiLFxuXHQgICAgMjA2OiBcIlBhcnRpYWwgQ29udGVudFwiLFxuXHQgICAgMzAwOiBcIk11bHRpcGxlIENob2ljZVwiLFxuXHQgICAgMzAxOiBcIk1vdmVkIFBlcm1hbmVudGx5XCIsXG5cdCAgICAzMDI6IFwiRm91bmRcIixcblx0ICAgIDMwMzogXCJTZWUgT3RoZXJcIixcblx0ICAgIDMwNDogXCJOb3QgTW9kaWZpZWRcIixcblx0ICAgIDMwNTogXCJVc2UgUHJveHlcIixcblx0ICAgIDMwNzogXCJUZW1wb3JhcnkgUmVkaXJlY3RcIixcblx0ICAgIDQwMDogXCJCYWQgUmVxdWVzdFwiLFxuXHQgICAgNDAxOiBcIlVuYXV0aG9yaXplZFwiLFxuXHQgICAgNDAyOiBcIlBheW1lbnQgUmVxdWlyZWRcIixcblx0ICAgIDQwMzogXCJGb3JiaWRkZW5cIixcblx0ICAgIDQwNDogXCJOb3QgRm91bmRcIixcblx0ICAgIDQwNTogXCJNZXRob2QgTm90IEFsbG93ZWRcIixcblx0ICAgIDQwNjogXCJOb3QgQWNjZXB0YWJsZVwiLFxuXHQgICAgNDA3OiBcIlByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXCIsXG5cdCAgICA0MDg6IFwiUmVxdWVzdCBUaW1lb3V0XCIsXG5cdCAgICA0MDk6IFwiQ29uZmxpY3RcIixcblx0ICAgIDQxMDogXCJHb25lXCIsXG5cdCAgICA0MTE6IFwiTGVuZ3RoIFJlcXVpcmVkXCIsXG5cdCAgICA0MTI6IFwiUHJlY29uZGl0aW9uIEZhaWxlZFwiLFxuXHQgICAgNDEzOiBcIlJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZVwiLFxuXHQgICAgNDE0OiBcIlJlcXVlc3QtVVJJIFRvbyBMb25nXCIsXG5cdCAgICA0MTU6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuXHQgICAgNDE2OiBcIlJlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGVcIixcblx0ICAgIDQxNzogXCJFeHBlY3RhdGlvbiBGYWlsZWRcIixcblx0ICAgIDQyMjogXCJVbnByb2Nlc3NhYmxlIEVudGl0eVwiLFxuXHQgICAgNTAwOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuXHQgICAgNTAxOiBcIk5vdCBJbXBsZW1lbnRlZFwiLFxuXHQgICAgNTAyOiBcIkJhZCBHYXRld2F5XCIsXG5cdCAgICA1MDM6IFwiU2VydmljZSBVbmF2YWlsYWJsZVwiLFxuXHQgICAgNTA0OiBcIkdhdGV3YXkgVGltZW91dFwiLFxuXHQgICAgNTA1OiBcIkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkXCJcblx0fVxuXG5cdC8qXG5cdCAgICBNb2NrWE1MSHR0cFJlcXVlc3Rcblx0Ki9cblxuXHRmdW5jdGlvbiBNb2NrWE1MSHR0cFJlcXVlc3QoKSB7XG5cdCAgICAvLyDliJ3lp4vljJYgY3VzdG9tIOWvueixoe+8jOeUqOS6juWtmOWCqOiHquWumuS5ieWxnuaAp1xuXHQgICAgdGhpcy5jdXN0b20gPSB7XG5cdCAgICAgICAgZXZlbnRzOiB7fSxcblx0ICAgICAgICByZXF1ZXN0SGVhZGVyczoge30sXG5cdCAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiB7fVxuXHQgICAgfVxuXHR9XG5cblx0TW9ja1hNTEh0dHBSZXF1ZXN0Ll9zZXR0aW5ncyA9IHtcblx0ICAgIHRpbWVvdXQ6ICcxMC0xMDAnLFxuXHQgICAgLypcblx0ICAgICAgICB0aW1lb3V0OiA1MCxcblx0ICAgICAgICB0aW1lb3V0OiAnMTAtMTAwJyxcblx0ICAgICAqL1xuXHR9XG5cblx0TW9ja1hNTEh0dHBSZXF1ZXN0LnNldHVwID0gZnVuY3Rpb24oc2V0dGluZ3MpIHtcblx0ICAgIFV0aWwuZXh0ZW5kKE1vY2tYTUxIdHRwUmVxdWVzdC5fc2V0dGluZ3MsIHNldHRpbmdzKVxuXHQgICAgcmV0dXJuIE1vY2tYTUxIdHRwUmVxdWVzdC5fc2V0dGluZ3Ncblx0fVxuXG5cdFV0aWwuZXh0ZW5kKE1vY2tYTUxIdHRwUmVxdWVzdCwgWEhSX1NUQVRFUylcblx0VXRpbC5leHRlbmQoTW9ja1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwgWEhSX1NUQVRFUylcblxuXHQvLyDmoIforrDlvZPliY3lr7nosaHkuLogTW9ja1hNTEh0dHBSZXF1ZXN0XG5cdE1vY2tYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUubW9jayA9IHRydWVcblxuXHQvLyDmmK/lkKbmi6bmiKogQWpheCDor7fmsYJcblx0TW9ja1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5tYXRjaCA9IGZhbHNlXG5cblx0Ly8g5Yid5aeL5YyWIFJlcXVlc3Qg55u45YWz55qE5bGe5oCn5ZKM5pa55rOVXG5cdFV0aWwuZXh0ZW5kKE1vY2tYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsIHtcblx0ICAgIC8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jdGhlLW9wZW4oKS1tZXRob2Rcblx0ICAgIC8vIFNldHMgdGhlIHJlcXVlc3QgbWV0aG9kLCByZXF1ZXN0IFVSTCwgYW5kIHN5bmNocm9ub3VzIGZsYWcuXG5cdCAgICBvcGVuOiBmdW5jdGlvbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXJuYW1lLCBwYXNzd29yZCkge1xuXHQgICAgICAgIHZhciB0aGF0ID0gdGhpc1xuXG5cdCAgICAgICAgVXRpbC5leHRlbmQodGhpcy5jdXN0b20sIHtcblx0ICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG5cdCAgICAgICAgICAgIHVybDogdXJsLFxuXHQgICAgICAgICAgICBhc3luYzogdHlwZW9mIGFzeW5jID09PSAnYm9vbGVhbicgPyBhc3luYyA6IHRydWUsXG5cdCAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcblx0ICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuXHQgICAgICAgICAgICBvcHRpb25zOiB7XG5cdCAgICAgICAgICAgICAgICB1cmw6IHVybCxcblx0ICAgICAgICAgICAgICAgIHR5cGU6IG1ldGhvZFxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSlcblxuXHQgICAgICAgIHRoaXMuY3VzdG9tLnRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZW91dCA9PT0gJ251bWJlcicpIHJldHVybiB0aW1lb3V0XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgdGltZW91dCA9PT0gJ3N0cmluZycgJiYgIX50aW1lb3V0LmluZGV4T2YoJy0nKSkgcmV0dXJuIHBhcnNlSW50KHRpbWVvdXQsIDEwKVxuXHQgICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVvdXQgPT09ICdzdHJpbmcnICYmIH50aW1lb3V0LmluZGV4T2YoJy0nKSkge1xuXHQgICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRpbWVvdXQuc3BsaXQoJy0nKVxuXHQgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHBhcnNlSW50KHRtcFswXSwgMTApXG5cdCAgICAgICAgICAgICAgICB2YXIgbWF4ID0gcGFyc2VJbnQodG1wWzFdLCAxMClcblx0ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW5cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0oTW9ja1hNTEh0dHBSZXF1ZXN0Ll9zZXR0aW5ncy50aW1lb3V0KVxuXG5cdCAgICAgICAgLy8g5p+l5om+5LiO6K+35rGC5Y+C5pWw5Yy56YWN55qE5pWw5o2u5qih5p2/XG5cdCAgICAgICAgdmFyIGl0ZW0gPSBmaW5kKHRoaXMuY3VzdG9tLm9wdGlvbnMpXG5cblx0ICAgICAgICBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcblx0ICAgICAgICAgICAgLy8g5ZCM5q2l5bGe5oCnIE5hdGl2ZVhNTEh0dHBSZXF1ZXN0ID0+IE1vY2tYTUxIdHRwUmVxdWVzdFxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFhIUl9SRVNQT05TRV9QUk9QRVJUSUVTLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoYXRbWEhSX1JFU1BPTlNFX1BST1BFUlRJRVNbaV1dID0geGhyW1hIUl9SRVNQT05TRV9QUk9QRVJUSUVTW2ldXVxuXHQgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAvLyDop6blj5EgTW9ja1hNTEh0dHBSZXF1ZXN0IOS4iueahOWQjOWQjeS6i+S7tlxuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGV2ZW50LnR5cGUgLyosIGZhbHNlLCBmYWxzZSwgdGhhdCovICkpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8g5aaC5p6c5pyq5om+5Yiw5Yy56YWN55qE5pWw5o2u5qih5p2/77yM5YiZ6YeH55So5Y6f55SfIFhIUiDlj5HpgIHor7fmsYLjgIJcblx0ICAgICAgICBpZiAoIWl0ZW0pIHtcblx0ICAgICAgICAgICAgLy8g5Yib5bu65Y6f55SfIFhIUiDlr7nosaHvvIzosIPnlKjljp/nlJ8gb3Blbigp77yM55uR5ZCs5omA5pyJ5Y6f55Sf5LqL5Lu2XG5cdCAgICAgICAgICAgIHZhciB4aHIgPSBjcmVhdGVOYXRpdmVYTUxIdHRwUmVxdWVzdCgpXG5cdCAgICAgICAgICAgIHRoaXMuY3VzdG9tLnhociA9IHhoclxuXG5cdCAgICAgICAgICAgIC8vIOWIneWni+WMluaJgOacieS6i+S7tu+8jOeUqOS6juebkeWQrOWOn+eUnyBYSFIg5a+56LGh55qE5LqL5Lu2XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgWEhSX0VWRU5UUy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoWEhSX0VWRU5UU1tpXSwgaGFuZGxlKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8geGhyLm9wZW4oKVxuXHQgICAgICAgICAgICBpZiAodXNlcm5hbWUpIHhoci5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlcm5hbWUsIHBhc3N3b3JkKVxuXHQgICAgICAgICAgICBlbHNlIHhoci5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYylcblxuXHQgICAgICAgICAgICAvLyDlkIzmraXlsZ7mgKcgTW9ja1hNTEh0dHBSZXF1ZXN0ID0+IE5hdGl2ZVhNTEh0dHBSZXF1ZXN0XG5cdCAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgWEhSX1JFUVVFU1RfUFJPUEVSVElFUy5sZW5ndGg7IGorKykge1xuXHQgICAgICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgICAgICB4aHJbWEhSX1JFUVVFU1RfUFJPUEVSVElFU1tqXV0gPSB0aGF0W1hIUl9SRVFVRVNUX1BST1BFUlRJRVNbal1dXG5cdCAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8g5om+5Yiw5LqG5Yy56YWN55qE5pWw5o2u5qih5p2/77yM5byA5aeL5oum5oiqIFhIUiDor7fmsYJcblx0ICAgICAgICB0aGlzLm1hdGNoID0gdHJ1ZVxuXHQgICAgICAgIHRoaXMuY3VzdG9tLnRlbXBsYXRlID0gaXRlbVxuXHQgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IE1vY2tYTUxIdHRwUmVxdWVzdC5PUEVORURcblx0ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZWFkeXN0YXRlY2hhbmdlJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGlzKi8gKSlcblx0ICAgIH0sXG5cdCAgICAvLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3RoZS1zZXRyZXF1ZXN0aGVhZGVyKCktbWV0aG9kXG5cdCAgICAvLyBDb21iaW5lcyBhIGhlYWRlciBpbiBhdXRob3IgcmVxdWVzdCBoZWFkZXJzLlxuXHQgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcblx0ICAgICAgICAvLyDljp/nlJ8gWEhSXG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuY3VzdG9tLnhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cdCAgICAgICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gdGhpcy5jdXN0b20ucmVxdWVzdEhlYWRlcnNcblx0ICAgICAgICBpZiAocmVxdWVzdEhlYWRlcnNbbmFtZV0pIHJlcXVlc3RIZWFkZXJzW25hbWVdICs9ICcsJyArIHZhbHVlXG5cdCAgICAgICAgZWxzZSByZXF1ZXN0SGVhZGVyc1tuYW1lXSA9IHZhbHVlXG5cdCAgICB9LFxuXHQgICAgdGltZW91dDogMCxcblx0ICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG5cdCAgICB1cGxvYWQ6IHt9LFxuXHQgICAgLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyN0aGUtc2VuZCgpLW1ldGhvZFxuXHQgICAgLy8gSW5pdGlhdGVzIHRoZSByZXF1ZXN0LlxuXHQgICAgc2VuZDogZnVuY3Rpb24gc2VuZChkYXRhKSB7XG5cdCAgICAgICAgdmFyIHRoYXQgPSB0aGlzXG5cdCAgICAgICAgdGhpcy5jdXN0b20ub3B0aW9ucy5ib2R5ID0gZGF0YVxuXG5cdCAgICAgICAgLy8g5Y6f55SfIFhIUlxuXHQgICAgICAgIGlmICghdGhpcy5tYXRjaCkge1xuXHQgICAgICAgICAgICB0aGlzLmN1c3RvbS54aHIuc2VuZChkYXRhKVxuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cblx0ICAgICAgICAvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHQgICAgICAgIHRoaXMuc2V0UmVxdWVzdEhlYWRlcignWC1SZXF1ZXN0ZWQtV2l0aCcsICdNb2NrWE1MSHR0cFJlcXVlc3QnKVxuXG5cdCAgICAgICAgLy8gbG9hZHN0YXJ0IFRoZSBmZXRjaCBpbml0aWF0ZXMuXG5cdCAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZHN0YXJ0JyAvKiwgZmFsc2UsIGZhbHNlLCB0aGlzKi8gKSlcblxuXHQgICAgICAgIGlmICh0aGlzLmN1c3RvbS5hc3luYykgc2V0VGltZW91dChkb25lLCB0aGlzLmN1c3RvbS50aW1lb3V0KSAvLyDlvILmraVcblx0ICAgICAgICBlbHNlIGRvbmUoKSAvLyDlkIzmraVcblxuXHQgICAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG5cdCAgICAgICAgICAgIHRoYXQucmVhZHlTdGF0ZSA9IE1vY2tYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEXG5cdCAgICAgICAgICAgIHRoYXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3JlYWR5c3RhdGVjaGFuZ2UnIC8qLCBmYWxzZSwgZmFsc2UsIHRoYXQqLyApKVxuXHQgICAgICAgICAgICB0aGF0LnJlYWR5U3RhdGUgPSBNb2NrWE1MSHR0cFJlcXVlc3QuTE9BRElOR1xuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZWFkeXN0YXRlY2hhbmdlJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGF0Ki8gKSlcblxuXHQgICAgICAgICAgICB0aGF0LnN0YXR1cyA9IDIwMFxuXHQgICAgICAgICAgICB0aGF0LnN0YXR1c1RleHQgPSBIVFRQX1NUQVRVU19DT0RFU1syMDBdXG5cblx0ICAgICAgICAgICAgLy8gZml4ICM5MiAjOTMgYnkgQHFkZGVndHlhXG5cdCAgICAgICAgICAgIHRoYXQucmVzcG9uc2UgPSB0aGF0LnJlc3BvbnNlVGV4dCA9IEpTT04uc3RyaW5naWZ5KFxuXHQgICAgICAgICAgICAgICAgY29udmVydCh0aGF0LmN1c3RvbS50ZW1wbGF0ZSwgdGhhdC5jdXN0b20ub3B0aW9ucyksXG5cdCAgICAgICAgICAgICAgICBudWxsLCA0XG5cdCAgICAgICAgICAgIClcblxuXHQgICAgICAgICAgICB0aGF0LnJlYWR5U3RhdGUgPSBNb2NrWE1MSHR0cFJlcXVlc3QuRE9ORVxuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZWFkeXN0YXRlY2hhbmdlJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGF0Ki8gKSlcblx0ICAgICAgICAgICAgdGhhdC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZCcgLyosIGZhbHNlLCBmYWxzZSwgdGhhdCovICkpO1xuXHQgICAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdsb2FkZW5kJyAvKiwgZmFsc2UsIGZhbHNlLCB0aGF0Ki8gKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSxcblx0ICAgIC8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jdGhlLWFib3J0KCktbWV0aG9kXG5cdCAgICAvLyBDYW5jZWxzIGFueSBuZXR3b3JrIGFjdGl2aXR5LlxuXHQgICAgYWJvcnQ6IGZ1bmN0aW9uIGFib3J0KCkge1xuXHQgICAgICAgIC8vIOWOn+eUnyBYSFJcblx0ICAgICAgICBpZiAoIXRoaXMubWF0Y2gpIHtcblx0ICAgICAgICAgICAgdGhpcy5jdXN0b20ueGhyLmFib3J0KClcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8g5oum5oiqIFhIUlxuXHQgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IE1vY2tYTUxIdHRwUmVxdWVzdC5VTlNFTlRcblx0ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdhYm9ydCcsIGZhbHNlLCBmYWxzZSwgdGhpcykpXG5cdCAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InLCBmYWxzZSwgZmFsc2UsIHRoaXMpKVxuXHQgICAgfVxuXHR9KVxuXG5cdC8vIOWIneWni+WMliBSZXNwb25zZSDnm7jlhbPnmoTlsZ7mgKflkozmlrnms5Vcblx0VXRpbC5leHRlbmQoTW9ja1hNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwge1xuXHQgICAgcmVzcG9uc2VVUkw6ICcnLFxuXHQgICAgc3RhdHVzOiBNb2NrWE1MSHR0cFJlcXVlc3QuVU5TRU5ULFxuXHQgICAgc3RhdHVzVGV4dDogJycsXG5cdCAgICAvLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3RoZS1nZXRyZXNwb25zZWhlYWRlcigpLW1ldGhvZFxuXHQgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpIHtcblx0ICAgICAgICAvLyDljp/nlJ8gWEhSXG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbS54aHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tLnJlc3BvbnNlSGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldXG5cdCAgICB9LFxuXHQgICAgLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyN0aGUtZ2V0YWxscmVzcG9uc2VoZWFkZXJzKCktbWV0aG9kXG5cdCAgICAvLyBodHRwOi8vd3d3LnV0ZjgtY2hhcnRhYmxlLmRlL1xuXHQgICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICAvLyDljp/nlJ8gWEhSXG5cdCAgICAgICAgaWYgKCF0aGlzLm1hdGNoKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbS54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyDmi6bmiKogWEhSXG5cdCAgICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9IHRoaXMuY3VzdG9tLnJlc3BvbnNlSGVhZGVyc1xuXHQgICAgICAgIHZhciBoZWFkZXJzID0gJydcblx0ICAgICAgICBmb3IgKHZhciBoIGluIHJlc3BvbnNlSGVhZGVycykge1xuXHQgICAgICAgICAgICBpZiAoIXJlc3BvbnNlSGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoKSkgY29udGludWVcblx0ICAgICAgICAgICAgaGVhZGVycyArPSBoICsgJzogJyArIHJlc3BvbnNlSGVhZGVyc1toXSArICdcXHJcXG4nXG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBoZWFkZXJzXG5cdCAgICB9LFxuXHQgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIC8qbWltZSovICkge30sXG5cdCAgICByZXNwb25zZVR5cGU6ICcnLCAvLyAnJywgJ3RleHQnLCAnYXJyYXlidWZmZXInLCAnYmxvYicsICdkb2N1bWVudCcsICdqc29uJ1xuXHQgICAgcmVzcG9uc2U6IG51bGwsXG5cdCAgICByZXNwb25zZVRleHQ6ICcnLFxuXHQgICAgcmVzcG9uc2VYTUw6IG51bGxcblx0fSlcblxuXHQvLyBFdmVudFRhcmdldFxuXHRVdGlsLmV4dGVuZChNb2NrWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCB7XG5cdCAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZSkge1xuXHQgICAgICAgIHZhciBldmVudHMgPSB0aGlzLmN1c3RvbS5ldmVudHNcblx0ICAgICAgICBpZiAoIWV2ZW50c1t0eXBlXSkgZXZlbnRzW3R5cGVdID0gW11cblx0ICAgICAgICBldmVudHNbdHlwZV0ucHVzaChoYW5kbGUpXG5cdCAgICB9LFxuXHQgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGUpIHtcblx0ICAgICAgICB2YXIgaGFuZGxlcyA9IHRoaXMuY3VzdG9tLmV2ZW50c1t0eXBlXSB8fCBbXVxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoaGFuZGxlc1tpXSA9PT0gaGFuZGxlKSB7XG5cdCAgICAgICAgICAgICAgICBoYW5kbGVzLnNwbGljZShpLS0sIDEpXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkge1xuXHQgICAgICAgIHZhciBoYW5kbGVzID0gdGhpcy5jdXN0b20uZXZlbnRzW2V2ZW50LnR5cGVdIHx8IFtdXG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIGhhbmRsZXNbaV0uY2FsbCh0aGlzLCBldmVudClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YXIgb250eXBlID0gJ29uJyArIGV2ZW50LnR5cGVcblx0ICAgICAgICBpZiAodGhpc1tvbnR5cGVdKSB0aGlzW29udHlwZV0oZXZlbnQpXG5cdCAgICB9XG5cdH0pXG5cblx0Ly8gSW5zcGlyZWQgYnkgalF1ZXJ5XG5cdGZ1bmN0aW9uIGNyZWF0ZU5hdGl2ZVhNTEh0dHBSZXF1ZXN0KCkge1xuXHQgICAgdmFyIGlzTG9jYWwgPSBmdW5jdGlvbigpIHtcblx0ICAgICAgICB2YXIgcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokL1xuXHQgICAgICAgIHZhciBydXJsID0gL14oW1xcdy4rLV0rOikoPzpcXC9cXC8oW15cXC8/IzpdKikoPzo6KFxcZCspfCl8KS9cblx0ICAgICAgICB2YXIgYWpheExvY2F0aW9uID0gbG9jYXRpb24uaHJlZlxuXHQgICAgICAgIHZhciBhamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoYWpheExvY2F0aW9uLnRvTG93ZXJDYXNlKCkpIHx8IFtdXG5cdCAgICAgICAgcmV0dXJuIHJsb2NhbFByb3RvY29sLnRlc3QoYWpheExvY1BhcnRzWzFdKVxuXHQgICAgfSgpXG5cblx0ICAgIHJldHVybiB3aW5kb3cuQWN0aXZlWE9iamVjdCA/XG5cdCAgICAgICAgKCFpc0xvY2FsICYmIGNyZWF0ZVN0YW5kYXJkWEhSKCkgfHwgY3JlYXRlQWN0aXZlWEhSKCkpIDogY3JlYXRlU3RhbmRhcmRYSFIoKVxuXG5cdCAgICBmdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5fWE1MSHR0cFJlcXVlc3QoKTtcblx0ICAgICAgICB9IGNhdGNoIChlKSB7fVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBjcmVhdGVBY3RpdmVYSFIoKSB7XG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuX0FjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKTtcblx0ICAgICAgICB9IGNhdGNoIChlKSB7fVxuXHQgICAgfVxuXHR9XG5cblxuXHQvLyDmn6Xmib7kuI7or7fmsYLlj4LmlbDljLnphY3nmoTmlbDmja7mqKHmnb/vvJpVUkzvvIxUeXBlXG5cdGZ1bmN0aW9uIGZpbmQob3B0aW9ucykge1xuXG5cdCAgICBmb3IgKHZhciBzVXJsVHlwZSBpbiBNb2NrWE1MSHR0cFJlcXVlc3QuTW9jay5fbW9ja2VkKSB7XG5cdCAgICAgICAgdmFyIGl0ZW0gPSBNb2NrWE1MSHR0cFJlcXVlc3QuTW9jay5fbW9ja2VkW3NVcmxUeXBlXVxuXHQgICAgICAgIGlmIChcblx0ICAgICAgICAgICAgKCFpdGVtLnJ1cmwgfHwgbWF0Y2goaXRlbS5ydXJsLCBvcHRpb25zLnVybCkpICYmXG5cdCAgICAgICAgICAgICghaXRlbS5ydHlwZSB8fCBtYXRjaChpdGVtLnJ0eXBlLCBvcHRpb25zLnR5cGUudG9Mb3dlckNhc2UoKSkpXG5cdCAgICAgICAgKSB7XG5cdCAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdbbW9ja10nLCBvcHRpb25zLnVybCwgJz4nLCBpdGVtLnJ1cmwpXG5cdCAgICAgICAgICAgIHJldHVybiBpdGVtXG5cdCAgICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBtYXRjaChleHBlY3RlZCwgYWN0dWFsKSB7XG5cdCAgICAgICAgaWYgKFV0aWwudHlwZShleHBlY3RlZCkgPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gYWN0dWFsXG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChVdGlsLnR5cGUoZXhwZWN0ZWQpID09PSAncmVnZXhwJykge1xuXHQgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpXG5cdCAgICAgICAgfVxuXHQgICAgfVxuXG5cdH1cblxuXHQvLyDmlbDmja7mqKHmnb8g77ydPiDlk43lupTmlbDmja5cblx0ZnVuY3Rpb24gY29udmVydChpdGVtLCBvcHRpb25zKSB7XG5cdCAgICByZXR1cm4gVXRpbC5pc0Z1bmN0aW9uKGl0ZW0udGVtcGxhdGUpID9cblx0ICAgICAgICBpdGVtLnRlbXBsYXRlKG9wdGlvbnMpIDogTW9ja1hNTEh0dHBSZXF1ZXN0Lk1vY2subW9jayhpdGVtLnRlbXBsYXRlKVxuXHR9XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBNb2NrWE1MSHR0cFJlcXVlc3RcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pXG59KTtcbjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLFFBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js\n");
/***/ }),
/***/ "./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js":
/*!*******************************************************************************!*\
!*** ./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js ***!
\*******************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX25vZGUtbGlicy1icm93c2VyQDIuMi4xQG5vZGUtbGlicy1icm93c2VyL21vY2svZW1wdHkuanMuanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js\n");
/***/ }),
/***/ "./node_modules/_object-is@1.0.1@object-is/index.js":
/*!**********************************************************!*\
!*** ./node_modules/_object-is@1.0.1@object-is/index.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\n/* https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.is */\n\nvar NumberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t} else if (a === b) {\n\t\treturn true;\n\t} else if (NumberIsNaN(a) && NumberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1pc0AxLjAuMUBvYmplY3QtaXMvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX29iamVjdC1pc0AxLjAuMUBvYmplY3QtaXMvaW5kZXguanM/MTMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW9iamVjdC5pcyAqL1xuXG52YXIgTnVtYmVySXNOYU4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXMoYSwgYikge1xuXHRpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG5cdFx0cmV0dXJuIDEgLyBhID09PSAxIC8gYjtcblx0fSBlbHNlIGlmIChhID09PSBiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoTnVtYmVySXNOYU4oYSkgJiYgTnVtYmVySXNOYU4oYikpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_object-is@1.0.1@object-is/index.js\n");
/***/ }),
/***/ "./node_modules/_object-keys@1.1.1@object-keys/implementation.js":
/*!***********************************************************************!*\
!*** ./node_modules/_object-keys@1.1.1@object-keys/implementation.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(/*! ./isArguments */ \"./node_modules/_object-keys@1.1.1@object-keys/isArguments.js\"); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1rZXlzQDEuMS4xQG9iamVjdC1rZXlzL2ltcGxlbWVudGF0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19vYmplY3Qta2V5c0AxLjEuMUBvYmplY3Qta2V5cy9pbXBsZW1lbnRhdGlvbi5qcz9jMmIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXNTaGltO1xuaWYgKCFPYmplY3Qua2V5cykge1xuXHQvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXHR2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHR2YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0dmFyIGhhc0RvbnRFbnVtQnVnID0gIWlzRW51bWVyYWJsZS5jYWxsKHsgdG9TdHJpbmc6IG51bGwgfSwgJ3RvU3RyaW5nJyk7XG5cdHZhciBoYXNQcm90b0VudW1CdWcgPSBpc0VudW1lcmFibGUuY2FsbChmdW5jdGlvbiAoKSB7fSwgJ3Byb3RvdHlwZScpO1xuXHR2YXIgZG9udEVudW1zID0gW1xuXHRcdCd0b1N0cmluZycsXG5cdFx0J3RvTG9jYWxlU3RyaW5nJyxcblx0XHQndmFsdWVPZicsXG5cdFx0J2hhc093blByb3BlcnR5Jyxcblx0XHQnaXNQcm90b3R5cGVPZicsXG5cdFx0J3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcblx0XHQnY29uc3RydWN0b3InXG5cdF07XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0dmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiBjdG9yICYmIGN0b3IucHJvdG90eXBlID09PSBvO1xuXHR9O1xuXHR2YXIgZXhjbHVkZWRLZXlzID0ge1xuXHRcdCRhcHBsaWNhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdCRjb25zb2xlOiB0cnVlLFxuXHRcdCRleHRlcm5hbDogdHJ1ZSxcblx0XHQkZnJhbWU6IHRydWUsXG5cdFx0JGZyYW1lRWxlbWVudDogdHJ1ZSxcblx0XHQkZnJhbWVzOiB0cnVlLFxuXHRcdCRpbm5lckhlaWdodDogdHJ1ZSxcblx0XHQkaW5uZXJXaWR0aDogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5lcnJvcjogdHJ1ZSxcblx0XHQkb3V0ZXJIZWlnaHQ6IHRydWUsXG5cdFx0JG91dGVyV2lkdGg6IHRydWUsXG5cdFx0JHBhZ2VYT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYWdlWU9mZnNldDogdHJ1ZSxcblx0XHQkcGFyZW50OiB0cnVlLFxuXHRcdCRzY3JvbGxMZWZ0OiB0cnVlLFxuXHRcdCRzY3JvbGxUb3A6IHRydWUsXG5cdFx0JHNjcm9sbFg6IHRydWUsXG5cdFx0JHNjcm9sbFk6IHRydWUsXG5cdFx0JHNlbGY6IHRydWUsXG5cdFx0JHdlYmtpdEluZGV4ZWREQjogdHJ1ZSxcblx0XHQkd2Via2l0U3RvcmFnZUluZm86IHRydWUsXG5cdFx0JHdpbmRvdzogdHJ1ZVxuXHR9O1xuXHR2YXIgaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnID0gKGZ1bmN0aW9uICgpIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZvciAodmFyIGsgaW4gd2luZG93KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV4Y2x1ZGVkS2V5c1snJCcgKyBrXSAmJiBoYXMuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdFx0dmFyIGlzQXJndW1lbnRzID0gaXNBcmdzKG9iamVjdCk7XG5cdFx0dmFyIGlzU3RyaW5nID0gaXNPYmplY3QgJiYgdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBTdHJpbmddJztcblx0XHR2YXIgdGhlS2V5cyA9IFtdO1xuXG5cdFx0aWYgKCFpc09iamVjdCAmJiAhaXNGdW5jdGlvbiAmJiAhaXNBcmd1bWVudHMpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QnKTtcblx0XHR9XG5cblx0XHR2YXIgc2tpcFByb3RvID0gaGFzUHJvdG9FbnVtQnVnICYmIGlzRnVuY3Rpb247XG5cdFx0aWYgKGlzU3RyaW5nICYmIG9iamVjdC5sZW5ndGggPiAwICYmICFoYXMuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcy5jYWxsKG9iamVjdCwgbmFtZSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKG5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNEb250RW51bUJ1Zykge1xuXHRcdFx0dmFyIHNraXBDb25zdHJ1Y3RvciA9IGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneShvYmplY3QpO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRvbnRFbnVtcy5sZW5ndGg7ICsraykge1xuXHRcdFx0XHRpZiAoIShza2lwQ29uc3RydWN0b3IgJiYgZG9udEVudW1zW2tdID09PSAnY29uc3RydWN0b3InKSAmJiBoYXMuY2FsbChvYmplY3QsIGRvbnRFbnVtc1trXSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goZG9udEVudW1zW2tdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhlS2V5cztcblx0fTtcbn1cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_object-keys@1.1.1@object-keys/implementation.js\n");
/***/ }),
/***/ "./node_modules/_object-keys@1.1.1@object-keys/index.js":
/*!**************************************************************!*\
!*** ./node_modules/_object-keys@1.1.1@object-keys/index.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(/*! ./isArguments */ \"./node_modules/_object-keys@1.1.1@object-keys/isArguments.js\");\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(/*! ./implementation */ \"./node_modules/_object-keys@1.1.1@object-keys/implementation.js\");\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1rZXlzQDEuMS4xQG9iamVjdC1rZXlzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19vYmplY3Qta2V5c0AxLjEuMUBvYmplY3Qta2V5cy9pbmRleC5qcz8wOTkzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_object-keys@1.1.1@object-keys/index.js\n");
/***/ }),
/***/ "./node_modules/_object-keys@1.1.1@object-keys/isArguments.js":
/*!********************************************************************!*\
!*** ./node_modules/_object-keys@1.1.1@object-keys/isArguments.js ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX29iamVjdC1rZXlzQDEuMS4xQG9iamVjdC1rZXlzL2lzQXJndW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19vYmplY3Qta2V5c0AxLjEuMUBvYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcz81N2MyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_object-keys@1.1.1@object-keys/isArguments.js\n");
/***/ }),
/***/ "./node_modules/_process@0.11.10@process/browser.js":
/*!**********************************************************!*\
!*** ./node_modules/_process@0.11.10@process/browser.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Byb2Nlc3NAMC4xMS4xMEBwcm9jZXNzL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3Byb2Nlc3NAMC4xMS4xMEBwcm9jZXNzL2Jyb3dzZXIuanM/NGMzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_process@0.11.10@process/browser.js\n");
/***/ }),
/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js":
/*!*********************************************************************************************!*\
!*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js ***!
\*********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar toObject = Object;\nvar TypeErr = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== toObject(this)) {\n\t\tthrow new TypeErr('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbXBsZW1lbnRhdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fcmVnZXhwLnByb3RvdHlwZS5mbGFnc0AxLjIuMEByZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzY1MjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9PYmplY3QgPSBPYmplY3Q7XG52YXIgVHlwZUVyciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGFncygpIHtcblx0aWYgKHRoaXMgIT0gbnVsbCAmJiB0aGlzICE9PSB0b09iamVjdCh0aGlzKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyKCdSZWdFeHAucHJvdG90eXBlLmZsYWdzIGdldHRlciBjYWxsZWQgb24gbm9uLW9iamVjdCcpO1xuXHR9XG5cdHZhciByZXN1bHQgPSAnJztcblx0aWYgKHRoaXMuZ2xvYmFsKSB7XG5cdFx0cmVzdWx0ICs9ICdnJztcblx0fVxuXHRpZiAodGhpcy5pZ25vcmVDYXNlKSB7XG5cdFx0cmVzdWx0ICs9ICdpJztcblx0fVxuXHRpZiAodGhpcy5tdWx0aWxpbmUpIHtcblx0XHRyZXN1bHQgKz0gJ20nO1xuXHR9XG5cdGlmICh0aGlzLmRvdEFsbCkge1xuXHRcdHJlc3VsdCArPSAncyc7XG5cdH1cblx0aWYgKHRoaXMudW5pY29kZSkge1xuXHRcdHJlc3VsdCArPSAndSc7XG5cdH1cblx0aWYgKHRoaXMuc3RpY2t5KSB7XG5cdFx0cmVzdWx0ICs9ICd5Jztcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js\n");
/***/ }),
/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js":
/*!************************************************************************************!*\
!*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js ***!
\************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar define = __webpack_require__(/*! define-properties */ \"./node_modules/_define-properties@1.1.3@define-properties/index.js\");\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js\");\nvar getPolyfill = __webpack_require__(/*! ./polyfill */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js\");\nvar shim = __webpack_require__(/*! ./shim */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js\");\n\nvar flagsBound = Function.call.bind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fcmVnZXhwLnByb3RvdHlwZS5mbGFnc0AxLjIuMEByZWdleHAucHJvdG90eXBlLmZsYWdzL2luZGV4LmpzPzQ2MzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBGdW5jdGlvbi5jYWxsLmJpbmQoaW1wbGVtZW50YXRpb24pO1xuXG5kZWZpbmUoZmxhZ3NCb3VuZCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhZ3NCb3VuZDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/index.js\n");
/***/ }),
/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js":
/*!***************************************************************************************!*\
!*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js ***!
\***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/implementation.js\");\n\nvar supportsDescriptors = __webpack_require__(/*! define-properties */ \"./node_modules/_define-properties@1.1.3@define-properties/index.js\").supportsDescriptors;\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar TypeErr = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif (/a/mig.flags === 'gim') {\n\t\tvar descriptor = gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fcmVnZXhwLnByb3RvdHlwZS5mbGFnc0AxLjIuMEByZWdleHAucHJvdG90eXBlLmZsYWdzL3BvbHlmaWxsLmpzP2NlM2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmICghc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyKCdSZWdFeHAucHJvdG90eXBlLmZsYWdzIHJlcXVpcmVzIGEgdHJ1ZSBFUzUgZW52aXJvbm1lbnQgdGhhdCBzdXBwb3J0cyBwcm9wZXJ0eSBkZXNjcmlwdG9ycycpO1xuXHR9XG5cdGlmICgvYS9taWcuZmxhZ3MgPT09ICdnaW0nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycpO1xuXHRcdGlmIChkZXNjcmlwdG9yICYmIHR5cGVvZiBkZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgKC9hLykuZG90QWxsID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHJldHVybiBkZXNjcmlwdG9yLmdldDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js\n");
/***/ }),
/***/ "./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js":
/*!***********************************************************************************!*\
!*** ./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js ***!
\***********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nvar supportsDescriptors = __webpack_require__(/*! define-properties */ \"./node_modules/_define-properties@1.1.3@define-properties/index.js\").supportsDescriptors;\nvar getPolyfill = __webpack_require__(/*! ./polyfill */ \"./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/polyfill.js\");\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3NAMS4yLjBAcmVnZXhwLnByb3RvdHlwZS5mbGFncy9zaGltLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL19yZWdleHAucHJvdG90eXBlLmZsYWdzQDEuMi4wQHJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Mvc2hpbS5qcz9kNjY0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpLnN1cHBvcnRzRGVzY3JpcHRvcnM7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgVHlwZUVyciA9IFR5cGVFcnJvcjtcbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciByZWdleCA9IC9hLztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltRmxhZ3MoKSB7XG5cdGlmICghc3VwcG9ydHNEZXNjcmlwdG9ycyB8fCAhZ2V0UHJvdG8pIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycignUmVnRXhwLnByb3RvdHlwZS5mbGFncyByZXF1aXJlcyBhIHRydWUgRVM1IGVudmlyb25tZW50IHRoYXQgc3VwcG9ydHMgcHJvcGVydHkgZGVzY3JpcHRvcnMnKTtcblx0fVxuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHR2YXIgcHJvdG8gPSBnZXRQcm90byhyZWdleCk7XG5cdHZhciBkZXNjcmlwdG9yID0gZ09QRChwcm90bywgJ2ZsYWdzJyk7XG5cdGlmICghZGVzY3JpcHRvciB8fCBkZXNjcmlwdG9yLmdldCAhPT0gcG9seWZpbGwpIHtcblx0XHRkZWZpbmVQcm9wZXJ0eShwcm90bywgJ2ZsYWdzJywge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6IHBvbHlmaWxsXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_regexp.prototype.flags@1.2.0@regexp.prototype.flags/shim.js\n");
/***/ }),
/***/ "./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css":
/*!***************************************************************!*\
!*** ./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!../../../_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./swiper.css */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"49a14e50\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(/*! !../../../_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!../../../_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./swiper.css */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\", function() {\n var newContent = __webpack_require__(/*! !../../../_css-loader@1.0.1@css-loader??ref--6-oneOf-3-1!../../../_postcss-loader@3.0.0@postcss-loader/src??ref--6-oneOf-3-2!./swiper.css */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\");\n if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9jc3Mvc3dpcGVyLmNzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fc3dpcGVyQDQuNS4xQHN3aXBlci9kaXN0L2Nzcy9zd2lwZXIuY3NzPzJiNjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tNi1vbmVPZi0zLTEhLi4vLi4vLi4vX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMiEuL3N3aXBlci5jc3NcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI0OWExNGU1MFwiLCBjb250ZW50LCBmYWxzZSwge1wic291cmNlTWFwXCI6ZmFsc2UsXCJzaGFkb3dNb2RlXCI6ZmFsc2V9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tNi1vbmVPZi0zLTEhLi4vLi4vLi4vX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMiEuL3N3aXBlci5jc3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMSEuLi8uLi8uLi9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTYtb25lT2YtMy0yIS4vc3dpcGVyLmNzc1wiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\n");
/***/ }),
/***/ "./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js":
/*!*************************************************************!*\
!*** ./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("/**\n * Swiper 4.5.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2019 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 13, 2019\n */\n\n(function (global, factory) {\n true ? module.exports = factory() :\n undefined;\n}(this, function () { 'use strict';\n\n /**\n * SSR Window 1.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2018, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: July 18, 2018\n */\n var doc = (typeof document === 'undefined') ? {\n body: {},\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n activeElement: {\n blur: function blur() {},\n nodeName: '',\n },\n querySelector: function querySelector() {\n return null;\n },\n querySelectorAll: function querySelectorAll() {\n return [];\n },\n getElementById: function getElementById() {\n return null;\n },\n createEvent: function createEvent() {\n return {\n initEvent: function initEvent() {},\n };\n },\n createElement: function createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function setAttribute() {},\n getElementsByTagName: function getElementsByTagName() {\n return [];\n },\n };\n },\n location: { hash: '' },\n } : document; // eslint-disable-line\n\n var win = (typeof window === 'undefined') ? {\n document: doc,\n navigator: {\n userAgent: '',\n },\n location: {},\n history: {},\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n getComputedStyle: function getComputedStyle() {\n return {\n getPropertyValue: function getPropertyValue() {\n return '';\n },\n };\n },\n Image: function Image() {},\n Date: function Date() {},\n screen: {},\n setTimeout: function setTimeout() {},\n clearTimeout: function clearTimeout() {},\n } : window; // eslint-disable-line\n\n /**\n * Dom7 2.1.3\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2019, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: February 11, 2019\n */\n\n var Dom7 = function Dom7(arr) {\n var self = this;\n // Create array-like object\n for (var i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n self.length = arr.length;\n // Return collection with methods\n return this;\n };\n\n function $(selector, context) {\n var arr = [];\n var i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els;\n var tempParent;\n var html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf('<li') === 0) { toCreate = 'ul'; }\n if (html.indexOf('<tr') === 0) { toCreate = 'tbody'; }\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) { toCreate = 'tr'; }\n if (html.indexOf('<tbody') === 0) { toCreate = 'table'; }\n if (html.indexOf('<option') === 0) { toCreate = 'select'; }\n tempParent = doc.createElement(toCreate);\n tempParent.innerHTML = html;\n for (i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n // Pure ID selector\n els = [doc.getElementById(selector.trim().split('#')[1])];\n } else {\n // Other selectors\n els = (context || doc).querySelectorAll(selector.trim());\n }\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) { arr.push(els[i]); }\n }\n }\n } else if (selector.nodeType || selector === win || selector === doc) {\n // Node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // Array of elements or instance of Dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n }\n\n $.fn = Dom7.prototype;\n $.Class = Dom7;\n $.Dom7 = Dom7;\n\n function unique(arr) {\n var uniqueArray = [];\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n }\n return uniqueArray;\n }\n\n // Classes and attributes\n function addClass(className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n }\n }\n return this;\n }\n function removeClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n }\n }\n return this;\n }\n function hasClass(className) {\n if (!this[0]) { return false; }\n return this[0].classList.contains(className);\n }\n function toggleClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n }\n }\n return this;\n }\n function attr(attrs, value) {\n var arguments$1 = arguments;\n\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) { return this[0].getAttribute(attrs); }\n return undefined;\n }\n\n // Set attrs\n for (var i = 0; i < this.length; i += 1) {\n if (arguments$1.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n // eslint-disable-next-line\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n }\n // eslint-disable-next-line\n function removeAttr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n return this;\n }\n function data(key, value) {\n var el;\n if (typeof value === 'undefined') {\n el = this[0];\n // Get value\n if (el) {\n if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute((\"data-\" + key));\n if (dataKey) {\n return dataKey;\n }\n return undefined;\n }\n return undefined;\n }\n\n // Set value\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n // Transforms\n // eslint-disable-next-line\n function transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = transform;\n elStyle.transform = transform;\n }\n return this;\n }\n function transition(duration) {\n if (typeof duration !== 'string') {\n duration = duration + \"ms\"; // eslint-disable-line\n }\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = duration;\n elStyle.transitionDuration = duration;\n }\n return this;\n }\n // Events\n function on() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var eventType = args[0];\n var targetSelector = args[1];\n var listener = args[2];\n var capture = args[3];\n if (typeof args[1] === 'function') {\n (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n targetSelector = undefined;\n }\n if (!capture) { capture = false; }\n\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) { return; }\n var eventData = e.target.dom7EventData || [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n else {\n var parents = $(target).parents(); // eslint-disable-line\n for (var k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n }\n }\n }\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n listener.apply(this, eventData);\n }\n var events = eventType.split(' ');\n var j;\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n el.dom7Listeners[event].push({\n listener: listener,\n proxyListener: handleEvent,\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n var event$1 = events[j];\n if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n el.dom7LiveListeners[event$1].push({\n listener: listener,\n proxyListener: handleLiveEvent,\n });\n el.addEventListener(event$1, handleLiveEvent, capture);\n }\n }\n }\n return this;\n }\n function off() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var eventType = args[0];\n var targetSelector = args[1];\n var listener = args[2];\n var capture = args[3];\n if (typeof args[1] === 'function') {\n (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n targetSelector = undefined;\n }\n if (!capture) { capture = false; }\n\n var events = eventType.split(' ');\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = (void 0);\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n return this;\n }\n function trigger() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var events = args[0].split(' ');\n var eventData = args[1];\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var evt = (void 0);\n try {\n evt = new win.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true,\n });\n } catch (e) {\n evt = doc.createEvent('Event');\n evt.initEvent(event, true, true);\n evt.detail = eventData;\n }\n // eslint-disable-next-line\n el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n return this;\n }\n function transitionEnd(callback) {\n var events = ['webkitTransitionEnd', 'transitionend'];\n var dom = this;\n var i;\n function fireCallBack(e) {\n /* jshint validthis:true */\n if (e.target !== this) { return; }\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n }\n function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n return this[0].offsetWidth;\n }\n return null;\n }\n function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n return this[0].offsetHeight;\n }\n return null;\n }\n function offset() {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = doc.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = el === win ? win.scrollY : el.scrollTop;\n var scrollLeft = el === win ? win.scrollX : el.scrollLeft;\n return {\n top: (box.top + scrollTop) - clientTop,\n left: (box.left + scrollLeft) - clientLeft,\n };\n }\n\n return null;\n }\n function styles() {\n if (this[0]) { return win.getComputedStyle(this[0], null); }\n return {};\n }\n function css(props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n } else {\n for (i = 0; i < this.length; i += 1) {\n // eslint-disable-next-line\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n }\n // Iterate over the collection passing elements to `callback`\n function each(callback) {\n // Don't bother continuing without a callback\n if (!callback) { return this; }\n // Iterate over the current collection\n for (var i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], i, this[i]) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n }\n // eslint-disable-next-line\n function html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n return this;\n }\n // eslint-disable-next-line\n function text(text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n return null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n return this;\n }\n function is(selector) {\n var el = this[0];\n var compareWith;\n var i;\n if (!el || typeof selector === 'undefined') { return false; }\n if (typeof selector === 'string') {\n if (el.matches) { return el.matches(selector); }\n else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n } else if (selector === doc) { return el === doc; }\n else if (selector === win) { return el === win; }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n }\n return false;\n }\n function index() {\n var child = this[0];\n var i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) { i += 1; }\n }\n return i;\n }\n return undefined;\n }\n // eslint-disable-next-line\n function eq(index) {\n if (typeof index === 'undefined') { return this; }\n var length = this.length;\n var returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) { return new Dom7([]); }\n return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n }\n function append() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var newChild;\n\n for (var k = 0; k < args.length; k += 1) {\n newChild = args[k];\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = doc.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n }\n function prepend(newChild) {\n var i;\n var j;\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = doc.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n }\n function next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return new Dom7([this[0].nextElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n }\n function nextAll(selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) { return new Dom7([]); }\n while (el.nextElementSibling) {\n var next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if ($(next).is(selector)) { nextEls.push(next); }\n } else { nextEls.push(next); }\n el = next;\n }\n return new Dom7(nextEls);\n }\n function prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return new Dom7([el.previousElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n }\n function prevAll(selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) { return new Dom7([]); }\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if ($(prev).is(selector)) { prevEls.push(prev); }\n } else { prevEls.push(prev); }\n el = prev;\n }\n return new Dom7(prevEls);\n }\n function parent(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n return $(unique(parents));\n }\n function parents(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var parent = this[i].parentNode; // eslint-disable-line\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) { parents.push(parent); }\n } else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $(unique(parents));\n }\n function closest(selector) {\n var closest = this; // eslint-disable-line\n if (typeof selector === 'undefined') {\n return new Dom7([]);\n }\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n return closest;\n }\n function find(selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n }\n function children(selector) {\n var children = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this[i].childNodes;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n return new Dom7(unique(children));\n }\n function remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n }\n return this;\n }\n function add() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var dom = this;\n var i;\n var j;\n for (i = 0; i < args.length; i += 1) {\n var toAdd = $(args[i]);\n for (j = 0; j < toAdd.length; j += 1) {\n dom[dom.length] = toAdd[j];\n dom.length += 1;\n }\n }\n return dom;\n }\n\n var Methods = {\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n attr: attr,\n removeAttr: removeAttr,\n data: data,\n transform: transform,\n transition: transition,\n on: on,\n off: off,\n trigger: trigger,\n transitionEnd: transitionEnd,\n outerWidth: outerWidth,\n outerHeight: outerHeight,\n offset: offset,\n css: css,\n each: each,\n html: html,\n text: text,\n is: is,\n index: index,\n eq: eq,\n append: append,\n prepend: prepend,\n next: next,\n nextAll: nextAll,\n prev: prev,\n prevAll: prevAll,\n parent: parent,\n parents: parents,\n closest: closest,\n find: find,\n children: children,\n remove: remove,\n add: add,\n styles: styles,\n };\n\n Object.keys(Methods).forEach(function (methodName) {\n $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n });\n\n var Utils = {\n deleteProps: function deleteProps(obj) {\n var object = obj;\n Object.keys(object).forEach(function (key) {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n },\n nextTick: function nextTick(callback, delay) {\n if ( delay === void 0 ) delay = 0;\n\n return setTimeout(callback, delay);\n },\n now: function now() {\n return Date.now();\n },\n getTranslate: function getTranslate(el, axis) {\n if ( axis === void 0 ) axis = 'x';\n\n var matrix;\n var curTransform;\n var transformMatrix;\n\n var curStyle = win.getComputedStyle(el, null);\n\n if (win.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[4]); }\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[5]); }\n }\n return curTransform || 0;\n },\n parseUrlQuery: function parseUrlQuery(url) {\n var query = {};\n var urlToParse = url || win.location.href;\n var i;\n var params;\n var param;\n var length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n }\n }\n return query;\n },\n isObject: function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n },\n extend: function extend() {\n var args = [], len$1 = arguments.length;\n while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n var to = Object(args[0]);\n for (var i = 1; i < args.length; i += 1) {\n var nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n },\n };\n\n var Support = (function Support() {\n var testDiv = doc.createElement('div');\n return {\n touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {\n return !!((win.navigator.maxTouchPoints > 0) || ('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));\n }()),\n\n pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent || ('maxTouchPoints' in win.navigator && win.navigator.maxTouchPoints > 0)),\n prefixedPointerEvents: !!win.navigator.msPointerEnabled,\n\n transition: (function checkTransition() {\n var style = testDiv.style;\n return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style);\n }()),\n transforms3d: (win.Modernizr && win.Modernizr.csstransforms3d === true) || (function checkTransforms3d() {\n var style = testDiv.style;\n return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style);\n }()),\n\n flexbox: (function checkFlexbox() {\n var style = testDiv.style;\n var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');\n for (var i = 0; i < styles.length; i += 1) {\n if (styles[i] in style) { return true; }\n }\n return false;\n }()),\n\n observer: (function checkObserver() {\n return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n }()),\n\n passiveListener: (function checkPassiveListener() {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get: function get() {\n supportsPassive = true;\n },\n });\n win.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n }()),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in win;\n }()),\n };\n }());\n\n var Browser = (function Browser() {\n function isSafari() {\n var ua = win.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n }\n return {\n isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),\n isEdge: !!win.navigator.userAgent.match(/Edge/g),\n isSafari: isSafari(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n };\n }());\n\n var SwiperClass = function SwiperClass(params) {\n if ( params === void 0 ) params = {};\n\n var self = this;\n self.params = params;\n\n // Events\n self.eventsListeners = {};\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach(function (eventName) {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n };\n\n var staticAccessors = { components: { configurable: true } };\n\n SwiperClass.prototype.on = function on (events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') { return self; }\n var method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(function (event) {\n if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n self.eventsListeners[event][method](handler);\n });\n return self;\n };\n\n SwiperClass.prototype.once = function once (events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') { return self; }\n function onceHandler() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n handler.apply(self, args);\n self.off(events, onceHandler);\n if (onceHandler.f7proxy) {\n delete onceHandler.f7proxy;\n }\n }\n onceHandler.f7proxy = handler;\n return self.on(events, onceHandler, priority);\n };\n\n SwiperClass.prototype.off = function off (events, handler) {\n var self = this;\n if (!self.eventsListeners) { return self; }\n events.split(' ').forEach(function (event) {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n self.eventsListeners[event].forEach(function (eventHandler, index) {\n if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n };\n\n SwiperClass.prototype.emit = function emit () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var self = this;\n if (!self.eventsListeners) { return self; }\n var events;\n var data;\n var context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n var eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(function (event) {\n if (self.eventsListeners && self.eventsListeners[event]) {\n var handlers = [];\n self.eventsListeners[event].forEach(function (eventHandler) {\n handlers.push(eventHandler);\n });\n handlers.forEach(function (eventHandler) {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n };\n\n SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n var instance = this;\n if (!instance.modules) { return; }\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n Utils.extend(instanceParams, module.params);\n }\n });\n };\n\n SwiperClass.prototype.useModules = function useModules (modulesParams) {\n if ( modulesParams === void 0 ) modulesParams = {};\n\n var instance = this;\n if (!instance.modules) { return; }\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n var moduleParams = modulesParams[moduleName] || {};\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach(function (modulePropName) {\n var moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach(function (moduleEventName) {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n };\n\n staticAccessors.components.set = function (components) {\n var Class = this;\n if (!Class.use) { return; }\n Class.use(components);\n };\n\n SwiperClass.installModule = function installModule (module) {\n var params = [], len = arguments.length - 1;\n while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n var Class = this;\n if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach(function (key) {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach(function (key) {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n module.install.apply(Class, params);\n }\n return Class;\n };\n\n SwiperClass.use = function use (module) {\n var params = [], len = arguments.length - 1;\n while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n var Class = this;\n if (Array.isArray(module)) {\n module.forEach(function (m) { return Class.installModule(m); });\n return Class;\n }\n return Class.installModule.apply(Class, [ module ].concat( params ));\n };\n\n Object.defineProperties( SwiperClass, staticAccessors );\n\n function updateSize () {\n var swiper = this;\n var width;\n var height;\n var $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined') {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined') {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n Utils.extend(swiper, {\n width: width,\n height: height,\n size: swiper.isHorizontal() ? width : height,\n });\n }\n\n function updateSlides () {\n var swiper = this;\n var params = swiper.params;\n\n var $wrapperEl = swiper.$wrapperEl;\n var swiperSize = swiper.size;\n var rtl = swiper.rtlTranslate;\n var wrongRTL = swiper.wrongRTL;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n var snapGrid = [];\n var slidesGrid = [];\n var slidesSizesGrid = [];\n\n var offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n var offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n var previousSnapGridLength = swiper.snapGrid.length;\n var previousSlidesGridLength = swiper.snapGrid.length;\n\n var spaceBetween = params.spaceBetween;\n var slidePosition = -offsetBefore;\n var prevSlideSize = 0;\n var index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n var slidesNumberEvenToRows;\n if (params.slidesPerColumn > 1) {\n if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n }\n }\n\n // Calc slides\n var slideSize;\n var slidesPerColumn = params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n for (var i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n var slide = slides.eq(i);\n if (params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex = (void 0);\n var column = (void 0);\n var row = (void 0);\n if (\n (params.slidesPerColumnFill === 'column')\n || (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1)\n ) {\n if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - (column * slidesPerColumn);\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n row += 1;\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n } else {\n var groupIndex = Math.floor(i / params.slidesPerGroup);\n row = Math.floor(i / params.slidesPerView) - groupIndex * params.slidesPerColumn;\n column = i - row * params.slidesPerView - groupIndex * params.slidesPerView;\n }\n newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - (row * slidesPerRow);\n }\n slide\n .css(\n (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + \"px\"))\n )\n .attr('data-swiper-column', column)\n .attr('data-swiper-row', row);\n }\n if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n var slideStyles = win.getComputedStyle(slide[0], null);\n var currentTransform = slide[0].style.transform;\n var currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal()\n ? slide.outerWidth(true)\n : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n if (swiper.isHorizontal()) {\n var width = parseFloat(slideStyles.getPropertyValue('width'));\n var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n var boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box' && !Browser.isIE) {\n slideSize = width + marginLeft + marginRight;\n } else {\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n }\n } else {\n var height = parseFloat(slideStyles.getPropertyValue('height'));\n var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing$1 && boxSizing$1 === 'border-box' && !Browser.isIE) {\n slideSize = height + marginTop + marginBottom;\n } else {\n slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n }\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n } else {\n slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = slideSize + \"px\";\n } else {\n slides[i].style.height = slideSize + \"px\";\n }\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }\n if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n var newSlidesGrid;\n\n if (\n rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n }\n if (!Support.flexbox || params.setWrapperSize) {\n if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n if (params.centeredSlides) {\n newSlidesGrid = [];\n for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {\n var slidesGridItem = snapGrid[i$1];\n if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n }\n snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {\n var slidesGridItem$1 = snapGrid[i$2];\n if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem$1);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) { snapGrid = [0]; }\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) { slides.css({ marginLeft: (spaceBetween + \"px\") }); }\n else { slides.css({ marginRight: (spaceBetween + \"px\") }); }\n } else { slides.css({ marginBottom: (spaceBetween + \"px\") }); }\n }\n\n if (params.centerInsufficientSlides) {\n var allSlidesSize = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n var allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach(function (snap, snapIndex) {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach(function (snap, snapIndex) {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Utils.extend(swiper, {\n slides: slides,\n snapGrid: snapGrid,\n slidesGrid: slidesGrid,\n slidesSizesGrid: slidesSizesGrid,\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n }\n\n function updateAutoHeight (speed) {\n var swiper = this;\n var activeSlides = [];\n var newHeight = 0;\n var i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n var index = swiper.activeIndex + i;\n if (index > swiper.slides.length) { break; }\n activeSlides.push(swiper.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n }\n\n function updateSlidesOffset () {\n var swiper = this;\n var slides = swiper.slides;\n for (var i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n }\n\n function updateSlidesProgress (translate) {\n if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n var swiper = this;\n var params = swiper.params;\n\n var slides = swiper.slides;\n var rtl = swiper.rtlTranslate;\n\n if (slides.length === 0) { return; }\n if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n var offsetCenter = -translate;\n if (rtl) { offsetCenter = translate; }\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (var i = 0; i < slides.length; i += 1) {\n var slide = slides[i];\n var slideProgress = (\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n ) / (slide.swiperSlideSize + params.spaceBetween);\n if (params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n var isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n || (slideAfter > 1 && slideAfter <= swiper.size)\n || (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n }\n\n function updateProgress (translate) {\n if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n var swiper = this;\n var params = swiper.params;\n\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n var progress = swiper.progress;\n var isBeginning = swiper.isBeginning;\n var isEnd = swiper.isEnd;\n var wasBeginning = isBeginning;\n var wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / (translatesDiff);\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Utils.extend(swiper, {\n progress: progress,\n isBeginning: isBeginning,\n isEnd: isEnd,\n });\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n }\n\n function updateSlidesClasses () {\n var swiper = this;\n\n var slides = swiper.slides;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n var realIndex = swiper.realIndex;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n var activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n }\n\n function updateActiveIndex (newActiveIndex) {\n var swiper = this;\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n var slidesGrid = swiper.slidesGrid;\n var snapGrid = swiper.snapGrid;\n var params = swiper.params;\n var previousIndex = swiper.activeIndex;\n var previousRealIndex = swiper.realIndex;\n var previousSnapIndex = swiper.snapIndex;\n var activeIndex = newActiveIndex;\n var snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n snapIndex = Math.floor(activeIndex / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n Utils.extend(swiper, {\n snapIndex: snapIndex,\n realIndex: realIndex,\n previousIndex: previousIndex,\n activeIndex: activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n }\n\n function updateClickedSlide (e) {\n var swiper = this;\n var params = swiper.params;\n var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) { slideFound = true; }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = $(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n }\n\n var update = {\n updateSize: updateSize,\n updateSlides: updateSlides,\n updateAutoHeight: updateAutoHeight,\n updateSlidesOffset: updateSlidesOffset,\n updateSlidesProgress: updateSlidesProgress,\n updateProgress: updateProgress,\n updateSlidesClasses: updateSlidesClasses,\n updateActiveIndex: updateActiveIndex,\n updateClickedSlide: updateClickedSlide,\n };\n\n function getTranslate (axis) {\n if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n var swiper = this;\n\n var params = swiper.params;\n var rtl = swiper.rtlTranslate;\n var translate = swiper.translate;\n var $wrapperEl = swiper.$wrapperEl;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n if (rtl) { currentTranslate = -currentTranslate; }\n\n return currentTranslate || 0;\n }\n\n function setTranslate (translate, byController) {\n var swiper = this;\n var rtl = swiper.rtlTranslate;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var progress = swiper.progress;\n var x = 0;\n var y = 0;\n var z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (!params.virtualTranslate) {\n if (Support.transforms3d) { $wrapperEl.transform((\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\")); }\n else { $wrapperEl.transform((\"translate(\" + x + \"px, \" + y + \"px)\")); }\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n }\n\n function minTranslate () {\n return (-this.snapGrid[0]);\n }\n\n function maxTranslate () {\n return (-this.snapGrid[this.snapGrid.length - 1]);\n }\n\n var translate = {\n getTranslate: getTranslate,\n setTranslate: setTranslate,\n minTranslate: minTranslate,\n maxTranslate: maxTranslate,\n };\n\n function setTransition (duration, byController) {\n var swiper = this;\n\n swiper.$wrapperEl.transition(duration);\n\n swiper.emit('setTransition', duration, byController);\n }\n\n function transitionStart (runCallbacks, direction) {\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var params = swiper.params;\n var previousIndex = swiper.previousIndex;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) { dir = 'next'; }\n else if (activeIndex < previousIndex) { dir = 'prev'; }\n else { dir = 'reset'; }\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n swiper.emit('slideChangeTransitionStart');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n }\n\n function transitionEnd$1 (runCallbacks, direction) {\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var previousIndex = swiper.previousIndex;\n swiper.animating = false;\n swiper.setTransition(0);\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) { dir = 'next'; }\n else if (activeIndex < previousIndex) { dir = 'prev'; }\n else { dir = 'reset'; }\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n swiper.emit('slideChangeTransitionEnd');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n }\n\n var transition$1 = {\n setTransition: setTransition,\n transitionStart: transitionStart,\n transitionEnd: transitionEnd$1,\n };\n\n function slideTo (index, speed, runCallbacks, internal) {\n if ( index === void 0 ) index = 0;\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var slideIndex = index;\n if (slideIndex < 0) { slideIndex = 0; }\n\n var params = swiper.params;\n var snapGrid = swiper.snapGrid;\n var slidesGrid = swiper.slidesGrid;\n var previousIndex = swiper.previousIndex;\n var activeIndex = swiper.activeIndex;\n var rtl = swiper.rtlTranslate;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n var translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) { return false; }\n }\n }\n\n var direction;\n if (slideIndex > activeIndex) { direction = 'next'; }\n else if (slideIndex < activeIndex) { direction = 'prev'; }\n else { direction = 'reset'; }\n\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n\n if (speed === 0 || !Support.transition) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) { return; }\n if (e.target !== this) { return; }\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n function slideToLoop (index, speed, runCallbacks, internal) {\n if ( index === void 0 ) index = 0;\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideNext (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var params = swiper.params;\n var animating = swiper.animating;\n if (params.loop) {\n if (animating) { return false; }\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slidePrev (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var params = swiper.params;\n var animating = swiper.animating;\n var snapGrid = swiper.snapGrid;\n var slidesGrid = swiper.slidesGrid;\n var rtlTranslate = swiper.rtlTranslate;\n\n if (params.loop) {\n if (animating) { return false; }\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) { return -Math.floor(Math.abs(val)); }\n return Math.floor(val);\n }\n var normalizedTranslate = normalize(translate);\n var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n var prevIndex;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideReset (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideToClosest (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var index = swiper.activeIndex;\n var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);\n\n if (snapIndex < swiper.snapGrid.length - 1) {\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n var currentSnap = swiper.snapGrid[snapIndex];\n var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) {\n index = swiper.params.slidesPerGroup;\n }\n }\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n }\n\n function slideToClickedSlide () {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n\n var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n var slideToIndex = swiper.clickedIndex;\n var realIndex;\n if (params.loop) {\n if (swiper.animating) { return; }\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n .eq(0)\n .index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n .eq(0)\n .index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n\n var slide = {\n slideTo: slideTo,\n slideToLoop: slideToLoop,\n slideNext: slideNext,\n slidePrev: slidePrev,\n slideReset: slideReset,\n slideToClosest: slideToClosest,\n slideToClickedSlide: slideToClickedSlide,\n };\n\n function loopCreate () {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n // Remove duplicated slides\n $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n if (params.loopFillGroupWithBlank) {\n var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (var i = 0; i < blankSlidesNum; i += 1) {\n var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n var prependSlides = [];\n var appendSlides = [];\n slides.each(function (index, el) {\n var slide = $(el);\n if (index < swiper.loopedSlides) { appendSlides.push(el); }\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n slide.attr('data-swiper-slide-index', index);\n });\n for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {\n $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {\n $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n }\n\n function loopFix () {\n var swiper = this;\n var params = swiper.params;\n var activeIndex = swiper.activeIndex;\n var slides = swiper.slides;\n var loopedSlides = swiper.loopedSlides;\n var allowSlidePrev = swiper.allowSlidePrev;\n var allowSlideNext = swiper.allowSlideNext;\n var snapGrid = swiper.snapGrid;\n var rtl = swiper.rtlTranslate;\n var newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n var snapTranslate = -snapGrid[activeIndex];\n var diff = snapTranslate - swiper.getTranslate();\n\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n newIndex += loopedSlides;\n var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex >= slides.length - loopedSlides)) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged$1 && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n }\n\n function loopDestroy () {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n var slides = swiper.slides;\n $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \",.\" + (params.slideClass) + \".\" + (params.slideBlankClass))).remove();\n slides.removeAttr('data-swiper-slide-index');\n }\n\n var loop = {\n loopCreate: loopCreate,\n loopFix: loopFix,\n loopDestroy: loopDestroy,\n };\n\n function setGrabCursor (moving) {\n var swiper = this;\n if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n var el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n }\n\n function unsetGrabCursor () {\n var swiper = this;\n if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }\n swiper.el.style.cursor = '';\n }\n\n var grabCursor = {\n setGrabCursor: setGrabCursor,\n unsetGrabCursor: unsetGrabCursor,\n };\n\n function appendSlide (slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { $wrapperEl.append(slides[i]); }\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n }\n\n function prependSlide (slides) {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n var newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n }\n\n function addSlide (index, slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n var activeIndex = swiper.activeIndex;\n var activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n var baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n var slidesBuffer = [];\n for (var i = baseLength - 1; i >= index; i -= 1) {\n var currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {\n $wrapperEl.append(slidesBuffer[i$2]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeSlide (slidesIndexes) {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n\n var activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n var newActiveIndex = activeIndexBuffer;\n var indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (var i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeAllSlides () {\n var swiper = this;\n\n var slidesIndexes = [];\n for (var i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n }\n\n var manipulation = {\n appendSlide: appendSlide,\n prependSlide: prependSlide,\n addSlide: addSlide,\n removeSlide: removeSlide,\n removeAllSlides: removeAllSlides,\n };\n\n var Device = (function Device() {\n var ua = win.navigator.userAgent;\n\n var device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n windows: false,\n iphone: false,\n ipod: false,\n ipad: false,\n cordova: win.cordova || win.phonegap,\n phonegap: win.cordova || win.phonegap,\n };\n\n var windows = ua.match(/(Windows Phone);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n\n\n // Windows\n if (windows) {\n device.os = 'windows';\n device.osVersion = windows[2];\n device.windows = true;\n }\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.iphone = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Desktop\n device.desktop = !(device.os || device.android || device.webView);\n\n // Webview\n device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);\n\n // Minimal UI\n if (device.os && device.os === 'ios') {\n var osVersionArr = device.osVersion.split('.');\n var metaViewport = doc.querySelector('meta[name=\"viewport\"]');\n device.minimalUi = !device.webView\n && (ipod || iphone)\n && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7)\n && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;\n }\n\n // Pixel Ratio\n device.pixelRatio = win.devicePixelRatio || 1;\n\n // Export object\n return device;\n }());\n\n function onTouchStart (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params;\n var touches = swiper.touches;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }\n if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }\n if (data.isTouched && data.isMoved) { return; }\n if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!$(e).closest(params.swipeHandler)[0]) { return; }\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n var startX = touches.currentX;\n var startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection\n && ((startX <= edgeSwipeThreshold)\n || (startX >= win.screen.width - edgeSwipeThreshold))\n ) {\n return;\n }\n\n Utils.extend(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = Utils.now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) { data.allowThresholdMove = false; }\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($(e.target).is(data.formElements)) { preventDefault = false; }\n if (\n doc.activeElement\n && $(doc.activeElement).is(data.formElements)\n && doc.activeElement !== e.target\n ) {\n doc.activeElement.blur();\n }\n\n var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n }\n\n function onTouchMove (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params;\n var touches = swiper.touches;\n var rtl = swiper.rtlTranslate;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type === 'mousemove') { return; }\n var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data.isTouched) {\n Utils.extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = Utils.now();\n }\n return;\n }\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data.isTouchEvent && doc.activeElement) {\n if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) { return; }\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n var diffX = touches.currentX - touches.startX;\n var diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }\n\n if (typeof data.isScrolling === 'undefined') {\n var touchAngle;\n if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if ((diffX * diffX) + (diffY * diffY) >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n e.preventDefault();\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n\n var diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) { diff = -diff; }\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n\n var disableParentSwiper = true;\n var resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n disableParentSwiper = false;\n if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger) { return; }\n\n // Update active index in free mode\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode) {\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: Utils.now(),\n });\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n }\n\n function onTouchEnd (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n\n var params = swiper.params;\n var touches = swiper.touches;\n var rtl = swiper.rtlTranslate;\n var $wrapperEl = swiper.$wrapperEl;\n var slidesGrid = swiper.slidesGrid;\n var snapGrid = swiper.snapGrid;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n var touchEndTime = Utils.now();\n var timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap', e);\n if (timeDiff < 300 && (touchEndTime - data.lastClickTime) > 300) {\n if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n data.clickTimeout = Utils.nextTick(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.emit('click', e);\n }, 300);\n }\n if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n if (data.clickTimeout) { clearTimeout(data.clickTimeout); }\n swiper.emit('doubleTap', e);\n }\n }\n\n data.lastClickTime = Utils.now();\n Utils.nextTick(function () {\n if (!swiper.destroyed) { swiper.allowClick = true; }\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n var currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data.velocities.length > 1) {\n var lastMoveEvent = data.velocities.pop();\n var velocityEvent = data.velocities.pop();\n\n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n data.velocities.length = 0;\n var momentumDuration = 1000 * params.freeModeMomentumRatio;\n var momentumDistance = swiper.velocity * momentumDuration;\n\n var newPosition = swiper.translate + momentumDistance;\n if (rtl) { newPosition = -newPosition; }\n\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n var needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n } else if (params.freeModeSticky) {\n var nextSlide;\n for (var j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n swiper.once('transitionEnd', function () {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n swiper.emit('momentumBounce');\n\n swiper.setTransition(params.speed);\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.transitionEnd();\n });\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n return;\n }\n\n // Find current slide\n var stopIndex = 0;\n var groupSize = swiper.slidesSizesGrid[0];\n for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {\n if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n else { swiper.slideTo(stopIndex); }\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n else { swiper.slideTo(stopIndex); }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + params.slidesPerGroup);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n }\n }\n\n function onResize () {\n var swiper = this;\n\n var params = swiper.params;\n var el = swiper.el;\n\n if (el && el.offsetWidth === 0) { return; }\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n var allowSlideNext = swiper.allowSlideNext;\n var allowSlidePrev = swiper.allowSlidePrev;\n var snapGrid = swiper.snapGrid;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n if (params.freeMode) {\n var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n swiper.updateSlidesClasses();\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n }\n\n function onClick (e) {\n var swiper = this;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) { e.preventDefault(); }\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n }\n\n function attachEvents() {\n var swiper = this;\n var params = swiper.params;\n var touchEvents = swiper.touchEvents;\n var el = swiper.el;\n var wrapperEl = swiper.wrapperEl;\n\n {\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n var capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.addEventListener('mousedown', swiper.onTouchStart, false);\n doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.addEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n }\n\n function detachEvents() {\n var swiper = this;\n\n var params = swiper.params;\n var touchEvents = swiper.touchEvents;\n var el = swiper.el;\n var wrapperEl = swiper.wrapperEl;\n\n var target = params.touchEventsTarget === 'container' ? el : wrapperEl;\n var capture = !!params.nested;\n\n // Touch Events\n {\n if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n target.removeEventListener('mousedown', swiper.onTouchStart, false);\n doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n target.removeEventListener('click', swiper.onClick, true);\n }\n }\n\n // Resize handler\n swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n }\n\n var events = {\n attachEvents: attachEvents,\n detachEvents: detachEvents,\n };\n\n function setBreakpoint () {\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var initialized = swiper.initialized;\n var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n var params = swiper.params;\n var breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }\n\n // Set breakpoint for window width and update parameters\n var breakpoint = swiper.getBreakpoint(breakpoints);\n\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n if (breakpointOnlyParams) {\n ['slidesPerView', 'spaceBetween', 'slidesPerGroup'].forEach(function (param) {\n var paramValue = breakpointOnlyParams[param];\n if (typeof paramValue === 'undefined') { return; }\n if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n breakpointOnlyParams[param] = 'auto';\n } else if (param === 'slidesPerView') {\n breakpointOnlyParams[param] = parseFloat(paramValue);\n } else {\n breakpointOnlyParams[param] = parseInt(paramValue, 10);\n }\n });\n }\n\n var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n Utils.extend(swiper.params, breakpointParams);\n\n Utils.extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n swiper.currentBreakpoint = breakpoint;\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n }\n\n function getBreakpoint (breakpoints) {\n var swiper = this;\n // Get breakpoint for window width\n if (!breakpoints) { return undefined; }\n var breakpoint = false;\n var points = [];\n Object.keys(breakpoints).forEach(function (point) {\n points.push(point);\n });\n points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });\n for (var i = 0; i < points.length; i += 1) {\n var point = points[i];\n if (swiper.params.breakpointsInverse) {\n if (point <= win.innerWidth) {\n breakpoint = point;\n }\n } else if (point >= win.innerWidth && !breakpoint) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n }\n\n var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n function addClasses () {\n var swiper = this;\n var classNames = swiper.classNames;\n var params = swiper.params;\n var rtl = swiper.rtl;\n var $el = swiper.$el;\n var suffixes = [];\n\n suffixes.push('initialized');\n suffixes.push(params.direction);\n\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n if (!Support.flexbox) {\n suffixes.push('no-flexbox');\n }\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n if (rtl) {\n suffixes.push('rtl');\n }\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n }\n if (Device.android) {\n suffixes.push('android');\n }\n if (Device.ios) {\n suffixes.push('ios');\n }\n // WP8 Touch Events Fix\n if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n suffixes.push((\"wp8-\" + (params.direction)));\n }\n\n suffixes.forEach(function (suffix) {\n classNames.push(params.containerModifierClass + suffix);\n });\n\n $el.addClass(classNames.join(' '));\n }\n\n function removeClasses () {\n var swiper = this;\n var $el = swiper.$el;\n var classNames = swiper.classNames;\n\n $el.removeClass(classNames.join(' '));\n }\n\n var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady() {\n if (callback) { callback(); }\n }\n if (!imageEl.complete || !checkForComplete) {\n if (src) {\n image = new win.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n }\n\n function preloadImages () {\n var swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) { swiper.update(); }\n swiper.emit('imagesReady');\n }\n }\n for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n var imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady\n );\n }\n }\n\n var images = {\n loadImage: loadImage,\n preloadImages: preloadImages,\n };\n\n function checkOverflow() {\n var swiper = this;\n var wasLocked = swiper.isLocked;\n\n swiper.isLocked = swiper.snapGrid.length === 1;\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked;\n\n // events\n if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n swiper.navigation.update();\n }\n }\n\n var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n var defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n //\n preventInteractionOnTransition: false,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsInverse: false,\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: true,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n };\n\n /* eslint no-param-reassign: \"off\" */\n\n var prototypes = {\n update: update,\n translate: translate,\n transition: transition$1,\n slide: slide,\n loop: loop,\n grabCursor: grabCursor,\n manipulation: manipulation,\n events: events,\n breakpoints: breakpoints,\n checkOverflow: checkOverflow$1,\n classes: classes,\n images: images,\n };\n\n var extendedDefaults = {};\n\n var Swiper = /*@__PURE__*/(function (SwiperClass) {\n function Swiper() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var el;\n var params;\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n (assign = args, el = assign[0], params = assign[1]);\n }\n if (!params) { params = {}; }\n\n params = Utils.extend({}, params);\n if (el && !params.el) { params.el = el; }\n\n SwiperClass.call(this, params);\n\n Object.keys(prototypes).forEach(function (prototypeGroup) {\n Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n if (!Swiper.prototype[protoMethod]) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n }\n });\n });\n\n // Swiper Instance\n var swiper = this;\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n Object.keys(swiper.modules).forEach(function (moduleName) {\n var module = swiper.modules[moduleName];\n if (module.params) {\n var moduleParamName = Object.keys(module.params)[0];\n var moduleParams = module.params[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (\n typeof params[moduleParamName] === 'object'\n && !('enabled' in params[moduleParamName])\n ) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n }\n });\n\n // Extend defaults with modules params\n var swiperParams = Utils.extend({}, defaults);\n swiper.useModulesParams(swiperParams);\n\n // Extend defaults with passed params\n swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = Utils.extend({}, swiper.params);\n swiper.passedParams = Utils.extend({}, params);\n\n // Save Dom lib\n swiper.$ = $;\n\n // Find el\n var $el = $(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return undefined;\n }\n\n if ($el.length > 1) {\n var swipers = [];\n $el.each(function (index, containerEl) {\n var newParams = Utils.extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n el.swiper = swiper;\n $el.data('swiper', swiper);\n\n // Find Wrapper\n var $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n\n // Extend Swiper\n Utils.extend(swiper, {\n $el: $el,\n el: el,\n $wrapperEl: $wrapperEl,\n wrapperEl: $wrapperEl[0],\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal: function isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical: function isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // RTL\n rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n var touch = ['touchstart', 'touchmove', 'touchend'];\n var desktop = ['mousedown', 'mousemove', 'mouseup'];\n if (Support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n } else if (Support.prefixedPointerEvents) {\n desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];\n }\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }()),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video',\n // Last click time\n lastClickTime: Utils.now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n\n });\n\n // Install Modules\n swiper.useModules();\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n\n if ( SwiperClass ) Swiper.__proto__ = SwiperClass;\n Swiper.prototype = Object.create( SwiperClass && SwiperClass.prototype );\n Swiper.prototype.constructor = Swiper;\n\n var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n var swiper = this;\n var params = swiper.params;\n var slides = swiper.slides;\n var slidesGrid = swiper.slidesGrid;\n var swiperSize = swiper.size;\n var activeIndex = swiper.activeIndex;\n var spv = 1;\n if (params.centeredSlides) {\n var slideSize = slides[activeIndex].swiperSlideSize;\n var breakLoop;\n for (var i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) { breakLoop = true; }\n }\n }\n for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {\n if (slides[i$1] && !breakLoop) {\n slideSize += slides[i$1].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) { breakLoop = true; }\n }\n }\n } else {\n for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {\n if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n return spv;\n };\n\n Swiper.prototype.update = function update () {\n var swiper = this;\n if (!swiper || swiper.destroyed) { return; }\n var snapGrid = swiper.snapGrid;\n var params = swiper.params;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n var translated;\n if (swiper.params.freeMode) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n };\n\n Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {\n if ( needUpdate === void 0 ) needUpdate = true;\n\n var swiper = this;\n var currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n return swiper;\n }\n\n swiper.$el\n .removeClass((\"\" + (swiper.params.containerModifierClass) + currentDirection + \" wp8-\" + currentDirection))\n .addClass((\"\" + (swiper.params.containerModifierClass) + newDirection));\n\n if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {\n swiper.$el.addClass(((swiper.params.containerModifierClass) + \"wp8-\" + newDirection));\n }\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each(function (slideIndex, slideEl) {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) { swiper.update(); }\n\n return swiper;\n };\n\n Swiper.prototype.init = function init () {\n var swiper = this;\n if (swiper.initialized) { return; }\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n };\n\n Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n if ( deleteInstance === void 0 ) deleteInstance = true;\n if ( cleanStyles === void 0 ) cleanStyles = true;\n\n var swiper = this;\n var params = swiper.params;\n var $el = swiper.$el;\n var $wrapperEl = swiper.$wrapperEl;\n var slides = swiper.slides;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass([\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index')\n .removeAttr('data-swiper-column')\n .removeAttr('data-swiper-row');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n swiper.$el.data('swiper', null);\n Utils.deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n };\n\n Swiper.extendDefaults = function extendDefaults (newDefaults) {\n Utils.extend(extendedDefaults, newDefaults);\n };\n\n staticAccessors.extendedDefaults.get = function () {\n return extendedDefaults;\n };\n\n staticAccessors.defaults.get = function () {\n return defaults;\n };\n\n staticAccessors.Class.get = function () {\n return SwiperClass;\n };\n\n staticAccessors.$.get = function () {\n return $;\n };\n\n Object.defineProperties( Swiper, staticAccessors );\n\n return Swiper;\n }(SwiperClass));\n\n var Device$1 = {\n name: 'device',\n proto: {\n device: Device,\n },\n static: {\n device: Device,\n },\n };\n\n var Support$1 = {\n name: 'support',\n proto: {\n support: Support,\n },\n static: {\n support: Support,\n },\n };\n\n var Browser$1 = {\n name: 'browser',\n proto: {\n browser: Browser,\n },\n static: {\n browser: Browser,\n },\n };\n\n var Resize = {\n name: 'resize',\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n resize: {\n resizeHandler: function resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler: function orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n swiper.emit('orientationchange');\n },\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n // Emit resize\n win.addEventListener('resize', swiper.resize.resizeHandler);\n\n // Emit orientationchange\n win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy: function destroy() {\n var swiper = this;\n win.removeEventListener('resize', swiper.resize.resizeHandler);\n win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n },\n };\n\n var Observer = {\n func: win.MutationObserver || win.WebkitMutationObserver,\n attach: function attach(target, options) {\n if ( options === void 0 ) options = {};\n\n var swiper = this;\n\n var ObserverFunc = Observer.func;\n var observer = new ObserverFunc(function (mutations) {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n swiper.emit('observerUpdate', mutations[0]);\n return;\n }\n var observerUpdate = function observerUpdate() {\n swiper.emit('observerUpdate', mutations[0]);\n };\n\n if (win.requestAnimationFrame) {\n win.requestAnimationFrame(observerUpdate);\n } else {\n win.setTimeout(observerUpdate, 0);\n }\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n swiper.observer.observers.push(observer);\n },\n init: function init() {\n var swiper = this;\n if (!Support.observer || !swiper.params.observer) { return; }\n if (swiper.params.observeParents) {\n var containerParents = swiper.$el.parents();\n for (var i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n }\n // Observe container\n swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n // Observe wrapper\n swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.observers.forEach(function (observer) {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n },\n };\n\n var Observer$1 = {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n observer: {\n init: Observer.init.bind(swiper),\n attach: Observer.attach.bind(swiper),\n destroy: Observer.destroy.bind(swiper),\n observers: [],\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.observer.init();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.destroy();\n },\n },\n };\n\n var Virtual = {\n update: function update(force) {\n var swiper = this;\n var ref = swiper.params;\n var slidesPerView = ref.slidesPerView;\n var slidesPerGroup = ref.slidesPerGroup;\n var centeredSlides = ref.centeredSlides;\n var ref$1 = swiper.params.virtual;\n var addSlidesBefore = ref$1.addSlidesBefore;\n var addSlidesAfter = ref$1.addSlidesAfter;\n var ref$2 = swiper.virtual;\n var previousFrom = ref$2.from;\n var previousTo = ref$2.to;\n var slides = ref$2.slides;\n var previousSlidesGrid = ref$2.slidesGrid;\n var renderSlide = ref$2.renderSlide;\n var previousOffset = ref$2.offset;\n swiper.updateActiveIndex();\n var activeIndex = swiper.activeIndex || 0;\n\n var offsetProp;\n if (swiper.rtlTranslate) { offsetProp = 'right'; }\n else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; }\n\n var slidesAfter;\n var slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n slidesBefore = slidesPerGroup + addSlidesAfter;\n }\n var from = Math.max((activeIndex || 0) - slidesBefore, 0);\n var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Utils.extend(swiper.virtual, {\n from: from,\n to: to,\n offset: offset,\n slidesGrid: swiper.slidesGrid,\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, (offset + \"px\"));\n }\n swiper.updateProgress();\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset: offset,\n from: from,\n to: to,\n slides: (function getSlides() {\n var slidesToRender = [];\n for (var i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()),\n });\n onRendered();\n return;\n }\n var prependIndexes = [];\n var appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass))).remove();\n } else {\n for (var i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + i + \"\\\"]\")).remove();\n }\n }\n }\n for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n if (i$1 >= from && i$1 <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i$1);\n } else {\n if (i$1 > previousTo) { appendIndexes.push(i$1); }\n if (i$1 < previousFrom) { prependIndexes.push(i$1); }\n }\n }\n }\n appendIndexes.forEach(function (index) {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort(function (a, b) { return b - a; }).forEach(function (index) {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + \"px\"));\n onRendered();\n },\n renderSlide: function renderSlide(slide, index) {\n var swiper = this;\n var params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n var $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index))\n : $((\"<div class=\\\"\" + (swiper.params.slideClass) + \"\\\" data-swiper-slide-index=\\\"\" + index + \"\\\">\" + slide + \"</div>\"));\n if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); }\n if (params.cache) { swiper.virtual.cache[index] = $slideEl; }\n return $slideEl;\n },\n appendSlide: function appendSlide(slides) {\n var swiper = this;\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { swiper.virtual.slides.push(slides[i]); }\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n swiper.virtual.update(true);\n },\n prependSlide: function prependSlide(slides) {\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var newActiveIndex = activeIndex + 1;\n var numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { swiper.virtual.slides.unshift(slides[i]); }\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n var cache = swiper.virtual.cache;\n var newCache = {};\n Object.keys(cache).forEach(function (cachedIndex) {\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cache[cachedIndex];\n });\n swiper.virtual.cache = newCache;\n }\n swiper.virtual.update(true);\n swiper.slideTo(newActiveIndex, 0);\n },\n removeSlide: function removeSlide(slidesIndexes) {\n var swiper = this;\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) { return; }\n var activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) { activeIndex -= 1; }\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) { activeIndex -= 1; }\n activeIndex = Math.max(activeIndex, 0);\n }\n swiper.virtual.update(true);\n swiper.slideTo(activeIndex, 0);\n },\n removeAllSlides: function removeAllSlides() {\n var swiper = this;\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n swiper.virtual.update(true);\n swiper.slideTo(0, 0);\n },\n };\n\n var Virtual$1 = {\n name: 'virtual',\n params: {\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n addSlidesBefore: 0,\n addSlidesAfter: 0,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n virtual: {\n update: Virtual.update.bind(swiper),\n appendSlide: Virtual.appendSlide.bind(swiper),\n prependSlide: Virtual.prependSlide.bind(swiper),\n removeSlide: Virtual.removeSlide.bind(swiper),\n removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n renderSlide: Virtual.renderSlide.bind(swiper),\n slides: swiper.params.virtual.slides,\n cache: {},\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"virtual\"));\n var overwriteParams = {\n watchSlidesProgress: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n\n if (!swiper.params.initialSlide) {\n swiper.virtual.update();\n }\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.virtual.enabled) { return; }\n swiper.virtual.update();\n },\n },\n };\n\n var Keyboard = {\n handle: function handle(event) {\n var swiper = this;\n var rtl = swiper.rtlTranslate;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n var kc = e.keyCode || e.charCode;\n // Directions locks\n if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {\n return false;\n }\n if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n var inView = false;\n // Check that swiper should be inside of visible area of window\n if (swiper.$el.parents((\".\" + (swiper.params.slideClass))).length > 0 && swiper.$el.parents((\".\" + (swiper.params.slideActiveClass))).length === 0) {\n return undefined;\n }\n var windowWidth = win.innerWidth;\n var windowHeight = win.innerHeight;\n var swiperOffset = swiper.$el.offset();\n if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; }\n var swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ];\n for (var i = 0; i < swiperCoord.length; i += 1) {\n var point = swiperCoord[i];\n if (\n point[0] >= 0 && point[0] <= windowWidth\n && point[1] >= 0 && point[1] <= windowHeight\n ) {\n inView = true;\n }\n }\n if (!inView) { return undefined; }\n }\n if (swiper.isHorizontal()) {\n if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) { swiper.slideNext(); }\n if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) { swiper.slidePrev(); }\n } else {\n if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n if (kc === 34 || kc === 40) { swiper.slideNext(); }\n if (kc === 33 || kc === 38) { swiper.slidePrev(); }\n }\n swiper.emit('keyPress', kc);\n return undefined;\n },\n enable: function enable() {\n var swiper = this;\n if (swiper.keyboard.enabled) { return; }\n $(doc).on('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = true;\n },\n disable: function disable() {\n var swiper = this;\n if (!swiper.keyboard.enabled) { return; }\n $(doc).off('keydown', swiper.keyboard.handle);\n swiper.keyboard.enabled = false;\n },\n };\n\n var Keyboard$1 = {\n name: 'keyboard',\n params: {\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n keyboard: {\n enabled: false,\n enable: Keyboard.enable.bind(swiper),\n disable: Keyboard.disable.bind(swiper),\n handle: Keyboard.handle.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.keyboard.enabled) {\n swiper.keyboard.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.keyboard.enabled) {\n swiper.keyboard.disable();\n }\n },\n },\n };\n\n function isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in doc;\n\n if (!isSupported) {\n var element = doc.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported\n && doc.implementation\n && doc.implementation.hasFeature\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n && doc.implementation.hasFeature('', '') !== true\n ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n }\n var Mousewheel = {\n lastScrollTime: Utils.now(),\n event: (function getEvent() {\n if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }\n return isEventSupported() ? 'wheel' : 'mousewheel';\n }()),\n normalize: function normalize(e) {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n\n var sX = 0;\n var sY = 0; // spinX, spinY\n var pX = 0;\n var pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = (pX < 1) ? -1 : 1;\n }\n if (pY && !sY) {\n sY = (pY < 1) ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n },\n handleMouseEnter: function handleMouseEnter() {\n var swiper = this;\n swiper.mouseEntered = true;\n },\n handleMouseLeave: function handleMouseLeave() {\n var swiper = this;\n swiper.mouseEntered = false;\n },\n handle: function handle(event) {\n var e = event;\n var swiper = this;\n var params = swiper.params.mousewheel;\n\n if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; }\n\n if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n var delta = 0;\n var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n var data = Mousewheel.normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }\n else { return true; }\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }\n else { return true; }\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) { return true; }\n\n if (params.invert) { delta = -delta; }\n\n if (!swiper.params.freeMode) {\n if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) { return true; }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) { return true; }\n }\n swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n } else {\n // Freemode or scrollContainer:\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n var position = swiper.getTranslate() + (delta * params.sensitivity);\n var wasBeginning = swiper.isBeginning;\n var wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }\n if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeModeSticky) {\n clearTimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = Utils.nextTick(function () {\n swiper.slideToClosest();\n }, 300);\n }\n // Emit event\n swiper.emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n }\n\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n return false;\n },\n enable: function enable() {\n var swiper = this;\n if (!Mousewheel.event) { return false; }\n if (swiper.mousewheel.enabled) { return false; }\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n target.on(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable: function disable() {\n var swiper = this;\n if (!Mousewheel.event) { return false; }\n if (!swiper.mousewheel.enabled) { return false; }\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.off(Mousewheel.event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n },\n };\n\n var Mousewheel$1 = {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarged: 'container',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n mousewheel: {\n enabled: false,\n enable: Mousewheel.enable.bind(swiper),\n disable: Mousewheel.disable.bind(swiper),\n handle: Mousewheel.handle.bind(swiper),\n handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n lastScrollTime: Utils.now(),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n },\n },\n };\n\n var Navigation = {\n update: function update() {\n // Update Navigation Buttons\n var swiper = this;\n var params = swiper.params.navigation;\n\n if (swiper.params.loop) { return; }\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n $prevEl.addClass(params.disabledClass);\n } else {\n $prevEl.removeClass(params.disabledClass);\n }\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n $nextEl.addClass(params.disabledClass);\n } else {\n $nextEl.removeClass(params.disabledClass);\n }\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n },\n onPrevClick: function onPrevClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) { return; }\n swiper.slidePrev();\n },\n onNextClick: function onNextClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) { return; }\n swiper.slideNext();\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) { return; }\n\n var $nextEl;\n var $prevEl;\n if (params.nextEl) {\n $nextEl = $(params.nextEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.nextEl === 'string'\n && $nextEl.length > 1\n && swiper.$el.find(params.nextEl).length === 1\n ) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n if (params.prevEl) {\n $prevEl = $(params.prevEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.prevEl === 'string'\n && $prevEl.length > 1\n && swiper.$el.find(params.prevEl).length === 1\n ) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', swiper.navigation.onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', swiper.navigation.onPrevClick);\n }\n\n Utils.extend(swiper.navigation, {\n $nextEl: $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl: $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', swiper.navigation.onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', swiper.navigation.onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n },\n };\n\n var Navigation$1 = {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n navigation: {\n init: Navigation.init.bind(swiper),\n update: Navigation.update.bind(swiper),\n destroy: Navigation.destroy.bind(swiper),\n onNextClick: Navigation.onNextClick.bind(swiper),\n onPrevClick: Navigation.onPrevClick.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge: function toEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.navigation.destroy();\n },\n click: function click(e) {\n var swiper = this;\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n if (\n swiper.params.navigation.hideOnClick\n && !$(e.target).is($prevEl)\n && !$(e.target).is($nextEl)\n ) {\n var isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n swiper.emit('navigationShow', swiper);\n } else {\n swiper.emit('navigationHide', swiper);\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n },\n },\n };\n\n var Pagination = {\n update: function update() {\n // Render || Update Pagination bullets/items\n var swiper = this;\n var rtl = swiper.rtl;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n var $el = swiper.pagination.$el;\n // Current/Total\n var current;\n var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n current -= (slidesLength - (swiper.loopedSlides * 2));\n }\n if (current > total - 1) { current -= total; }\n if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n var bullets = swiper.pagination.bullets;\n var firstIndex;\n var lastIndex;\n var midIndex;\n if (params.dynamicBullets) {\n swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (swiper.pagination.dynamicBulletIndex < 0) {\n swiper.pagination.dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - swiper.pagination.dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n if ($el.length > 1) {\n bullets.each(function (index, bullet) {\n var $bullet = $(bullet);\n var bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n }\n if (bulletIndex === firstIndex) {\n $bullet\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev\"))\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n }\n if (bulletIndex === lastIndex) {\n $bullet\n .next()\n .addClass(((params.bulletActiveClass) + \"-next\"))\n .next()\n .addClass(((params.bulletActiveClass) + \"-next-next\"));\n }\n }\n });\n } else {\n var $bullet = bullets.eq(current);\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n var $firstDisplayedBullet = bullets.eq(firstIndex);\n var $lastDisplayedBullet = bullets.eq(lastIndex);\n for (var i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n }\n $firstDisplayedBullet\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev\"))\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n $lastDisplayedBullet\n .next()\n .addClass(((params.bulletActiveClass) + \"-next\"))\n .next()\n .addClass(((params.bulletActiveClass) + \"-next-next\"));\n }\n }\n if (params.dynamicBullets) {\n var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n var offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n }\n }\n if (params.type === 'fraction') {\n $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n }\n if (params.type === 'progressbar') {\n var progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n var scale = (current + 1) / total;\n var scaleX = 1;\n var scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n swiper.emit('paginationRender', swiper, $el[0]);\n } else {\n swiper.emit('paginationUpdate', swiper, $el[0]);\n }\n $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n },\n render: function render() {\n // Render Container\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n var $el = swiper.pagination.$el;\n var paginationHTML = '';\n if (params.type === 'bullets') {\n var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += \"<\" + (params.bulletElement) + \" class=\\\"\" + (params.bulletClass) + \"\\\"></\" + (params.bulletElement) + \">\";\n }\n }\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = \"<span class=\\\"\" + (params.currentClass) + \"\\\"></span>\"\n + ' / '\n + \"<span class=\\\"\" + (params.totalClass) + \"\\\"></span>\";\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = \"<span class=\\\"\" + (params.progressbarFillClass) + \"\\\"></span>\";\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n swiper.emit('paginationRender', swiper.pagination.$el[0]);\n }\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el) { return; }\n\n var $el = $(params.el);\n if ($el.length === 0) { return; }\n\n if (\n swiper.params.uniqueNavElements\n && typeof params.el === 'string'\n && $el.length > 1\n && swiper.$el.find(params.el).length === 1\n ) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n swiper.pagination.dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n e.preventDefault();\n var index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) { index += swiper.loopedSlides; }\n swiper.slideTo(index);\n });\n }\n\n Utils.extend(swiper.pagination, {\n $el: $el,\n el: $el[0],\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n if (params.clickable) {\n $el.off('click', (\".\" + (params.bulletClass)));\n }\n },\n };\n\n var Pagination$1 = {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: function (number) { return number; },\n formatFractionTotal: function (number) { return number; },\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n modifierClass: 'swiper-pagination-', // NEW\n currentClass: 'swiper-pagination-current',\n totalClass: 'swiper-pagination-total',\n hiddenClass: 'swiper-pagination-hidden',\n progressbarFillClass: 'swiper-pagination-progressbar-fill',\n progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n clickableClass: 'swiper-pagination-clickable', // NEW\n lockClass: 'swiper-pagination-lock',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n pagination: {\n init: Pagination.init.bind(swiper),\n render: Pagination.render.bind(swiper),\n update: Pagination.update.bind(swiper),\n destroy: Pagination.destroy.bind(swiper),\n dynamicBulletIndex: 0,\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeIndexChange: function activeIndexChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapIndexChange: function snapIndexChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slidesLengthChange: function slidesLengthChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapGridLengthChange: function snapGridLengthChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.pagination.destroy();\n },\n click: function click(e) {\n var swiper = this;\n if (\n swiper.params.pagination.el\n && swiper.params.pagination.hideOnClick\n && swiper.pagination.$el.length > 0\n && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n ) {\n var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n swiper.emit('paginationShow', swiper);\n } else {\n swiper.emit('paginationHide', swiper);\n }\n swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n },\n },\n };\n\n var Scrollbar = {\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var rtl = swiper.rtlTranslate;\n var progress = swiper.progress;\n var dragSize = scrollbar.dragSize;\n var trackSize = scrollbar.trackSize;\n var $dragEl = scrollbar.$dragEl;\n var $el = scrollbar.$el;\n var params = swiper.params.scrollbar;\n\n var newSize = dragSize;\n var newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n if (Support.transforms3d) {\n $dragEl.transform((\"translate3d(\" + newPos + \"px, 0, 0)\"));\n } else {\n $dragEl.transform((\"translateX(\" + newPos + \"px)\"));\n }\n $dragEl[0].style.width = newSize + \"px\";\n } else {\n if (Support.transforms3d) {\n $dragEl.transform((\"translate3d(0px, \" + newPos + \"px, 0)\"));\n } else {\n $dragEl.transform((\"translateY(\" + newPos + \"px)\"));\n }\n $dragEl[0].style.height = newSize + \"px\";\n }\n if (params.hide) {\n clearTimeout(swiper.scrollbar.timeout);\n $el[0].style.opacity = 1;\n swiper.scrollbar.timeout = setTimeout(function () {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n swiper.scrollbar.$dragEl.transition(duration);\n },\n updateSize: function updateSize() {\n var swiper = this;\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }\n\n var scrollbar = swiper.scrollbar;\n var $dragEl = scrollbar.$dragEl;\n var $el = scrollbar.$el;\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n var divider = swiper.size / swiper.virtualSize;\n var moveDivider = divider * (trackSize / swiper.size);\n var dragSize;\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = dragSize + \"px\";\n } else {\n $dragEl[0].style.height = dragSize + \"px\";\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n Utils.extend(scrollbar, {\n trackSize: trackSize,\n divider: divider,\n moveDivider: moveDivider,\n dragSize: dragSize,\n });\n scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n },\n getPointerPosition: function getPointerPosition(e) {\n var swiper = this;\n if (swiper.isHorizontal()) {\n return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX);\n }\n return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY);\n },\n setDragPosition: function setDragPosition(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar;\n var rtl = swiper.rtlTranslate;\n var $el = scrollbar.$el;\n var dragSize = scrollbar.dragSize;\n var trackSize = scrollbar.trackSize;\n var dragStartPos = scrollbar.dragStartPos;\n\n var positionRatio;\n positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n },\n onDragStart: function onDragStart(e) {\n var swiper = this;\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar;\n var $wrapperEl = swiper.$wrapperEl;\n var $el = scrollbar.$el;\n var $dragEl = scrollbar.$dragEl;\n swiper.scrollbar.isTouched = true;\n swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n scrollbar.setDragPosition(e);\n\n clearTimeout(swiper.scrollbar.dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n swiper.emit('scrollbarDragStart', e);\n },\n onDragMove: function onDragMove(e) {\n var swiper = this;\n var scrollbar = swiper.scrollbar;\n var $wrapperEl = swiper.$wrapperEl;\n var $el = scrollbar.$el;\n var $dragEl = scrollbar.$dragEl;\n\n if (!swiper.scrollbar.isTouched) { return; }\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n scrollbar.setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n swiper.emit('scrollbarDragMove', e);\n },\n onDragEnd: function onDragEnd(e) {\n var swiper = this;\n\n var params = swiper.params.scrollbar;\n var scrollbar = swiper.scrollbar;\n var $el = scrollbar.$el;\n\n if (!swiper.scrollbar.isTouched) { return; }\n swiper.scrollbar.isTouched = false;\n if (params.hide) {\n clearTimeout(swiper.scrollbar.dragTimeout);\n swiper.scrollbar.dragTimeout = Utils.nextTick(function () {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n swiper.emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n },\n enableDraggable: function enableDraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var touchEventsTouch = swiper.touchEventsTouch;\n var touchEventsDesktop = swiper.touchEventsDesktop;\n var params = swiper.params;\n var $el = scrollbar.$el;\n var target = $el[0];\n var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n if (!Support.touch) {\n target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n disableDraggable: function disableDraggable() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var touchEventsTouch = swiper.touchEventsTouch;\n var touchEventsDesktop = swiper.touchEventsDesktop;\n var params = swiper.params;\n var $el = scrollbar.$el;\n var target = $el[0];\n var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n if (!Support.touch) {\n target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n } else {\n target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.scrollbar.el) { return; }\n var scrollbar = swiper.scrollbar;\n var $swiperEl = swiper.$el;\n var params = swiper.params.scrollbar;\n\n var $el = $(params.el);\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n var $dragEl = $el.find((\".\" + (swiper.params.scrollbar.dragClass)));\n if ($dragEl.length === 0) {\n $dragEl = $((\"<div class=\\\"\" + (swiper.params.scrollbar.dragClass) + \"\\\"></div>\"));\n $el.append($dragEl);\n }\n\n Utils.extend(scrollbar, {\n $el: $el,\n el: $el[0],\n $dragEl: $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n scrollbar.enableDraggable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.disableDraggable();\n },\n };\n\n var Scrollbar$1 = {\n name: 'scrollbar',\n params: {\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n scrollbar: {\n init: Scrollbar.init.bind(swiper),\n destroy: Scrollbar.destroy.bind(swiper),\n updateSize: Scrollbar.updateSize.bind(swiper),\n setTranslate: Scrollbar.setTranslate.bind(swiper),\n setTransition: Scrollbar.setTransition.bind(swiper),\n enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n onDragStart: Scrollbar.onDragStart.bind(swiper),\n onDragMove: Scrollbar.onDragMove.bind(swiper),\n onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n isTouched: false,\n timeout: null,\n dragTimeout: null,\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.scrollbar.init();\n swiper.scrollbar.updateSize();\n swiper.scrollbar.setTranslate();\n },\n update: function update() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n resize: function resize() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n swiper.scrollbar.updateSize();\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n swiper.scrollbar.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n swiper.scrollbar.setTransition(duration);\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.scrollbar.destroy();\n },\n },\n };\n\n var Parallax = {\n setTransform: function setTransform(el, progress) {\n var swiper = this;\n var rtl = swiper.rtl;\n\n var $el = $(el);\n var rtlFactor = rtl ? -1 : 1;\n\n var p = $el.attr('data-swiper-parallax') || '0';\n var x = $el.attr('data-swiper-parallax-x');\n var y = $el.attr('data-swiper-parallax-y');\n var scale = $el.attr('data-swiper-parallax-scale');\n var opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if ((x).indexOf('%') >= 0) {\n x = (parseInt(x, 10) * progress * rtlFactor) + \"%\";\n } else {\n x = (x * progress * rtlFactor) + \"px\";\n }\n if ((y).indexOf('%') >= 0) {\n y = (parseInt(y, 10) * progress) + \"%\";\n } else {\n y = (y * progress) + \"px\";\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px)\"));\n } else {\n var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n $el.transform((\"translate3d(\" + x + \", \" + y + \", 0px) scale(\" + currentScale + \")\"));\n }\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n var $el = swiper.$el;\n var slides = swiper.slides;\n var progress = swiper.progress;\n var snapGrid = swiper.snapGrid;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each(function (index, el) {\n swiper.parallax.setTransform(el, progress);\n });\n slides.each(function (slideIndex, slideEl) {\n var slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each(function (index, el) {\n swiper.parallax.setTransform(el, slideProgress);\n });\n });\n },\n setTransition: function setTransition(duration) {\n if ( duration === void 0 ) duration = this.params.speed;\n\n var swiper = this;\n var $el = swiper.$el;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n .each(function (index, parallaxEl) {\n var $parallaxEl = $(parallaxEl);\n var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) { parallaxDuration = 0; }\n $parallaxEl.transition(parallaxDuration);\n });\n },\n };\n\n var Parallax$1 = {\n name: 'parallax',\n params: {\n parallax: {\n enabled: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n parallax: {\n setTransform: Parallax.setTransform.bind(swiper),\n setTranslate: Parallax.setTranslate.bind(swiper),\n setTransition: Parallax.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.parallax.setTranslate();\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.parallax.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (!swiper.params.parallax.enabled) { return; }\n swiper.parallax.setTransition(duration);\n },\n },\n };\n\n var Zoom = {\n // Calc Scale From Multi-touches\n getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) { return 1; }\n var x1 = e.targetTouches[0].pageX;\n var y1 = e.targetTouches[0].pageY;\n var x2 = e.targetTouches[1].pageX;\n var y2 = e.targetTouches[1].pageY;\n var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 )));\n return distance;\n },\n // Events\n onGestureStart: function onGestureStart(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n if (!Support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureTouched = true;\n gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest('.swiper-slide');\n if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); }\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n gesture.$imageEl.transition(0);\n swiper.zoom.isScaling = true;\n },\n onGestureChange: function onGestureChange(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n if (!Support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n zoom.fakeGestureMoved = true;\n gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n if (Support.gestures) {\n zoom.scale = e.scale * zoom.currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 ));\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 ));\n }\n gesture.$imageEl.transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n },\n onGestureEnd: function onGestureEnd(e) {\n var swiper = this;\n var params = swiper.params.zoom;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n if (!Support.gestures) {\n if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n return;\n }\n if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n return;\n }\n zoom.fakeGestureTouched = false;\n zoom.fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n zoom.currentScale = zoom.scale;\n zoom.isScaling = false;\n if (zoom.scale === 1) { gesture.$slideEl = undefined; }\n },\n onTouchStart: function onTouchStart(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n if (image.isTouched) { return; }\n if (Device.android) { e.preventDefault(); }\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n },\n onTouchMove: function onTouchMove(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n var velocity = zoom.velocity;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) { return; }\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n if (swiper.rtl) {\n image.startX = -image.startX;\n image.startY = -image.startY;\n }\n }\n // Define if we need image drag\n var scaledWidth = image.width * zoom.scale;\n var scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) { return; }\n\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !zoom.isScaling) {\n if (\n swiper.isHorizontal()\n && (\n (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n )\n ) {\n image.isTouched = false;\n return;\n } if (\n !swiper.isHorizontal()\n && (\n (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n )\n ) {\n image.isTouched = false;\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 ));\n }\n if (image.currentX > image.maxX) {\n image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 ));\n }\n\n if (image.currentY < image.minY) {\n image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 ));\n }\n if (image.currentY > image.maxY) {\n image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 ));\n }\n\n // Velocity\n if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; }\n if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; }\n if (!velocity.prevTime) { velocity.prevTime = Date.now(); }\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) { velocity.x = 0; }\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) { velocity.y = 0; }\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n },\n onTouchEnd: function onTouchEnd() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n var velocity = zoom.velocity;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n var momentumDurationX = 300;\n var momentumDurationY = 300;\n var momentumDistanceX = velocity.x * momentumDurationX;\n var newPositionX = image.currentX + momentumDistanceX;\n var momentumDistanceY = velocity.y * momentumDurationY;\n var newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); }\n if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); }\n var momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n var scaledWidth = image.width * zoom.scale;\n var scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n image.maxX = -image.minX;\n image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl.transition(momentumDuration).transform((\"translate3d(\" + (image.currentX) + \"px, \" + (image.currentY) + \"px,0)\"));\n },\n onTransitionEnd: function onTransitionEnd() {\n var swiper = this;\n var zoom = swiper.zoom;\n var gesture = zoom.gesture;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n },\n // Toggle Zoom\n toggle: function toggle(e) {\n var swiper = this;\n var zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoom.out();\n } else {\n // Zoom In\n zoom.in(e);\n }\n },\n in: function in$1(e) {\n var swiper = this;\n\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture;\n var image = zoom.image;\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n gesture.$slideEl.addClass((\"\" + (params.zoomedSlideClass)));\n\n var touchX;\n var touchY;\n var offsetX;\n var offsetY;\n var diffX;\n var diffY;\n var translateX;\n var translateY;\n var imageWidth;\n var imageHeight;\n var scaledWidth;\n var scaledHeight;\n var translateMinX;\n var translateMinY;\n var translateMaxX;\n var translateMaxY;\n var slideWidth;\n var slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left;\n offsetY = gesture.$slideEl.offset().top;\n diffX = (offsetX + (slideWidth / 2)) - touchX;\n diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl.transition(300).transform((\"translate3d(\" + translateX + \"px, \" + translateY + \"px,0)\"));\n gesture.$imageEl.transition(300).transform((\"translate3d(0,0,0) scale(\" + (zoom.scale) + \")\"));\n },\n out: function out() {\n var swiper = this;\n\n var zoom = swiper.zoom;\n var params = swiper.params.zoom;\n var gesture = zoom.gesture;\n\n if (!gesture.$slideEl) {\n gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');\n gesture.$imageWrapEl = gesture.$imageEl.parent((\".\" + (params.containerClass)));\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }\n\n zoom.scale = 1;\n zoom.currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass((\"\" + (params.zoomedSlideClass)));\n gesture.$slideEl = undefined;\n },\n // Attach/Detach Events\n enable: function enable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (zoom.enabled) { return; }\n zoom.enabled = true;\n\n var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.on(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove);\n },\n disable: function disable() {\n var swiper = this;\n var zoom = swiper.zoom;\n if (!zoom.enabled) { return; }\n\n swiper.zoom.enabled = false;\n\n var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n\n // Scale image\n if (Support.gestures) {\n swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);\n }\n\n // Move image\n swiper.$wrapperEl.off(swiper.touchEvents.move, (\".\" + (swiper.params.zoom.containerClass)), zoom.onTouchMove);\n },\n };\n\n var Zoom$1 = {\n name: 'zoom',\n params: {\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed',\n },\n },\n create: function create() {\n var swiper = this;\n var zoom = {\n enabled: false,\n scale: 1,\n currentScale: 1,\n isScaling: false,\n gesture: {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n },\n image: {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {},\n },\n velocity: {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n },\n };\n\n ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) {\n zoom[methodName] = Zoom[methodName].bind(swiper);\n });\n Utils.extend(swiper, {\n zoom: zoom,\n });\n\n var scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get: function get() {\n return scale;\n },\n set: function set(value) {\n if (scale !== value) {\n var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n swiper.emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.zoom.enabled) {\n swiper.zoom.enable();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.zoom.disable();\n },\n touchStart: function touchStart(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) { return; }\n swiper.zoom.onTouchStart(e);\n },\n touchEnd: function touchEnd(e) {\n var swiper = this;\n if (!swiper.zoom.enabled) { return; }\n swiper.zoom.onTouchEnd(e);\n },\n doubleTap: function doubleTap(e) {\n var swiper = this;\n if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n swiper.zoom.toggle(e);\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n swiper.zoom.onTransitionEnd();\n }\n },\n },\n };\n\n var Lazy = {\n loadInSlide: function loadInSlide(index, loadInDuplicate) {\n if ( loadInDuplicate === void 0 ) loadInDuplicate = true;\n\n var swiper = this;\n var params = swiper.params.lazy;\n if (typeof index === 'undefined') { return; }\n if (swiper.slides.length === 0) { return; }\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n var $slideEl = isVirtual\n ? swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\"))\n : swiper.slides.eq(index);\n\n var $images = $slideEl.find((\".\" + (params.elementClass) + \":not(.\" + (params.loadedClass) + \"):not(.\" + (params.loadingClass) + \")\"));\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images = $images.add($slideEl[0]);\n }\n if ($images.length === 0) { return; }\n\n $images.each(function (imageIndex, imageEl) {\n var $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n var background = $imageEl.attr('data-background');\n var src = $imageEl.attr('data-src');\n var srcset = $imageEl.attr('data-srcset');\n var sizes = $imageEl.attr('data-sizes');\n\n swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; }\n if (background) {\n $imageEl.css('background-image', (\"url(\\\"\" + background + \"\\\")\"));\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find((\".\" + (params.preloaderClass))).remove();\n if (swiper.params.loop && loadInDuplicate) {\n var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n var originalSlide = swiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]:not(.\" + (swiper.params.slideDuplicateClass) + \")\"));\n swiper.lazy.loadInSlide(originalSlide.index(), false);\n } else {\n var duplicatedSlide = swiper.$wrapperEl.children((\".\" + (swiper.params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + slideOriginalIndex + \"\\\"]\"));\n swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n }\n }\n swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n });\n\n swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n },\n load: function load() {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var swiperParams = swiper.params;\n var slides = swiper.slides;\n var activeIndex = swiper.activeIndex;\n var isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n var params = swiperParams.lazy;\n\n var slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children((\".\" + (swiperParams.slideClass) + \"[data-swiper-slide-index=\\\"\" + index + \"\\\"]\")).length) {\n return true;\n }\n } else if (slides[index]) { return true; }\n return false;\n }\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n return $(slideEl).index();\n }\n\n if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }\n if (swiper.params.watchSlidesVisibility) {\n $wrapperEl.children((\".\" + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {\n var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n swiper.lazy.loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) { swiper.lazy.loadInSlide(i); }\n }\n } else {\n swiper.lazy.loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n var amount = params.loadPrevNextAmount;\n var spv = slidesPerView;\n var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {\n if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }\n }\n // Prev Slides\n for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {\n if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }\n }\n } else {\n var nextSlide = $wrapperEl.children((\".\" + (swiperParams.slideNextClass)));\n if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }\n\n var prevSlide = $wrapperEl.children((\".\" + (swiperParams.slidePrevClass)));\n if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }\n }\n }\n },\n };\n\n var Lazy$1 = {\n name: 'lazy',\n params: {\n lazy: {\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n lazy: {\n initialImageLoaded: false,\n load: Lazy.load.bind(swiper),\n loadInSlide: Lazy.loadInSlide.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n },\n init: function init() {\n var swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n swiper.lazy.load();\n }\n },\n scroll: function scroll() {\n var swiper = this;\n if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n swiper.lazy.load();\n }\n },\n resize: function resize() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n scrollbarDragMove: function scrollbarDragMove() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n },\n transitionStart: function transitionStart() {\n var swiper = this;\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n swiper.lazy.load();\n }\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n swiper.lazy.load();\n }\n },\n },\n };\n\n /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\n var Controller = {\n LinearSpline: function LinearSpline(x, y) {\n var binarySearch = (function search() {\n var maxIndex;\n var minIndex;\n var guess;\n return function (array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }());\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1;\n var i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) { return 0; }\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n };\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getInterpolateFunction: function getInterpolateFunction(c) {\n var swiper = this;\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n },\n setTranslate: function setTranslate(setTranslate$1, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var multiplier;\n var controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n Utils.nextTick(function () {\n c.updateAutoHeight();\n });\n }\n c.$wrapperEl.transitionEnd(function () {\n if (!controlled) { return; }\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n },\n };\n var Controller$1 = {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n controller: {\n control: swiper.params.controller.control,\n getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n setTranslate: Controller.setTranslate.bind(swiper),\n setTransition: Controller.setTransition.bind(swiper),\n },\n });\n },\n on: {\n update: function update() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n setTranslate: function setTranslate(translate, byController) {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n swiper.controller.setTranslate(translate, byController);\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n swiper.controller.setTransition(duration, byController);\n },\n },\n };\n\n var a11y = {\n makeElFocusable: function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addElRole: function addElRole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addElLabel: function addElLabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n disableEl: function disableEl($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableEl: function enableEl($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onEnterKey: function onEnterKey(e) {\n var swiper = this;\n var params = swiper.params.a11y;\n if (e.keyCode !== 13) { return; }\n var $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n swiper.a11y.notify(params.lastSlideMessage);\n } else {\n swiper.a11y.notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n swiper.a11y.notify(params.firstSlideMessage);\n } else {\n swiper.a11y.notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n $targetEl[0].click();\n }\n },\n notify: function notify(message) {\n var swiper = this;\n var notification = swiper.a11y.liveRegion;\n if (notification.length === 0) { return; }\n notification.html('');\n notification.html(message);\n },\n updateNavigation: function updateNavigation() {\n var swiper = this;\n\n if (swiper.params.loop) { return; }\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n swiper.a11y.disableEl($prevEl);\n } else {\n swiper.a11y.enableEl($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n swiper.a11y.disableEl($nextEl);\n } else {\n swiper.a11y.enableEl($nextEl);\n }\n }\n },\n updatePagination: function updatePagination() {\n var swiper = this;\n var params = swiper.params.a11y;\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n var $bulletEl = $(bulletEl);\n swiper.a11y.makeElFocusable($bulletEl);\n swiper.a11y.addElRole($bulletEl, 'button');\n swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n });\n }\n },\n init: function init() {\n var swiper = this;\n\n swiper.$el.append(swiper.a11y.liveRegion);\n\n // Navigation\n var params = swiper.params.a11y;\n var $nextEl;\n var $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n swiper.a11y.makeElFocusable($nextEl);\n swiper.a11y.addElRole($nextEl, 'button');\n swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n $nextEl.on('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n swiper.a11y.makeElFocusable($prevEl);\n swiper.a11y.addElRole($prevEl, 'button');\n swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n $prevEl.on('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }\n\n var $nextEl;\n var $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n }\n },\n };\n var A11y = {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n a11y: {\n liveRegion: $((\"<span class=\\\"\" + (swiper.params.a11y.notificationClass) + \"\\\" aria-live=\\\"assertive\\\" aria-atomic=\\\"true\\\"></span>\")),\n },\n });\n Object.keys(a11y).forEach(function (methodName) {\n swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.init();\n swiper.a11y.updateNavigation();\n },\n toEdge: function toEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updateNavigation();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updateNavigation();\n },\n paginationUpdate: function paginationUpdate() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updatePagination();\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.destroy();\n },\n },\n };\n\n var History = {\n init: function init() {\n var swiper = this;\n if (!swiper.params.history) { return; }\n if (!win.history || !win.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n var history = swiper.history;\n history.initialized = true;\n history.paths = History.getPathValues();\n if (!history.paths.key && !history.paths.value) { return; }\n history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n win.addEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.history.replaceState) {\n win.removeEventListener('popstate', swiper.history.setHistoryPopState);\n }\n },\n setHistoryPopState: function setHistoryPopState() {\n var swiper = this;\n swiper.history.paths = History.getPathValues();\n swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n },\n getPathValues: function getPathValues() {\n var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; });\n var total = pathArray.length;\n var key = pathArray[total - 2];\n var value = pathArray[total - 1];\n return { key: key, value: value };\n },\n setHistory: function setHistory(key, index) {\n var swiper = this;\n if (!swiper.history.initialized || !swiper.params.history.enabled) { return; }\n var slide = swiper.slides.eq(index);\n var value = History.slugify(slide.attr('data-history'));\n if (!win.location.pathname.includes(key)) {\n value = key + \"/\" + value;\n }\n var currentState = win.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n win.history.replaceState({ value: value }, null, value);\n } else {\n win.history.pushState({ value: value }, null, value);\n }\n },\n slugify: function slugify(text) {\n return text.toString()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n },\n scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {\n var swiper = this;\n if (value) {\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var slide = swiper.slides.eq(i);\n var slideHistory = History.slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n var index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n },\n };\n\n var History$1 = {\n name: 'history',\n params: {\n history: {\n enabled: false,\n replaceState: false,\n key: 'slides',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n history: {\n init: History.init.bind(swiper),\n setHistory: History.setHistory.bind(swiper),\n setHistoryPopState: History.setHistoryPopState.bind(swiper),\n scrollToSlide: History.scrollToSlide.bind(swiper),\n destroy: History.destroy.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.history.enabled) {\n swiper.history.destroy();\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.history.initialized) {\n swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n },\n },\n };\n\n var HashNavigation = {\n onHashCange: function onHashCange() {\n var swiper = this;\n var newHash = doc.location.hash.replace('#', '');\n var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n var newIndex = swiper.$wrapperEl.children((\".\" + (swiper.params.slideClass) + \"[data-hash=\\\"\" + newHash + \"\\\"]\")).index();\n if (typeof newIndex === 'undefined') { return; }\n swiper.slideTo(newIndex);\n }\n },\n setHash: function setHash() {\n var swiper = this;\n if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; }\n if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {\n win.history.replaceState(null, null, ((\"#\" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || false));\n } else {\n var slide = swiper.slides.eq(swiper.activeIndex);\n var hash = slide.attr('data-hash') || slide.attr('data-history');\n doc.location.hash = hash || '';\n }\n },\n init: function init() {\n var swiper = this;\n if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) { return; }\n swiper.hashNavigation.initialized = true;\n var hash = doc.location.hash.replace('#', '');\n if (hash) {\n var speed = 0;\n for (var i = 0, length = swiper.slides.length; i < length; i += 1) {\n var slide = swiper.slides.eq(i);\n var slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n var index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(win).on('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.hashNavigation.watchState) {\n $(win).off('hashchange', swiper.hashNavigation.onHashCange);\n }\n },\n };\n var HashNavigation$1 = {\n name: 'hash-navigation',\n params: {\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n hashNavigation: {\n initialized: false,\n init: HashNavigation.init.bind(swiper),\n destroy: HashNavigation.destroy.bind(swiper),\n setHash: HashNavigation.setHash.bind(swiper),\n onHashCange: HashNavigation.onHashCange.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.init();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.hashNavigation.enabled) {\n swiper.hashNavigation.destroy();\n }\n },\n transitionEnd: function transitionEnd() {\n var swiper = this;\n if (swiper.hashNavigation.initialized) {\n swiper.hashNavigation.setHash();\n }\n },\n },\n };\n\n /* eslint no-underscore-dangle: \"off\" */\n\n var Autoplay = {\n run: function run() {\n var swiper = this;\n var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n var delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = Utils.nextTick(function () {\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isBeginning) {\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isEnd) {\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n }, delay);\n },\n start: function start() {\n var swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n if (swiper.autoplay.running) { return false; }\n swiper.autoplay.running = true;\n swiper.emit('autoplayStart');\n swiper.autoplay.run();\n return true;\n },\n stop: function stop() {\n var swiper = this;\n if (!swiper.autoplay.running) { return false; }\n if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n if (swiper.autoplay.timeout) {\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n swiper.autoplay.running = false;\n swiper.emit('autoplayStop');\n return true;\n },\n pause: function pause(speed) {\n var swiper = this;\n if (!swiper.autoplay.running) { return; }\n if (swiper.autoplay.paused) { return; }\n if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n }\n },\n };\n\n var Autoplay$1 = {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n autoplay: {\n running: false,\n paused: false,\n run: Autoplay.run.bind(swiper),\n start: Autoplay.start.bind(swiper),\n stop: Autoplay.stop.bind(swiper),\n pause: Autoplay.pause.bind(swiper),\n onTransitionEnd: function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n if (e.target !== this) { return; }\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n },\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n }\n },\n beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderFirstMove: function sliderFirstMove() {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n },\n },\n };\n\n var Fade = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var slides = swiper.slides;\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = swiper.slides.eq(i);\n var offset = $slideEl[0].swiperSlideOffset;\n var tx = -offset;\n if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }\n var ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = swiper.params.fadeEffect.crossFade\n ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n $slideEl\n .css({\n opacity: slideOpacity,\n })\n .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\"));\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var slides = swiper.slides;\n var $wrapperEl = swiper.$wrapperEl;\n slides.transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n slides.transitionEnd(function () {\n if (eventTriggered) { return; }\n if (!swiper || swiper.destroyed) { return; }\n eventTriggered = true;\n swiper.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (var i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n };\n\n var EffectFade = {\n name: 'effect-fade',\n params: {\n fadeEffect: {\n crossFade: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n fadeEffect: {\n setTranslate: Fade.setTranslate.bind(swiper),\n setTransition: Fade.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"fade\"));\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.fadeEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.fadeEffect.setTransition(duration);\n },\n },\n };\n\n var Cube = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var $el = swiper.$el;\n var $wrapperEl = swiper.$wrapperEl;\n var slides = swiper.slides;\n var swiperWidth = swiper.width;\n var swiperHeight = swiper.height;\n var rtl = swiper.rtlTranslate;\n var swiperSize = swiper.size;\n var params = swiper.params.cubeEffect;\n var isHorizontal = swiper.isHorizontal();\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n var wrapperRotate = 0;\n var $cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: (swiperWidth + \"px\") });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = slides.eq(i);\n var slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n var slideAngle = slideIndex * 90;\n var round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n var tx = 0;\n var ty = 0;\n var tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + (round * 4 * swiperSize);\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = (3 * swiperSize) + (swiperSize * 4 * round);\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n var transform = \"rotateX(\" + (isHorizontal ? 0 : -slideAngle) + \"deg) rotateY(\" + (isHorizontal ? slideAngle : 0) + \"deg) translate3d(\" + tx + \"px, \" + ty + \"px, \" + tz + \"px)\";\n if (progress <= 1 && progress > -1) {\n wrapperRotate = (slideIndex * 90) + (progress * 90);\n if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); }\n }\n $slideEl.transform(transform);\n if (params.slideShadows) {\n // Set shadows\n var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\"));\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\"));\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n '-moz-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n '-ms-transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n 'transform-origin': (\"50% 50% -\" + (swiperSize / 2) + \"px\"),\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform((\"translate3d(0px, \" + ((swiperWidth / 2) + params.shadowOffset) + \"px, \" + (-swiperWidth / 2) + \"px) rotateX(90deg) rotateZ(0deg) scale(\" + (params.shadowScale) + \")\"));\n } else {\n var shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n var multiplier = 1.5 - (\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n );\n var scale1 = params.shadowScale;\n var scale2 = params.shadowScale / multiplier;\n var offset = params.shadowOffset;\n $cubeShadowEl.transform((\"scale3d(\" + scale1 + \", 1, \" + scale2 + \") translate3d(0px, \" + ((swiperHeight / 2) + offset) + \"px, \" + (-swiperHeight / 2 / scale2) + \"px) rotateX(-90deg)\"));\n }\n }\n var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n $wrapperEl\n .transform((\"translate3d(0px,0,\" + zFactor + \"px) rotateX(\" + (swiper.isHorizontal() ? 0 : wrapperRotate) + \"deg) rotateY(\" + (swiper.isHorizontal() ? -wrapperRotate : 0) + \"deg)\"));\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var $el = swiper.$el;\n var slides = swiper.slides;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n },\n };\n\n var EffectCube = {\n name: 'effect-cube',\n params: {\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n cubeEffect: {\n setTranslate: Cube.setTranslate.bind(swiper),\n setTransition: Cube.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"cube\"));\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'cube') { return; }\n swiper.cubeEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'cube') { return; }\n swiper.cubeEffect.setTransition(duration);\n },\n },\n };\n\n var Flip = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var slides = swiper.slides;\n var rtl = swiper.rtlTranslate;\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = slides.eq(i);\n var progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n var offset = $slideEl[0].swiperSlideOffset;\n var rotate = -180 * progress;\n var rotateY = rotate;\n var rotateX = 0;\n var tx = -offset;\n var ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (swiper.params.flipEffect.slideShadows) {\n // Set shadows\n var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $((\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'left' : 'top') + \"\\\"></div>\"));\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $((\"<div class=\\\"swiper-slide-shadow-\" + (swiper.isHorizontal() ? 'right' : 'bottom') + \"\\\"></div>\"));\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }\n if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }\n }\n $slideEl\n .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\"));\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var slides = swiper.slides;\n var activeIndex = swiper.activeIndex;\n var $wrapperEl = swiper.$wrapperEl;\n slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n // eslint-disable-next-line\n slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n if (eventTriggered) { return; }\n if (!swiper || swiper.destroyed) { return; }\n // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n eventTriggered = true;\n swiper.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (var i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n };\n\n var EffectFlip = {\n name: 'effect-flip',\n params: {\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n flipEffect: {\n setTranslate: Flip.setTranslate.bind(swiper),\n setTransition: Flip.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"flip\"));\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'flip') { return; }\n swiper.flipEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'flip') { return; }\n swiper.flipEffect.setTransition(duration);\n },\n },\n };\n\n var Coverflow = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var swiperWidth = swiper.width;\n var swiperHeight = swiper.height;\n var slides = swiper.slides;\n var $wrapperEl = swiper.$wrapperEl;\n var slidesSizesGrid = swiper.slidesSizesGrid;\n var params = swiper.params.coverflowEffect;\n var isHorizontal = swiper.isHorizontal();\n var transform = swiper.translate;\n var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n var rotate = isHorizontal ? params.rotate : -params.rotate;\n var translate = params.depth;\n // Each slide offset from center\n for (var i = 0, length = slides.length; i < length; i += 1) {\n var $slideEl = slides.eq(i);\n var slideSize = slidesSizesGrid[i];\n var slideOffset = $slideEl[0].swiperSlideOffset;\n var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n var translateZ = -translate * Math.abs(offsetMultiplier);\n\n var translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier);\n var translateX = isHorizontal ? params.stretch * (offsetMultiplier) : 0;\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) { translateX = 0; }\n if (Math.abs(translateY) < 0.001) { translateY = 0; }\n if (Math.abs(translateZ) < 0.001) { translateZ = 0; }\n if (Math.abs(rotateY) < 0.001) { rotateY = 0; }\n if (Math.abs(rotateX) < 0.001) { rotateX = 0; }\n\n var slideTransform = \"translate3d(\" + translateX + \"px,\" + translateY + \"px,\" + translateZ + \"px) rotateX(\" + rotateX + \"deg) rotateY(\" + rotateY + \"deg)\";\n\n $slideEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'left' : 'top') + \"\\\"></div>\"));\n $slideEl.append($shadowBeforeEl);\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = $((\"<div class=\\\"swiper-slide-shadow-\" + (isHorizontal ? 'right' : 'bottom') + \"\\\"></div>\"));\n $slideEl.append($shadowAfterEl);\n }\n if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; }\n if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; }\n }\n }\n\n // Set correct perspective for IE10\n if (Support.pointerEvents || Support.prefixedPointerEvents) {\n var ws = $wrapperEl[0].style;\n ws.perspectiveOrigin = center + \"px 50%\";\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n swiper.slides\n .transition(duration)\n .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n .transition(duration);\n },\n };\n\n var EffectCoverflow = {\n name: 'effect-coverflow',\n params: {\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n modifier: 1,\n slideShadows: true,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n coverflowEffect: {\n setTranslate: Coverflow.setTranslate.bind(swiper),\n setTransition: Coverflow.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') { return; }\n\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"coverflow\"));\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"3d\"));\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') { return; }\n swiper.coverflowEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'coverflow') { return; }\n swiper.coverflowEffect.setTransition(duration);\n },\n },\n };\n\n var Thumbs = {\n init: function init() {\n var swiper = this;\n var ref = swiper.params;\n var thumbsParams = ref.thumbs;\n var SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Utils.extend(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n Utils.extend(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n } else if (Utils.isObject(thumbsParams.swiper)) {\n swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n }));\n swiper.thumbs.swiperCreated = true;\n }\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n },\n onThumbClick: function onThumbClick() {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n var clickedIndex = thumbsSwiper.clickedIndex;\n var clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) { return; }\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) { return; }\n var slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n var currentIndex = swiper.activeIndex;\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n var prevIndex = swiper.slides.eq(currentIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n var nextIndex = swiper.slides.eq(currentIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + slideToIndex + \"\\\"]\")).eq(0).index();\n if (typeof prevIndex === 'undefined') { slideToIndex = nextIndex; }\n else if (typeof nextIndex === 'undefined') { slideToIndex = prevIndex; }\n else if (nextIndex - currentIndex < currentIndex - prevIndex) { slideToIndex = nextIndex; }\n else { slideToIndex = prevIndex; }\n }\n swiper.slideTo(slideToIndex);\n },\n update: function update(initial) {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n\n var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n ? thumbsSwiper.slidesPerViewDynamic()\n : thumbsSwiper.params.slidesPerView;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex) {\n var currentThumbsIndex = thumbsSwiper.activeIndex;\n var newThumbsIndex;\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix();\n // eslint-disable-next-line\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n }\n // Find actual thumbs index to slide to\n var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex) + \"\\\"]\")).eq(0).index();\n if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; }\n else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; }\n else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = currentThumbsIndex; }\n else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; }\n else { newThumbsIndex = prevThumbsIndex; }\n } else {\n newThumbsIndex = swiper.realIndex;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n\n // Activate thumbs\n var thumbsToActivate = 1;\n var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual) {\n for (var i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children((\"[data-swiper-slide-index=\\\"\" + (swiper.realIndex + i) + \"\\\"]\")).addClass(thumbActiveClass);\n }\n } else {\n for (var i$1 = 0; i$1 < thumbsToActivate; i$1 += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass);\n }\n }\n },\n };\n var Thumbs$1 = {\n name: 'thumbs',\n params: {\n thumbs: {\n swiper: null,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-container-thumbs',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n thumbs: {\n swiper: null,\n init: Thumbs.init.bind(swiper),\n update: Thumbs.update.bind(swiper),\n onThumbClick: Thumbs.onThumbClick.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n var ref = swiper.params;\n var thumbs = ref.thumbs;\n if (!thumbs || !thumbs.swiper) { return; }\n swiper.thumbs.init();\n swiper.thumbs.update(true);\n },\n slideChange: function slideChange() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n update: function update() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n if (!swiper.thumbs.swiper) { return; }\n swiper.thumbs.update();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n thumbsSwiper.setTransition(duration);\n },\n beforeDestroy: function beforeDestroy() {\n var swiper = this;\n var thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper) { return; }\n if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n thumbsSwiper.destroy();\n }\n },\n },\n };\n\n // Swiper Class\n\n var components = [\n Device$1,\n Support$1,\n Browser$1,\n Resize,\n Observer$1,\n Virtual$1,\n Keyboard$1,\n Mousewheel$1,\n Navigation$1,\n Pagination$1,\n Scrollbar$1,\n Parallax$1,\n Zoom$1,\n Lazy$1,\n Controller$1,\n A11y,\n History$1,\n HashNavigation$1,\n Autoplay$1,\n EffectFade,\n EffectCube,\n EffectFlip,\n EffectCoverflow,\n Thumbs$1\n ];\n\n if (typeof Swiper.use === 'undefined') {\n Swiper.use = Swiper.Class.use;\n Swiper.installModule = Swiper.Class.installModule;\n }\n\n Swiper.use(components);\n\n return Swiper;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3N3aXBlckA0LjUuMUBzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanM/YzAwNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN3aXBlciA0LjUuMVxuICogTW9zdCBtb2Rlcm4gbW9iaWxlIHRvdWNoIHNsaWRlciBhbmQgZnJhbWV3b3JrIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbnNcbiAqIGh0dHA6Ly93d3cuaWRhbmdlcm8udXMvc3dpcGVyL1xuICpcbiAqIENvcHlyaWdodCAyMDE0LTIwMTkgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqXG4gKiBSZWxlYXNlZCBvbjogU2VwdGVtYmVyIDEzLCAyMDE5XG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Td2lwZXIgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCBmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogU1NSIFdpbmRvdyAxLjAuMVxuICAgKiBCZXR0ZXIgaGFuZGxpbmcgZm9yIHdpbmRvdyBvYmplY3QgaW4gU1NSIGVudmlyb25tZW50XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2xpbWl0czR3ZWIvc3NyLXdpbmRvd1xuICAgKlxuICAgKiBDb3B5cmlnaHQgMjAxOCwgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAgICpcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUXG4gICAqXG4gICAqIFJlbGVhc2VkIG9uOiBKdWx5IDE4LCAyMDE4XG4gICAqL1xuICB2YXIgZG9jID0gKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpID8ge1xuICAgIGJvZHk6IHt9LFxuICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXG4gICAgYWN0aXZlRWxlbWVudDoge1xuICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHt9LFxuICAgICAgbm9kZU5hbWU6ICcnLFxuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24gcXVlcnlTZWxlY3RvcigpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbCgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgY3JlYXRlRXZlbnQ6IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5pdEV2ZW50OiBmdW5jdGlvbiBpbml0RXZlbnQoKSB7fSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZSgpIHt9LFxuICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZTogZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIGxvY2F0aW9uOiB7IGhhc2g6ICcnIH0sXG4gIH0gOiBkb2N1bWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIHZhciB3aW4gPSAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpID8ge1xuICAgIGRvY3VtZW50OiBkb2MsXG4gICAgbmF2aWdhdG9yOiB7XG4gICAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIH0sXG4gICAgbG9jYXRpb246IHt9LFxuICAgIGhpc3Rvcnk6IHt9LFxuICAgIEN1c3RvbUV2ZW50OiBmdW5jdGlvbiBDdXN0b21FdmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgICBnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZSgpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgSW1hZ2U6IGZ1bmN0aW9uIEltYWdlKCkge30sXG4gICAgRGF0ZTogZnVuY3Rpb24gRGF0ZSgpIHt9LFxuICAgIHNjcmVlbjoge30sXG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gc2V0VGltZW91dCgpIHt9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gY2xlYXJUaW1lb3V0KCkge30sXG4gIH0gOiB3aW5kb3c7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAvKipcbiAgICogRG9tNyAyLjEuM1xuICAgKiBNaW5pbWFsaXN0aWMgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBET00gbWFuaXB1bGF0aW9uLCB3aXRoIGEgalF1ZXJ5LWNvbXBhdGlibGUgQVBJXG4gICAqIGh0dHA6Ly9mcmFtZXdvcms3LmlvL2RvY3MvZG9tLmh0bWxcbiAgICpcbiAgICogQ29weXJpZ2h0IDIwMTksIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gICAqIFRoZSBpRGFuZ2Vyby51c1xuICAgKiBodHRwOi8vd3d3LmlkYW5nZXJvLnVzL1xuICAgKlxuICAgKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAgICpcbiAgICogUmVsZWFzZWQgb246IEZlYnJ1YXJ5IDExLCAyMDE5XG4gICAqL1xuXG4gIHZhciBEb203ID0gZnVuY3Rpb24gRG9tNyhhcnIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gQ3JlYXRlIGFycmF5LWxpa2Ugb2JqZWN0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNlbGZbaV0gPSBhcnJbaV07XG4gICAgfVxuICAgIHNlbGYubGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgICAvLyBSZXR1cm4gY29sbGVjdGlvbiB3aXRoIG1ldGhvZHNcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBmdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBpZiAoc2VsZWN0b3IgJiYgIWNvbnRleHQpIHtcbiAgICAgIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgLy8gU3RyaW5nXG4gICAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZWxzO1xuICAgICAgICB2YXIgdGVtcFBhcmVudDtcbiAgICAgICAgdmFyIGh0bWwgPSBzZWxlY3Rvci50cmltKCk7XG4gICAgICAgIGlmIChodG1sLmluZGV4T2YoJzwnKSA+PSAwICYmIGh0bWwuaW5kZXhPZignPicpID49IDApIHtcbiAgICAgICAgICB2YXIgdG9DcmVhdGUgPSAnZGl2JztcbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8bGknKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICd1bCc7IH1cbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dHInKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICd0Ym9keSc7IH1cbiAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dGQnKSA9PT0gMCB8fCBodG1sLmluZGV4T2YoJzx0aCcpID09PSAwKSB7IHRvQ3JlYXRlID0gJ3RyJzsgfVxuICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0Ym9keScpID09PSAwKSB7IHRvQ3JlYXRlID0gJ3RhYmxlJzsgfVxuICAgICAgICAgIGlmIChodG1sLmluZGV4T2YoJzxvcHRpb24nKSA9PT0gMCkgeyB0b0NyZWF0ZSA9ICdzZWxlY3QnOyB9XG4gICAgICAgICAgdGVtcFBhcmVudCA9IGRvYy5jcmVhdGVFbGVtZW50KHRvQ3JlYXRlKTtcbiAgICAgICAgICB0ZW1wUGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlbXBQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYXJyLnB1c2godGVtcFBhcmVudC5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFjb250ZXh0ICYmIHNlbGVjdG9yWzBdID09PSAnIycgJiYgIXNlbGVjdG9yLm1hdGNoKC9bIC48Pjp+XS8pKSB7XG4gICAgICAgICAgICAvLyBQdXJlIElEIHNlbGVjdG9yXG4gICAgICAgICAgICBlbHMgPSBbZG9jLmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yLnRyaW0oKS5zcGxpdCgnIycpWzFdKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyIHNlbGVjdG9yc1xuICAgICAgICAgICAgZWxzID0gKGNvbnRleHQgfHwgZG9jKS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yLnRyaW0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChlbHNbaV0pIHsgYXJyLnB1c2goZWxzW2ldKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5ub2RlVHlwZSB8fCBzZWxlY3RvciA9PT0gd2luIHx8IHNlbGVjdG9yID09PSBkb2MpIHtcbiAgICAgICAgLy8gTm9kZS9lbGVtZW50XG4gICAgICAgIGFyci5wdXNoKHNlbGVjdG9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IubGVuZ3RoID4gMCAmJiBzZWxlY3RvclswXS5ub2RlVHlwZSkge1xuICAgICAgICAvLyBBcnJheSBvZiBlbGVtZW50cyBvciBpbnN0YW5jZSBvZiBEb21cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdG9yLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgYXJyLnB1c2goc2VsZWN0b3JbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhhcnIpO1xuICB9XG5cbiAgJC5mbiA9IERvbTcucHJvdG90eXBlO1xuICAkLkNsYXNzID0gRG9tNztcbiAgJC5Eb203ID0gRG9tNztcblxuICBmdW5jdGlvbiB1bmlxdWUoYXJyKSB7XG4gICAgdmFyIHVuaXF1ZUFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh1bmlxdWVBcnJheS5pbmRleE9mKGFycltpXSkgPT09IC0xKSB7IHVuaXF1ZUFycmF5LnB1c2goYXJyW2ldKTsgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcXVlQXJyYXk7XG4gIH1cblxuICAvLyBDbGFzc2VzIGFuZCBhdHRyaWJ1dGVzXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGNsYXNzTmFtZSkge1xuICAgIGlmICh0eXBlb2YgY2xhc3NOYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2pdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpc1tqXS5jbGFzc0xpc3QgIT09ICd1bmRlZmluZWQnKSB7IHRoaXNbal0uY2xhc3NMaXN0LmFkZChjbGFzc2VzW2ldKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVDbGFzcyhjbGFzc05hbWUpIHtcbiAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tqXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXNbal0uY2xhc3NMaXN0ICE9PSAndW5kZWZpbmVkJykgeyB0aGlzW2pdLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3Nlc1tpXSk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gaGFzQ2xhc3MoY2xhc3NOYW1lKSB7XG4gICAgaWYgKCF0aGlzWzBdKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiB0aGlzWzBdLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICB9XG4gIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGNsYXNzTmFtZSkge1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2pdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpc1tqXS5jbGFzc0xpc3QgIT09ICd1bmRlZmluZWQnKSB7IHRoaXNbal0uY2xhc3NMaXN0LnRvZ2dsZShjbGFzc2VzW2ldKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBhdHRyKGF0dHJzLCB2YWx1ZSkge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhdHRycyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEdldCBhdHRyXG4gICAgICBpZiAodGhpc1swXSkgeyByZXR1cm4gdGhpc1swXS5nZXRBdHRyaWJ1dGUoYXR0cnMpOyB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFNldCBhdHRyc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGFyZ3VtZW50cyQxLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgZm9yICh2YXIgYXR0ck5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgICB0aGlzW2ldW2F0dHJOYW1lXSA9IGF0dHJzW2F0dHJOYW1lXTtcbiAgICAgICAgICB0aGlzW2ldLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0cnNbYXR0ck5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgZnVuY3Rpb24gcmVtb3ZlQXR0cihhdHRyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gZGF0YShrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVsO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlbCA9IHRoaXNbMF07XG4gICAgICAvLyBHZXQgdmFsdWVcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBpZiAoZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSAmJiAoa2V5IGluIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UpKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhS2V5ID0gZWwuZ2V0QXR0cmlidXRlKChcImRhdGEtXCIgKyBrZXkpKTtcbiAgICAgICAgaWYgKGRhdGFLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YUtleTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTZXQgdmFsdWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGVsID0gdGhpc1tpXTtcbiAgICAgIGlmICghZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSkgeyBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlID0ge307IH1cbiAgICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyBUcmFuc2Zvcm1zXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWxTdHlsZSA9IHRoaXNbaV0uc3R5bGU7XG4gICAgICBlbFN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIGVsU3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiB0cmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gKyBcIm1zXCI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWxTdHlsZSA9IHRoaXNbaV0uc3R5bGU7XG4gICAgICBlbFN0eWxlLndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgZWxTdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gRXZlbnRzXG4gIGZ1bmN0aW9uIG9uKCkge1xuICAgIHZhciBhc3NpZ247XG5cbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgdmFyIGV2ZW50VHlwZSA9IGFyZ3NbMF07XG4gICAgdmFyIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXTtcbiAgICB2YXIgbGlzdGVuZXIgPSBhcmdzWzJdO1xuICAgIHZhciBjYXB0dXJlID0gYXJnc1szXTtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChhc3NpZ24gPSBhcmdzLCBldmVudFR5cGUgPSBhc3NpZ25bMF0sIGxpc3RlbmVyID0gYXNzaWduWzFdLCBjYXB0dXJlID0gYXNzaWduWzJdKTtcbiAgICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIWNhcHR1cmUpIHsgY2FwdHVyZSA9IGZhbHNlOyB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVMaXZlRXZlbnQoZSkge1xuICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgZXZlbnREYXRhID0gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXTtcbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG4gICAgICBpZiAoJCh0YXJnZXQpLmlzKHRhcmdldFNlbGVjdG9yKSkgeyBsaXN0ZW5lci5hcHBseSh0YXJnZXQsIGV2ZW50RGF0YSk7IH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgcGFyZW50cyA9ICQodGFyZ2V0KS5wYXJlbnRzKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBwYXJlbnRzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICAgICAgaWYgKCQocGFyZW50c1trXSkuaXModGFyZ2V0U2VsZWN0b3IpKSB7IGxpc3RlbmVyLmFwcGx5KHBhcmVudHNba10sIGV2ZW50RGF0YSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVFdmVudChlKSB7XG4gICAgICB2YXIgZXZlbnREYXRhID0gZSAmJiBlLnRhcmdldCA/IGUudGFyZ2V0LmRvbTdFdmVudERhdGEgfHwgW10gOiBbXTtcbiAgICAgIGlmIChldmVudERhdGEuaW5kZXhPZihlKSA8IDApIHtcbiAgICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cbiAgICB2YXIgZXZlbnRzID0gZXZlbnRUeXBlLnNwbGl0KCcgJyk7XG4gICAgdmFyIGo7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzW2ldO1xuICAgICAgaWYgKCF0YXJnZXRTZWxlY3Rvcikge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVycykgeyBlbC5kb203TGlzdGVuZXJzID0ge307IH1cbiAgICAgICAgICBpZiAoIWVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdKSB7IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdID0gW107IH1cbiAgICAgICAgICBlbC5kb203TGlzdGVuZXJzW2V2ZW50XS5wdXNoKHtcbiAgICAgICAgICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICAgICAgICAgIHByb3h5TGlzdGVuZXI6IGhhbmRsZUV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGl2ZSBldmVudHNcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHZhciBldmVudCQxID0gZXZlbnRzW2pdO1xuICAgICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIHsgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTsgfVxuICAgICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnQkMV0pIHsgZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnQkMV0gPSBbXTsgfVxuICAgICAgICAgIGVsLmRvbTdMaXZlTGlzdGVuZXJzW2V2ZW50JDFdLnB1c2goe1xuICAgICAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlTGl2ZUV2ZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQkMSwgaGFuZGxlTGl2ZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBvZmYoKSB7XG4gICAgdmFyIGFzc2lnbjtcblxuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICB2YXIgZXZlbnRUeXBlID0gYXJnc1swXTtcbiAgICB2YXIgdGFyZ2V0U2VsZWN0b3IgPSBhcmdzWzFdO1xuICAgIHZhciBsaXN0ZW5lciA9IGFyZ3NbMl07XG4gICAgdmFyIGNhcHR1cmUgPSBhcmdzWzNdO1xuICAgIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKGFzc2lnbiA9IGFyZ3MsIGV2ZW50VHlwZSA9IGFzc2lnblswXSwgbGlzdGVuZXIgPSBhc3NpZ25bMV0sIGNhcHR1cmUgPSBhc3NpZ25bMl0pO1xuICAgICAgdGFyZ2V0U2VsZWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghY2FwdHVyZSkgeyBjYXB0dXJlID0gZmFsc2U7IH1cblxuICAgIHZhciBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXNbal07XG4gICAgICAgIHZhciBoYW5kbGVycyA9ICh2b2lkIDApO1xuICAgICAgICBpZiAoIXRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBoYW5kbGVycyA9IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcnMgPSBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhbmRsZXJzICYmIGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAodmFyIGsgPSBoYW5kbGVycy5sZW5ndGggLSAxOyBrID49IDA7IGsgLT0gMSkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVyc1trXTtcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLnByb3h5TGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgJiYgaGFuZGxlci5saXN0ZW5lci5kb203cHJveHkgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gdHJpZ2dlcigpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgZXZlbnRzID0gYXJnc1swXS5zcGxpdCgnICcpO1xuICAgIHZhciBldmVudERhdGEgPSBhcmdzWzFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV07XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIGVsID0gdGhpc1tqXTtcbiAgICAgICAgdmFyIGV2dCA9ICh2b2lkIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV2dCA9IG5ldyB3aW4uQ3VzdG9tRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICAgIGRldGFpbDogZXZlbnREYXRhLFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBldnQgPSBkb2MuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgICAgZXZ0LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgZXZ0LmRldGFpbCA9IGV2ZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgZWwuZG9tN0V2ZW50RGF0YSA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChkYXRhLCBkYXRhSW5kZXgpIHsgcmV0dXJuIGRhdGFJbmRleCA+IDA7IH0pO1xuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgIGVsLmRvbTdFdmVudERhdGEgPSBbXTtcbiAgICAgICAgZGVsZXRlIGVsLmRvbTdFdmVudERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoY2FsbGJhY2spIHtcbiAgICB2YXIgZXZlbnRzID0gWyd3ZWJraXRUcmFuc2l0aW9uRW5kJywgJ3RyYW5zaXRpb25lbmQnXTtcbiAgICB2YXIgZG9tID0gdGhpcztcbiAgICB2YXIgaTtcbiAgICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgICAgLyoganNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHsgcmV0dXJuOyB9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGUpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBkb20ub2ZmKGV2ZW50c1tpXSwgZmlyZUNhbGxCYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGRvbS5vbihldmVudHNbaV0sIGZpcmVDYWxsQmFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHZhciBzdHlsZXMgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG91dGVySGVpZ2h0KGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YXIgc3R5bGVzID0gdGhpcy5zdHlsZXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIG9mZnNldCgpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgICAgdmFyIGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keTtcbiAgICAgIHZhciBjbGllbnRUb3AgPSBlbC5jbGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMDtcbiAgICAgIHZhciBjbGllbnRMZWZ0ID0gZWwuY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMDtcbiAgICAgIHZhciBzY3JvbGxUb3AgPSBlbCA9PT0gd2luID8gd2luLnNjcm9sbFkgOiBlbC5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IGVsID09PSB3aW4gPyB3aW4uc2Nyb2xsWCA6IGVsLnNjcm9sbExlZnQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IChib3gudG9wICsgc2Nyb2xsVG9wKSAtIGNsaWVudFRvcCxcbiAgICAgICAgbGVmdDogKGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCkgLSBjbGllbnRMZWZ0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZXMoKSB7XG4gICAgaWYgKHRoaXNbMF0pIHsgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpOyB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGZ1bmN0aW9uIGNzcyhwcm9wcywgdmFsdWUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRoaXNbMF0pIHsgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcHMpOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcHNdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBjb2xsZWN0aW9uIHBhc3NpbmcgZWxlbWVudHMgdG8gYGNhbGxiYWNrYFxuICBmdW5jdGlvbiBlYWNoKGNhbGxiYWNrKSB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbnRpbnVpbmcgd2l0aG91dCBhIGNhbGxiYWNrXG4gICAgaWYgKCFjYWxsYmFjaykgeyByZXR1cm4gdGhpczsgfVxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY3VycmVudCBjb2xsZWN0aW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAvLyBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc1tpXSwgaSwgdGhpc1tpXSkgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIEVuZCB0aGUgbG9vcCBlYXJseVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUmV0dXJuIGB0aGlzYCB0byBhbGxvdyBjaGFpbmVkIERPTSBvcGVyYXRpb25zXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGZ1bmN0aW9uIGh0bWwoaHRtbCkge1xuICAgIGlmICh0eXBlb2YgaHRtbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzWzBdID8gdGhpc1swXS5pbm5lckhUTUwgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLmlubmVySFRNTCA9IGh0bWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmdW5jdGlvbiB0ZXh0KHRleHQpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpc1swXSkge1xuICAgICAgICByZXR1cm4gdGhpc1swXS50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0udGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmdW5jdGlvbiBpcyhzZWxlY3Rvcikge1xuICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgdmFyIGNvbXBhcmVXaXRoO1xuICAgIHZhciBpO1xuICAgIGlmICghZWwgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGVsLm1hdGNoZXMpIHsgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpOyB9XG4gICAgICBlbHNlIGlmIChlbC53ZWJraXRNYXRjaGVzU2VsZWN0b3IpIHsgcmV0dXJuIGVsLndlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7IH1cbiAgICAgIGVsc2UgaWYgKGVsLm1zTWF0Y2hlc1NlbGVjdG9yKSB7IHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7IH1cblxuICAgICAgY29tcGFyZVdpdGggPSAkKHNlbGVjdG9yKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29tcGFyZVdpdGhbaV0gPT09IGVsKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gZG9jKSB7IHJldHVybiBlbCA9PT0gZG9jOyB9XG4gICAgZWxzZSBpZiAoc2VsZWN0b3IgPT09IHdpbikgeyByZXR1cm4gZWwgPT09IHdpbjsgfVxuXG4gICAgaWYgKHNlbGVjdG9yLm5vZGVUeXBlIHx8IHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgY29tcGFyZVdpdGggPSBzZWxlY3Rvci5ub2RlVHlwZSA/IFtzZWxlY3Rvcl0gOiBzZWxlY3RvcjtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29tcGFyZVdpdGhbaV0gPT09IGVsKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiBpbmRleCgpIHtcbiAgICB2YXIgY2hpbGQgPSB0aGlzWzBdO1xuICAgIHZhciBpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgaSA9IDA7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgeyBpICs9IDE7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmdW5jdGlvbiBlcShpbmRleCkge1xuICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB0aGlzOyB9XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciByZXR1cm5JbmRleDtcbiAgICBpZiAoaW5kZXggPiBsZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm5JbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgICAgaWYgKHJldHVybkluZGV4IDwgMCkgeyByZXR1cm4gbmV3IERvbTcoW10pOyB9XG4gICAgICByZXR1cm4gbmV3IERvbTcoW3RoaXNbcmV0dXJuSW5kZXhdXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhbdGhpc1tpbmRleF1dKTtcbiAgfVxuICBmdW5jdGlvbiBhcHBlbmQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgdmFyIG5ld0NoaWxkO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBhcmdzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgICBuZXdDaGlsZCA9IGFyZ3Nba107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YXIgdGVtcERpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IG5ld0NoaWxkO1xuICAgICAgICAgIHdoaWxlICh0ZW1wRGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBEb203KSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZChuZXdDaGlsZFtqXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gcHJlcGVuZChuZXdDaGlsZCkge1xuICAgIHZhciBpO1xuICAgIHZhciBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgdGVtcERpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcbiAgICAgICAgZm9yIChqID0gdGVtcERpdi5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGogPj0gMDsgaiAtPSAxKSB7XG4gICAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUodGVtcERpdi5jaGlsZE5vZGVzW2pdLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmV3Q2hpbGQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgICB0aGlzW2ldLmluc2VydEJlZm9yZShuZXdDaGlsZFtqXSwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tpXS5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIHRoaXNbaV0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoc2VsZWN0b3IpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKHRoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nICYmICQodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgRG9tNyhbdGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmddKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpIHsgcmV0dXJuIG5ldyBEb203KFt0aGlzWzBdLm5leHRFbGVtZW50U2libGluZ10pOyB9XG4gICAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERvbTcoW10pO1xuICB9XG4gIGZ1bmN0aW9uIG5leHRBbGwoc2VsZWN0b3IpIHtcbiAgICB2YXIgbmV4dEVscyA9IFtdO1xuICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgaWYgKCFlbCkgeyByZXR1cm4gbmV3IERvbTcoW10pOyB9XG4gICAgd2hpbGUgKGVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgdmFyIG5leHQgPSBlbC5uZXh0RWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJChuZXh0KS5pcyhzZWxlY3RvcikpIHsgbmV4dEVscy5wdXNoKG5leHQpOyB9XG4gICAgICB9IGVsc2UgeyBuZXh0RWxzLnB1c2gobmV4dCk7IH1cbiAgICAgIGVsID0gbmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEb203KG5leHRFbHMpO1xuICB9XG4gIGZ1bmN0aW9uIHByZXYoc2VsZWN0b3IpIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICQoZWwucHJldmlvdXNFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBEb203KFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHsgcmV0dXJuIG5ldyBEb203KFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7IH1cbiAgICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhbXSk7XG4gIH1cbiAgZnVuY3Rpb24gcHJldkFsbChzZWxlY3Rvcikge1xuICAgIHZhciBwcmV2RWxzID0gW107XG4gICAgdmFyIGVsID0gdGhpc1swXTtcbiAgICBpZiAoIWVsKSB7IHJldHVybiBuZXcgRG9tNyhbXSk7IH1cbiAgICB3aGlsZSAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgICAgdmFyIHByZXYgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCQocHJldikuaXMoc2VsZWN0b3IpKSB7IHByZXZFbHMucHVzaChwcmV2KTsgfVxuICAgICAgfSBlbHNlIHsgcHJldkVscy5wdXNoKHByZXYpOyB9XG4gICAgICBlbCA9IHByZXY7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRG9tNyhwcmV2RWxzKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJlbnQoc2VsZWN0b3IpIHtcbiAgICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodGhpc1tpXS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgIGlmICgkKHRoaXNbaV0ucGFyZW50Tm9kZSkuaXMoc2VsZWN0b3IpKSB7IHBhcmVudHMucHVzaCh0aGlzW2ldLnBhcmVudE5vZGUpOyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50cy5wdXNoKHRoaXNbaV0ucGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICQodW5pcXVlKHBhcmVudHMpKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJlbnRzKHNlbGVjdG9yKSB7XG4gICAgdmFyIHBhcmVudHMgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXNbaV0ucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICBpZiAoJChwYXJlbnQpLmlzKHNlbGVjdG9yKSkgeyBwYXJlbnRzLnB1c2gocGFyZW50KTsgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJCh1bmlxdWUocGFyZW50cykpO1xuICB9XG4gIGZ1bmN0aW9uIGNsb3Nlc3Qoc2VsZWN0b3IpIHtcbiAgICB2YXIgY2xvc2VzdCA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBEb203KFtdKTtcbiAgICB9XG4gICAgaWYgKCFjbG9zZXN0LmlzKHNlbGVjdG9yKSkge1xuICAgICAgY2xvc2VzdCA9IGNsb3Nlc3QucGFyZW50cyhzZWxlY3RvcikuZXEoMCk7XG4gICAgfVxuICAgIHJldHVybiBjbG9zZXN0O1xuICB9XG4gIGZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgICB2YXIgZm91bmRFbGVtZW50cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGZvdW5kID0gdGhpc1tpXS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm91bmQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgZm91bmRFbGVtZW50cy5wdXNoKGZvdW5kW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEb203KGZvdW5kRWxlbWVudHMpO1xuICB9XG4gIGZ1bmN0aW9uIGNoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpc1tpXS5jaGlsZE5vZGVzO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkTm9kZXMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICAgIGlmIChjaGlsZE5vZGVzW2pdLm5vZGVUeXBlID09PSAxKSB7IGNoaWxkcmVuLnB1c2goY2hpbGROb2Rlc1tqXSk7IH1cbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZE5vZGVzW2pdLm5vZGVUeXBlID09PSAxICYmICQoY2hpbGROb2Rlc1tqXSkuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZE5vZGVzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERvbTcodW5pcXVlKGNoaWxkcmVuKSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHRoaXNbaV0ucGFyZW50Tm9kZSkgeyB0aGlzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpc1tpXSk7IH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnVuY3Rpb24gYWRkKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciBkb20gPSB0aGlzO1xuICAgIHZhciBpO1xuICAgIHZhciBqO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgdG9BZGQgPSAkKGFyZ3NbaV0pO1xuICAgICAgZm9yIChqID0gMDsgaiA8IHRvQWRkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGRvbVtkb20ubGVuZ3RoXSA9IHRvQWRkW2pdO1xuICAgICAgICBkb20ubGVuZ3RoICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkb207XG4gIH1cblxuICB2YXIgTWV0aG9kcyA9IHtcbiAgICBhZGRDbGFzczogYWRkQ2xhc3MsXG4gICAgcmVtb3ZlQ2xhc3M6IHJlbW92ZUNsYXNzLFxuICAgIGhhc0NsYXNzOiBoYXNDbGFzcyxcbiAgICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsXG4gICAgYXR0cjogYXR0cixcbiAgICByZW1vdmVBdHRyOiByZW1vdmVBdHRyLFxuICAgIGRhdGE6IGRhdGEsXG4gICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbixcbiAgICBvbjogb24sXG4gICAgb2ZmOiBvZmYsXG4gICAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgICB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kLFxuICAgIG91dGVyV2lkdGg6IG91dGVyV2lkdGgsXG4gICAgb3V0ZXJIZWlnaHQ6IG91dGVySGVpZ2h0LFxuICAgIG9mZnNldDogb2Zmc2V0LFxuICAgIGNzczogY3NzLFxuICAgIGVhY2g6IGVhY2gsXG4gICAgaHRtbDogaHRtbCxcbiAgICB0ZXh0OiB0ZXh0LFxuICAgIGlzOiBpcyxcbiAgICBpbmRleDogaW5kZXgsXG4gICAgZXE6IGVxLFxuICAgIGFwcGVuZDogYXBwZW5kLFxuICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgbmV4dDogbmV4dCxcbiAgICBuZXh0QWxsOiBuZXh0QWxsLFxuICAgIHByZXY6IHByZXYsXG4gICAgcHJldkFsbDogcHJldkFsbCxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBwYXJlbnRzOiBwYXJlbnRzLFxuICAgIGNsb3Nlc3Q6IGNsb3Nlc3QsXG4gICAgZmluZDogZmluZCxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgcmVtb3ZlOiByZW1vdmUsXG4gICAgYWRkOiBhZGQsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gIH07XG5cbiAgT2JqZWN0LmtleXMoTWV0aG9kcykuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgICQuZm5bbWV0aG9kTmFtZV0gPSAkLmZuW21ldGhvZE5hbWVdIHx8IE1ldGhvZHNbbWV0aG9kTmFtZV07XG4gIH0pO1xuXG4gIHZhciBVdGlscyA9IHtcbiAgICBkZWxldGVQcm9wczogZnVuY3Rpb24gZGVsZXRlUHJvcHMob2JqKSB7XG4gICAgICB2YXIgb2JqZWN0ID0gb2JqO1xuICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvYmplY3Rba2V5XSA9IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBubyBnZXR0ZXIgZm9yIG9iamVjdFxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gc29tZXRoaW5nIGdvdCB3cm9uZ1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG5leHRUaWNrOiBmdW5jdGlvbiBuZXh0VGljayhjYWxsYmFjaywgZGVsYXkpIHtcbiAgICAgIGlmICggZGVsYXkgPT09IHZvaWQgMCApIGRlbGF5ID0gMDtcblxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbiAgICB9LFxuICAgIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KCk7XG4gICAgfSxcbiAgICBnZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIGdldFRyYW5zbGF0ZShlbCwgYXhpcykge1xuICAgICAgaWYgKCBheGlzID09PSB2b2lkIDAgKSBheGlzID0gJ3gnO1xuXG4gICAgICB2YXIgbWF0cml4O1xuICAgICAgdmFyIGN1clRyYW5zZm9ybTtcbiAgICAgIHZhciB0cmFuc2Zvcm1NYXRyaXg7XG5cbiAgICAgIHZhciBjdXJTdHlsZSA9IHdpbi5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKTtcblxuICAgICAgaWYgKHdpbi5XZWJLaXRDU1NNYXRyaXgpIHtcbiAgICAgICAgY3VyVHJhbnNmb3JtID0gY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLndlYmtpdFRyYW5zZm9ybTtcbiAgICAgICAgaWYgKGN1clRyYW5zZm9ybS5zcGxpdCgnLCcpLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgICBjdXJUcmFuc2Zvcm0gPSBjdXJUcmFuc2Zvcm0uc3BsaXQoJywgJykubWFwKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLnJlcGxhY2UoJywnLCAnLicpOyB9KS5qb2luKCcsICcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb2xkIHZlcnNpb25zIG9mIFdlYmtpdCBjaG9rZSB3aGVuICdub25lJyBpcyBwYXNzZWQ7IHBhc3NcbiAgICAgICAgLy8gZW1wdHkgc3RyaW5nIGluc3RlYWQgaW4gdGhpcyBjYXNlXG4gICAgICAgIHRyYW5zZm9ybU1hdHJpeCA9IG5ldyB3aW4uV2ViS2l0Q1NTTWF0cml4KGN1clRyYW5zZm9ybSA9PT0gJ25vbmUnID8gJycgOiBjdXJUcmFuc2Zvcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gY3VyU3R5bGUuTW96VHJhbnNmb3JtIHx8IGN1clN0eWxlLk9UcmFuc2Zvcm0gfHwgY3VyU3R5bGUuTXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUubXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpLnJlcGxhY2UoJ3RyYW5zbGF0ZSgnLCAnbWF0cml4KDEsIDAsIDAsIDEsJyk7XG4gICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybU1hdHJpeC50b1N0cmluZygpLnNwbGl0KCcsJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChheGlzID09PSAneCcpIHtcbiAgICAgICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICAgICAgaWYgKHdpbi5XZWJLaXRDU1NNYXRyaXgpIHsgY3VyVHJhbnNmb3JtID0gdHJhbnNmb3JtTWF0cml4Lm00MTsgfVxuICAgICAgICAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgICAgICBlbHNlIGlmIChtYXRyaXgubGVuZ3RoID09PSAxNikgeyBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pOyB9XG4gICAgICAgIC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgICAgICBlbHNlIHsgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNF0pOyB9XG4gICAgICB9XG4gICAgICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgICAgIGlmICh3aW4uV2ViS2l0Q1NTTWF0cml4KSB7IGN1clRyYW5zZm9ybSA9IHRyYW5zZm9ybU1hdHJpeC5tNDI7IH1cbiAgICAgICAgLy8gQ3JhenkgSUUxMCBNYXRyaXhcbiAgICAgICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIHsgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbMTNdKTsgfVxuICAgICAgICAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICAgICAgZWxzZSB7IGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzVdKTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGN1clRyYW5zZm9ybSB8fCAwO1xuICAgIH0sXG4gICAgcGFyc2VVcmxRdWVyeTogZnVuY3Rpb24gcGFyc2VVcmxRdWVyeSh1cmwpIHtcbiAgICAgIHZhciBxdWVyeSA9IHt9O1xuICAgICAgdmFyIHVybFRvUGFyc2UgPSB1cmwgfHwgd2luLmxvY2F0aW9uLmhyZWY7XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBwYXJhbXM7XG4gICAgICB2YXIgcGFyYW07XG4gICAgICB2YXIgbGVuZ3RoO1xuICAgICAgaWYgKHR5cGVvZiB1cmxUb1BhcnNlID09PSAnc3RyaW5nJyAmJiB1cmxUb1BhcnNlLmxlbmd0aCkge1xuICAgICAgICB1cmxUb1BhcnNlID0gdXJsVG9QYXJzZS5pbmRleE9mKCc/JykgPiAtMSA/IHVybFRvUGFyc2UucmVwbGFjZSgvXFxTKlxcPy8sICcnKSA6ICcnO1xuICAgICAgICBwYXJhbXMgPSB1cmxUb1BhcnNlLnNwbGl0KCcmJykuZmlsdGVyKGZ1bmN0aW9uIChwYXJhbXNQYXJ0KSB7IHJldHVybiBwYXJhbXNQYXJ0ICE9PSAnJzsgfSk7XG4gICAgICAgIGxlbmd0aCA9IHBhcmFtcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgcGFyYW0gPSBwYXJhbXNbaV0ucmVwbGFjZSgvI1xcUysvZywgJycpLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgcXVlcnlbZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtWzBdKV0gPSB0eXBlb2YgcGFyYW1bMV0gPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtWzFdKSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH0sXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiBvLmNvbnN0cnVjdG9yICYmIG8uY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICB9LFxuICAgIGV4dGVuZDogZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuJDEgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4kMS0tICkgYXJnc1sgbGVuJDEgXSA9IGFyZ3VtZW50c1sgbGVuJDEgXTtcblxuICAgICAgdmFyIHRvID0gT2JqZWN0KGFyZ3NbMF0pO1xuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBuZXh0U291cmNlID0gYXJnc1tpXTtcbiAgICAgICAgaWYgKG5leHRTb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBuZXh0U291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGtleXNBcnJheSA9IE9iamVjdC5rZXlzKE9iamVjdChuZXh0U291cmNlKSk7XG4gICAgICAgICAgZm9yICh2YXIgbmV4dEluZGV4ID0gMCwgbGVuID0ga2V5c0FycmF5Lmxlbmd0aDsgbmV4dEluZGV4IDwgbGVuOyBuZXh0SW5kZXggKz0gMSkge1xuICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuZXh0U291cmNlLCBuZXh0S2V5KTtcbiAgICAgICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgICAgIGlmIChVdGlscy5pc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgVXRpbHMuaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgICAgICBVdGlscy5leHRlbmQodG9bbmV4dEtleV0sIG5leHRTb3VyY2VbbmV4dEtleV0pO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgVXRpbHMuaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIFV0aWxzLmV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdG87XG4gICAgfSxcbiAgfTtcblxuICB2YXIgU3VwcG9ydCA9IChmdW5jdGlvbiBTdXBwb3J0KCkge1xuICAgIHZhciB0ZXN0RGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHJldHVybiB7XG4gICAgICB0b3VjaDogKHdpbi5Nb2Rlcm5penIgJiYgd2luLk1vZGVybml6ci50b3VjaCA9PT0gdHJ1ZSkgfHwgKGZ1bmN0aW9uIGNoZWNrVG91Y2goKSB7XG4gICAgICAgIHJldHVybiAhISgod2luLm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApIHx8ICgnb250b3VjaHN0YXJ0JyBpbiB3aW4pIHx8ICh3aW4uRG9jdW1lbnRUb3VjaCAmJiBkb2MgaW5zdGFuY2VvZiB3aW4uRG9jdW1lbnRUb3VjaCkpO1xuICAgICAgfSgpKSxcblxuICAgICAgcG9pbnRlckV2ZW50czogISEod2luLm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZCB8fCB3aW4uUG9pbnRlckV2ZW50IHx8ICgnbWF4VG91Y2hQb2ludHMnIGluIHdpbi5uYXZpZ2F0b3IgJiYgd2luLm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApKSxcbiAgICAgIHByZWZpeGVkUG9pbnRlckV2ZW50czogISF3aW4ubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQsXG5cbiAgICAgIHRyYW5zaXRpb246IChmdW5jdGlvbiBjaGVja1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IHRlc3REaXYuc3R5bGU7XG4gICAgICAgIHJldHVybiAoJ3RyYW5zaXRpb24nIGluIHN0eWxlIHx8ICd3ZWJraXRUcmFuc2l0aW9uJyBpbiBzdHlsZSB8fCAnTW96VHJhbnNpdGlvbicgaW4gc3R5bGUpO1xuICAgICAgfSgpKSxcbiAgICAgIHRyYW5zZm9ybXMzZDogKHdpbi5Nb2Rlcm5penIgJiYgd2luLk1vZGVybml6ci5jc3N0cmFuc2Zvcm1zM2QgPT09IHRydWUpIHx8IChmdW5jdGlvbiBjaGVja1RyYW5zZm9ybXMzZCgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdGVzdERpdi5zdHlsZTtcbiAgICAgICAgcmV0dXJuICgnd2Via2l0UGVyc3BlY3RpdmUnIGluIHN0eWxlIHx8ICdNb3pQZXJzcGVjdGl2ZScgaW4gc3R5bGUgfHwgJ09QZXJzcGVjdGl2ZScgaW4gc3R5bGUgfHwgJ01zUGVyc3BlY3RpdmUnIGluIHN0eWxlIHx8ICdwZXJzcGVjdGl2ZScgaW4gc3R5bGUpO1xuICAgICAgfSgpKSxcblxuICAgICAgZmxleGJveDogKGZ1bmN0aW9uIGNoZWNrRmxleGJveCgpIHtcbiAgICAgICAgdmFyIHN0eWxlID0gdGVzdERpdi5zdHlsZTtcbiAgICAgICAgdmFyIHN0eWxlcyA9ICgnYWxpZ25JdGVtcyB3ZWJraXRBbGlnbkl0ZW1zIHdlYmtpdEJveEFsaWduIG1zRmxleEFsaWduIG1vekJveEFsaWduIHdlYmtpdEZsZXhEaXJlY3Rpb24gbXNGbGV4RGlyZWN0aW9uIG1vekJveERpcmVjdGlvbiBtb3pCb3hPcmllbnQgd2Via2l0Qm94RGlyZWN0aW9uIHdlYmtpdEJveE9yaWVudCcpLnNwbGl0KCcgJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHN0eWxlc1tpXSBpbiBzdHlsZSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0oKSksXG5cbiAgICAgIG9ic2VydmVyOiAoZnVuY3Rpb24gY2hlY2tPYnNlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuICgnTXV0YXRpb25PYnNlcnZlcicgaW4gd2luIHx8ICdXZWJraXRNdXRhdGlvbk9ic2VydmVyJyBpbiB3aW4pO1xuICAgICAgfSgpKSxcblxuICAgICAgcGFzc2l2ZUxpc3RlbmVyOiAoZnVuY3Rpb24gY2hlY2tQYXNzaXZlTGlzdGVuZXIoKSB7XG4gICAgICAgIHZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVMaXN0ZW5lcicsIG51bGwsIG9wdHMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gTm8gc3VwcG9ydFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBwb3J0c1Bhc3NpdmU7XG4gICAgICB9KCkpLFxuXG4gICAgICBnZXN0dXJlczogKGZ1bmN0aW9uIGNoZWNrR2VzdHVyZXMoKSB7XG4gICAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbjtcbiAgICAgIH0oKSksXG4gICAgfTtcbiAgfSgpKTtcblxuICB2YXIgQnJvd3NlciA9IChmdW5jdGlvbiBCcm93c2VyKCkge1xuICAgIGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgICAgdmFyIHVhID0gd2luLm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiAodWEuaW5kZXhPZignc2FmYXJpJykgPj0gMCAmJiB1YS5pbmRleE9mKCdjaHJvbWUnKSA8IDAgJiYgdWEuaW5kZXhPZignYW5kcm9pZCcpIDwgMCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0lFOiAhIXdpbi5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50L2cpIHx8ICEhd2luLm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUvZyksXG4gICAgICBpc0VkZ2U6ICEhd2luLm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2UvZyksXG4gICAgICBpc1NhZmFyaTogaXNTYWZhcmkoKSxcbiAgICAgIGlzVWlXZWJWaWV3OiAvKGlQaG9uZXxpUG9kfGlQYWQpLipBcHBsZVdlYktpdCg/IS4qU2FmYXJpKS9pLnRlc3Qod2luLm5hdmlnYXRvci51c2VyQWdlbnQpLFxuICAgIH07XG4gIH0oKSk7XG5cbiAgdmFyIFN3aXBlckNsYXNzID0gZnVuY3Rpb24gU3dpcGVyQ2xhc3MocGFyYW1zKSB7XG4gICAgaWYgKCBwYXJhbXMgPT09IHZvaWQgMCApIHBhcmFtcyA9IHt9O1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgLy8gRXZlbnRzXG4gICAgc2VsZi5ldmVudHNMaXN0ZW5lcnMgPSB7fTtcblxuICAgIGlmIChzZWxmLnBhcmFtcyAmJiBzZWxmLnBhcmFtcy5vbikge1xuICAgICAgT2JqZWN0LmtleXMoc2VsZi5wYXJhbXMub24pLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICBzZWxmLm9uKGV2ZW50TmFtZSwgc2VsZi5wYXJhbXMub25bZXZlbnROYW1lXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHN0YXRpY0FjY2Vzc29ycyA9IHsgY29tcG9uZW50czogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uIChldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gc2VsZjsgfVxuICAgIHZhciBtZXRob2QgPSBwcmlvcml0eSA/ICd1bnNoaWZ0JyA6ICdwdXNoJztcbiAgICBldmVudHMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHsgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107IH1cbiAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XVttZXRob2RdKGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSAoZXZlbnRzLCBoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIHNlbGY7IH1cbiAgICBmdW5jdGlvbiBvbmNlSGFuZGxlcigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgaGFuZGxlci5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIHNlbGYub2ZmKGV2ZW50cywgb25jZUhhbmRsZXIpO1xuICAgICAgaWYgKG9uY2VIYW5kbGVyLmY3cHJveHkpIHtcbiAgICAgICAgZGVsZXRlIG9uY2VIYW5kbGVyLmY3cHJveHk7XG4gICAgICB9XG4gICAgfVxuICAgIG9uY2VIYW5kbGVyLmY3cHJveHkgPSBoYW5kbGVyO1xuICAgIHJldHVybiBzZWxmLm9uKGV2ZW50cywgb25jZUhhbmRsZXIsIHByaW9yaXR5KTtcbiAgfTtcblxuICBTd2lwZXJDbGFzcy5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gb2ZmIChldmVudHMsIGhhbmRsZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgeyByZXR1cm4gc2VsZjsgfVxuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0gJiYgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLmxlbmd0aCkge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnRIYW5kbGVyLCBpbmRleCkge1xuICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09IGhhbmRsZXIgfHwgKGV2ZW50SGFuZGxlci5mN3Byb3h5ICYmIGV2ZW50SGFuZGxlci5mN3Byb3h5ID09PSBoYW5kbGVyKSkge1xuICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfTtcblxuICBTd2lwZXJDbGFzcy5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQgKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgeyByZXR1cm4gc2VsZjsgfVxuICAgIHZhciBldmVudHM7XG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIGNvbnRleHQ7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICBldmVudHMgPSBhcmdzWzBdO1xuICAgICAgZGF0YSA9IGFyZ3Muc2xpY2UoMSwgYXJncy5sZW5ndGgpO1xuICAgICAgY29udGV4dCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF0uZXZlbnRzO1xuICAgICAgZGF0YSA9IGFyZ3NbMF0uZGF0YTtcbiAgICAgIGNvbnRleHQgPSBhcmdzWzBdLmNvbnRleHQgfHwgc2VsZjtcbiAgICB9XG4gICAgdmFyIGV2ZW50c0FycmF5ID0gQXJyYXkuaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogZXZlbnRzLnNwbGl0KCcgJyk7XG4gICAgZXZlbnRzQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVycyAmJiBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gW107XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICBoYW5kbGVycy5wdXNoKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgICBoYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuYXBwbHkoY29udGV4dCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLnByb3RvdHlwZS51c2VNb2R1bGVzUGFyYW1zID0gZnVuY3Rpb24gdXNlTW9kdWxlc1BhcmFtcyAoaW5zdGFuY2VQYXJhbXMpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB0aGlzO1xuICAgIGlmICghaW5zdGFuY2UubW9kdWxlcykgeyByZXR1cm47IH1cbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZS5tb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgICB2YXIgbW9kdWxlID0gaW5zdGFuY2UubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgIC8vIEV4dGVuZCBwYXJhbXNcbiAgICAgIGlmIChtb2R1bGUucGFyYW1zKSB7XG4gICAgICAgIFV0aWxzLmV4dGVuZChpbnN0YW5jZVBhcmFtcywgbW9kdWxlLnBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgU3dpcGVyQ2xhc3MucHJvdG90eXBlLnVzZU1vZHVsZXMgPSBmdW5jdGlvbiB1c2VNb2R1bGVzIChtb2R1bGVzUGFyYW1zKSB7XG4gICAgICBpZiAoIG1vZHVsZXNQYXJhbXMgPT09IHZvaWQgMCApIG1vZHVsZXNQYXJhbXMgPSB7fTtcblxuICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7XG4gICAgaWYgKCFpbnN0YW5jZS5tb2R1bGVzKSB7IHJldHVybjsgfVxuICAgIE9iamVjdC5rZXlzKGluc3RhbmNlLm1vZHVsZXMpLmZvckVhY2goZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHtcbiAgICAgIHZhciBtb2R1bGUgPSBpbnN0YW5jZS5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZXNQYXJhbXNbbW9kdWxlTmFtZV0gfHwge307XG4gICAgICAvLyBFeHRlbmQgaW5zdGFuY2UgbWV0aG9kcyBhbmQgcHJvcHNcbiAgICAgIGlmIChtb2R1bGUuaW5zdGFuY2UpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLmluc3RhbmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVQcm9wTmFtZSkge1xuICAgICAgICAgIHZhciBtb2R1bGVQcm9wID0gbW9kdWxlLmluc3RhbmNlW21vZHVsZVByb3BOYW1lXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZVByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGluc3RhbmNlW21vZHVsZVByb3BOYW1lXSA9IG1vZHVsZVByb3AuYmluZChpbnN0YW5jZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlW21vZHVsZVByb3BOYW1lXSA9IG1vZHVsZVByb3A7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnNcbiAgICAgIGlmIChtb2R1bGUub24gJiYgaW5zdGFuY2Uub24pIHtcbiAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLm9uKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVFdmVudE5hbWUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5vbihtb2R1bGVFdmVudE5hbWUsIG1vZHVsZS5vblttb2R1bGVFdmVudE5hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vZHVsZSBjcmVhdGUgY2FsbGJhY2tcbiAgICAgIGlmIChtb2R1bGUuY3JlYXRlKSB7XG4gICAgICAgIG1vZHVsZS5jcmVhdGUuYmluZChpbnN0YW5jZSkobW9kdWxlUGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWNBY2Nlc3NvcnMuY29tcG9uZW50cy5zZXQgPSBmdW5jdGlvbiAoY29tcG9uZW50cykge1xuICAgIHZhciBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKCFDbGFzcy51c2UpIHsgcmV0dXJuOyB9XG4gICAgQ2xhc3MudXNlKGNvbXBvbmVudHMpO1xuICB9O1xuXG4gIFN3aXBlckNsYXNzLmluc3RhbGxNb2R1bGUgPSBmdW5jdGlvbiBpbnN0YWxsTW9kdWxlIChtb2R1bGUpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHBhcmFtc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgIHZhciBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKCFDbGFzcy5wcm90b3R5cGUubW9kdWxlcykgeyBDbGFzcy5wcm90b3R5cGUubW9kdWxlcyA9IHt9OyB9XG4gICAgdmFyIG5hbWUgPSBtb2R1bGUubmFtZSB8fCAoKChPYmplY3Qua2V5cyhDbGFzcy5wcm90b3R5cGUubW9kdWxlcykubGVuZ3RoKSArIFwiX1wiICsgKFV0aWxzLm5vdygpKSkpO1xuICAgIENsYXNzLnByb3RvdHlwZS5tb2R1bGVzW25hbWVdID0gbW9kdWxlO1xuICAgIC8vIFByb3RvdHlwZVxuICAgIGlmIChtb2R1bGUucHJvdG8pIHtcbiAgICAgIE9iamVjdC5rZXlzKG1vZHVsZS5wcm90bykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIENsYXNzLnByb3RvdHlwZVtrZXldID0gbW9kdWxlLnByb3RvW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gQ2xhc3NcbiAgICBpZiAobW9kdWxlLnN0YXRpYykge1xuICAgICAgT2JqZWN0LmtleXMobW9kdWxlLnN0YXRpYykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIENsYXNzW2tleV0gPSBtb2R1bGUuc3RhdGljW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gQ2FsbGJhY2tcbiAgICBpZiAobW9kdWxlLmluc3RhbGwpIHtcbiAgICAgIG1vZHVsZS5pbnN0YWxsLmFwcGx5KENsYXNzLCBwYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gQ2xhc3M7XG4gIH07XG5cbiAgU3dpcGVyQ2xhc3MudXNlID0gZnVuY3Rpb24gdXNlIChtb2R1bGUpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHBhcmFtc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgIHZhciBDbGFzcyA9IHRoaXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlKSkge1xuICAgICAgbW9kdWxlLmZvckVhY2goZnVuY3Rpb24gKG0pIHsgcmV0dXJuIENsYXNzLmluc3RhbGxNb2R1bGUobSk7IH0pO1xuICAgICAgcmV0dXJuIENsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gQ2xhc3MuaW5zdGFsbE1vZHVsZS5hcHBseShDbGFzcywgWyBtb2R1bGUgXS5jb25jYXQoIHBhcmFtcyApKTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyggU3dpcGVyQ2xhc3MsIHN0YXRpY0FjY2Vzc29ycyApO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNpemUgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3aWR0aDtcbiAgICB2YXIgaGVpZ2h0O1xuICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpZHRoID0gc3dpcGVyLnBhcmFtcy53aWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSAkZWxbMF0uY2xpZW50V2lkdGg7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy5oZWlnaHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoZWlnaHQgPSBzd2lwZXIucGFyYW1zLmhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVpZ2h0ID0gJGVsWzBdLmNsaWVudEhlaWdodDtcbiAgICB9XG4gICAgaWYgKCh3aWR0aCA9PT0gMCAmJiBzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHx8IChoZWlnaHQgPT09IDAgJiYgc3dpcGVyLmlzVmVydGljYWwoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdWJ0cmFjdCBwYWRkaW5nc1xuICAgIHdpZHRoID0gd2lkdGggLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLWxlZnQnKSwgMTApIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1yaWdodCcpLCAxMCk7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy10b3AnKSwgMTApIC0gcGFyc2VJbnQoJGVsLmNzcygncGFkZGluZy1ib3R0b20nKSwgMTApO1xuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBzaXplOiBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB3aWR0aCA6IGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlcyAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG5cbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBzd2lwZXJTaXplID0gc3dpcGVyLnNpemU7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyIHdyb25nUlRMID0gc3dpcGVyLndyb25nUlRMO1xuICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgIHZhciBwcmV2aW91c1NsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICB2YXIgc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSkpO1xuICAgIHZhciBzbGlkZXNMZW5ndGggPSBpc1ZpcnR1YWwgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc2xpZGVzLmxlbmd0aDtcbiAgICB2YXIgc25hcEdyaWQgPSBbXTtcbiAgICB2YXIgc2xpZGVzR3JpZCA9IFtdO1xuICAgIHZhciBzbGlkZXNTaXplc0dyaWQgPSBbXTtcblxuICAgIHZhciBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0QmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlLmNhbGwoc3dpcGVyKTtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXI7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXRBZnRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIuY2FsbChzd2lwZXIpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICB2YXIgcHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcblxuICAgIHZhciBzcGFjZUJldHdlZW4gPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIHZhciBzbGlkZVBvc2l0aW9uID0gLW9mZnNldEJlZm9yZTtcbiAgICB2YXIgcHJldlNsaWRlU2l6ZSA9IDA7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAodHlwZW9mIHN3aXBlclNpemUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3BhY2VCZXR3ZWVuID09PSAnc3RyaW5nJyAmJiBzcGFjZUJldHdlZW4uaW5kZXhPZignJScpID49IDApIHtcbiAgICAgIHNwYWNlQmV0d2VlbiA9IChwYXJzZUZsb2F0KHNwYWNlQmV0d2Vlbi5yZXBsYWNlKCclJywgJycpKSAvIDEwMCkgKiBzd2lwZXJTaXplO1xuICAgIH1cblxuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IC1zcGFjZUJldHdlZW47XG5cbiAgICAvLyByZXNldCBtYXJnaW5zXG4gICAgaWYgKHJ0bCkgeyBzbGlkZXMuY3NzKHsgbWFyZ2luTGVmdDogJycsIG1hcmdpblRvcDogJycgfSk7IH1cbiAgICBlbHNlIHsgc2xpZGVzLmNzcyh7IG1hcmdpblJpZ2h0OiAnJywgbWFyZ2luQm90dG9tOiAnJyB9KTsgfVxuXG4gICAgdmFyIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3M7XG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4gPiAxKSB7XG4gICAgICBpZiAoTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uKSA9PT0gc2xpZGVzTGVuZ3RoIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pIHtcbiAgICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IHNsaWRlc0xlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBNYXRoLmNlaWwoc2xpZGVzTGVuZ3RoIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgcGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdyb3cnKSB7XG4gICAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBNYXRoLm1heChzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzLCBwYXJhbXMuc2xpZGVzUGVyVmlldyAqIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGMgc2xpZGVzXG4gICAgdmFyIHNsaWRlU2l6ZTtcbiAgICB2YXIgc2xpZGVzUGVyQ29sdW1uID0gcGFyYW1zLnNsaWRlc1BlckNvbHVtbjtcbiAgICB2YXIgc2xpZGVzUGVyUm93ID0gc2xpZGVzTnVtYmVyRXZlblRvUm93cyAvIHNsaWRlc1BlckNvbHVtbjtcbiAgICB2YXIgbnVtRnVsbENvbHVtbnMgPSBNYXRoLmZsb29yKHNsaWRlc0xlbmd0aCAvIHBhcmFtcy5zbGlkZXNQZXJDb2x1bW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHNsaWRlU2l6ZSA9IDA7XG4gICAgICB2YXIgc2xpZGUgPSBzbGlkZXMuZXEoaSk7XG4gICAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgICAgLy8gU2V0IHNsaWRlcyBvcmRlclxuICAgICAgICB2YXIgbmV3U2xpZGVPcmRlckluZGV4ID0gKHZvaWQgMCk7XG4gICAgICAgIHZhciBjb2x1bW4gPSAodm9pZCAwKTtcbiAgICAgICAgdmFyIHJvdyA9ICh2b2lkIDApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcmFtcy5zbGlkZXNQZXJDb2x1bW5GaWxsID09PSAnY29sdW1uJylcbiAgICAgICAgICB8fCAocGFyYW1zLnNsaWRlc1BlckNvbHVtbkZpbGwgPT09ICdyb3cnICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA+IDEpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyQ29sdW1uRmlsbCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgICAgICByb3cgPSBpIC0gKGNvbHVtbiAqIHNsaWRlc1BlckNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sdW1uID4gbnVtRnVsbENvbHVtbnMgfHwgKGNvbHVtbiA9PT0gbnVtRnVsbENvbHVtbnMgJiYgcm93ID09PSBzbGlkZXNQZXJDb2x1bW4gLSAxKSkge1xuICAgICAgICAgICAgICByb3cgKz0gMTtcbiAgICAgICAgICAgICAgaWYgKHJvdyA+PSBzbGlkZXNQZXJDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICByb3cgPSAwO1xuICAgICAgICAgICAgICAgIGNvbHVtbiArPSAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBncm91cEluZGV4ID0gTWF0aC5mbG9vcihpIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICAgICAgICAgIHJvdyA9IE1hdGguZmxvb3IoaSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3KSAtIGdyb3VwSW5kZXggKiBwYXJhbXMuc2xpZGVzUGVyQ29sdW1uO1xuICAgICAgICAgICAgY29sdW1uID0gaSAtIHJvdyAqIHBhcmFtcy5zbGlkZXNQZXJWaWV3IC0gZ3JvdXBJbmRleCAqIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdTbGlkZU9yZGVySW5kZXggPSBjb2x1bW4gKyAoKHJvdyAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MpIC8gc2xpZGVzUGVyQ29sdW1uKTtcbiAgICAgICAgICBzbGlkZVxuICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgICAnLW1vei1ib3gtb3JkaW5hbC1ncm91cCc6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICAgJy1tcy1mbGV4LW9yZGVyJzogbmV3U2xpZGVPcmRlckluZGV4LFxuICAgICAgICAgICAgICAnLXdlYmtpdC1vcmRlcic6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgICAgb3JkZXI6IG5ld1NsaWRlT3JkZXJJbmRleCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdyA9IE1hdGguZmxvb3IoaSAvIHNsaWRlc1BlclJvdyk7XG4gICAgICAgICAgY29sdW1uID0gaSAtIChyb3cgKiBzbGlkZXNQZXJSb3cpO1xuICAgICAgICB9XG4gICAgICAgIHNsaWRlXG4gICAgICAgICAgLmNzcyhcbiAgICAgICAgICAgIChcIm1hcmdpbi1cIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAndG9wJyA6ICdsZWZ0JykpLFxuICAgICAgICAgICAgKHJvdyAhPT0gMCAmJiBwYXJhbXMuc3BhY2VCZXR3ZWVuKSAmJiAoKChwYXJhbXMuc3BhY2VCZXR3ZWVuKSArIFwicHhcIikpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5hdHRyKCdkYXRhLXN3aXBlci1jb2x1bW4nLCBjb2x1bW4pXG4gICAgICAgICAgLmF0dHIoJ2RhdGEtc3dpcGVyLXJvdycsIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGUuY3NzKCdkaXNwbGF5JykgPT09ICdub25lJykgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHZhciBzbGlkZVN0eWxlcyA9IHdpbi5nZXRDb21wdXRlZFN0eWxlKHNsaWRlWzBdLCBudWxsKTtcbiAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgIHZhciBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuICAgICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLnRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKVxuICAgICAgICAgICAgPyBzbGlkZS5vdXRlcldpZHRoKHRydWUpXG4gICAgICAgICAgICA6IHNsaWRlLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSk7XG4gICAgICAgICAgICB2YXIgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctbGVmdCcpKTtcbiAgICAgICAgICAgIHZhciBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctcmlnaHQnKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luTGVmdCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWxlZnQnKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luUmlnaHQgPSBwYXJzZUZsb2F0KHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKTtcbiAgICAgICAgICAgIHZhciBib3hTaXppbmcgPSBzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG4gICAgICAgICAgICBpZiAoYm94U2l6aW5nICYmIGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnICYmICFCcm93c2VyLmlzSUUpIHtcbiAgICAgICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBtYXJnaW5MZWZ0ICsgbWFyZ2luUmlnaHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzbGlkZVNpemUgPSB3aWR0aCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSk7XG4gICAgICAgICAgICB2YXIgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSk7XG4gICAgICAgICAgICB2YXIgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSk7XG4gICAgICAgICAgICB2YXIgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tdG9wJykpO1xuICAgICAgICAgICAgdmFyIG1hcmdpbkJvdHRvbSA9IHBhcnNlRmxvYXQoc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWJvdHRvbScpKTtcbiAgICAgICAgICAgIHZhciBib3hTaXppbmckMSA9IHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcbiAgICAgICAgICAgIGlmIChib3hTaXppbmckMSAmJiBib3hTaXppbmckMSA9PT0gJ2JvcmRlci1ib3gnICYmICFCcm93c2VyLmlzSUUpIHtcbiAgICAgICAgICAgICAgc2xpZGVTaXplID0gaGVpZ2h0ICsgbWFyZ2luVG9wICsgbWFyZ2luQm90dG9tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2xpZGVTaXplID0gaGVpZ2h0ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20gKyBtYXJnaW5Ub3AgKyBtYXJnaW5Cb3R0b207XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgc2xpZGVbMF0uc3R5bGUudHJhbnNmb3JtID0gY3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IGN1cnJlbnRXZWJLaXRUcmFuc2Zvcm07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHsgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZVNpemUgPSAoc3dpcGVyU2l6ZSAtICgocGFyYW1zLnNsaWRlc1BlclZpZXcgLSAxKSAqIHNwYWNlQmV0d2VlbikpIC8gcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7IHNsaWRlU2l6ZSA9IE1hdGguZmxvb3Ioc2xpZGVTaXplKTsgfVxuXG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICBzbGlkZXNbaV0uc3R5bGUud2lkdGggPSBzbGlkZVNpemUgKyBcInB4XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsaWRlc1tpXS5zdHlsZS5oZWlnaHQgPSBzbGlkZVNpemUgKyBcInB4XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGVzW2ldKSB7XG4gICAgICAgIHNsaWRlc1tpXS5zd2lwZXJTbGlkZVNpemUgPSBzbGlkZVNpemU7XG4gICAgICB9XG4gICAgICBzbGlkZXNTaXplc0dyaWQucHVzaChzbGlkZVNpemUpO1xuXG5cbiAgICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gKyAoc2xpZGVTaXplIC8gMikgKyAocHJldlNsaWRlU2l6ZSAvIDIpICsgc3BhY2VCZXR3ZWVuO1xuICAgICAgICBpZiAocHJldlNsaWRlU2l6ZSA9PT0gMCAmJiBpICE9PSAwKSB7IHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gKHN3aXBlclNpemUgLyAyKSAtIHNwYWNlQmV0d2VlbjsgfVxuICAgICAgICBpZiAoaSA9PT0gMCkgeyBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiAtIChzd2lwZXJTaXplIC8gMikgLSBzcGFjZUJldHdlZW47IH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHNsaWRlUG9zaXRpb24pIDwgMSAvIDEwMDApIHsgc2xpZGVQb3NpdGlvbiA9IDA7IH1cbiAgICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHsgc2xpZGVQb3NpdGlvbiA9IE1hdGguZmxvb3Ioc2xpZGVQb3NpdGlvbik7IH1cbiAgICAgICAgaWYgKChpbmRleCkgJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHsgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTsgfVxuICAgICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3RocykgeyBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTsgfVxuICAgICAgICBpZiAoKGluZGV4KSAlIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgeyBzbmFwR3JpZC5wdXNoKHNsaWRlUG9zaXRpb24pOyB9XG4gICAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgICAgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gKyBzbGlkZVNpemUgKyBzcGFjZUJldHdlZW47XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci52aXJ0dWFsU2l6ZSArPSBzbGlkZVNpemUgKyBzcGFjZUJldHdlZW47XG5cbiAgICAgIHByZXZTbGlkZVNpemUgPSBzbGlkZVNpemU7XG5cbiAgICAgIGluZGV4ICs9IDE7XG4gICAgfVxuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IE1hdGgubWF4KHN3aXBlci52aXJ0dWFsU2l6ZSwgc3dpcGVyU2l6ZSkgKyBvZmZzZXRBZnRlcjtcbiAgICB2YXIgbmV3U2xpZGVzR3JpZDtcblxuICAgIGlmIChcbiAgICAgIHJ0bCAmJiB3cm9uZ1JUTCAmJiAocGFyYW1zLmVmZmVjdCA9PT0gJ3NsaWRlJyB8fCBwYXJhbXMuZWZmZWN0ID09PSAnY292ZXJmbG93JykpIHtcbiAgICAgICR3cmFwcGVyRWwuY3NzKHsgd2lkdGg6ICgoc3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2VlbikgKyBcInB4XCIpIH0pO1xuICAgIH1cbiAgICBpZiAoIVN1cHBvcnQuZmxleGJveCB8fCBwYXJhbXMuc2V0V3JhcHBlclNpemUpIHtcbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHsgJHdyYXBwZXJFbC5jc3MoeyB3aWR0aDogKChzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKSArIFwicHhcIikgfSk7IH1cbiAgICAgIGVsc2UgeyAkd3JhcHBlckVsLmNzcyh7IGhlaWdodDogKChzd2lwZXIudmlydHVhbFNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKSArIFwicHhcIikgfSk7IH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IChzbGlkZVNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKSAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3M7XG4gICAgICBzd2lwZXIudmlydHVhbFNpemUgPSBNYXRoLmNlaWwoc3dpcGVyLnZpcnR1YWxTaXplIC8gcGFyYW1zLnNsaWRlc1BlckNvbHVtbikgLSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkgeyAkd3JhcHBlckVsLmNzcyh7IHdpZHRoOiAoKHN3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICsgXCJweFwiKSB9KTsgfVxuICAgICAgZWxzZSB7ICR3cmFwcGVyRWwuY3NzKHsgaGVpZ2h0OiAoKHN3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pICsgXCJweFwiKSB9KTsgfVxuICAgICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBuZXdTbGlkZXNHcmlkID0gW107XG4gICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHNuYXBHcmlkLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgICB2YXIgc2xpZGVzR3JpZEl0ZW0gPSBzbmFwR3JpZFtpJDFdO1xuICAgICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7IHNsaWRlc0dyaWRJdGVtID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkSXRlbSk7IH1cbiAgICAgICAgICBpZiAoc25hcEdyaWRbaSQxXSA8IHN3aXBlci52aXJ0dWFsU2l6ZSArIHNuYXBHcmlkWzBdKSB7IG5ld1NsaWRlc0dyaWQucHVzaChzbGlkZXNHcmlkSXRlbSk7IH1cbiAgICAgICAgfVxuICAgICAgICBzbmFwR3JpZCA9IG5ld1NsaWRlc0dyaWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGxhc3QgZ3JpZCBlbGVtZW50cyBkZXBlbmRpbmcgb24gd2lkdGhcbiAgICBpZiAoIXBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgbmV3U2xpZGVzR3JpZCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSQyID0gMDsgaSQyIDwgc25hcEdyaWQubGVuZ3RoOyBpJDIgKz0gMSkge1xuICAgICAgICB2YXIgc2xpZGVzR3JpZEl0ZW0kMSA9IHNuYXBHcmlkW2kkMl07XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7IHNsaWRlc0dyaWRJdGVtJDEgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRJdGVtJDEpOyB9XG4gICAgICAgIGlmIChzbmFwR3JpZFtpJDJdIDw9IHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIHtcbiAgICAgICAgICBuZXdTbGlkZXNHcmlkLnB1c2goc2xpZGVzR3JpZEl0ZW0kMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcbiAgICAgIGlmIChNYXRoLmZsb29yKHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIC0gTWF0aC5mbG9vcihzbmFwR3JpZFtzbmFwR3JpZC5sZW5ndGggLSAxXSkgPiAxKSB7XG4gICAgICAgIHNuYXBHcmlkLnB1c2goc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzbmFwR3JpZC5sZW5ndGggPT09IDApIHsgc25hcEdyaWQgPSBbMF07IH1cblxuICAgIGlmIChwYXJhbXMuc3BhY2VCZXR3ZWVuICE9PSAwKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIGlmIChydGwpIHsgc2xpZGVzLmNzcyh7IG1hcmdpbkxlZnQ6IChzcGFjZUJldHdlZW4gKyBcInB4XCIpIH0pOyB9XG4gICAgICAgIGVsc2UgeyBzbGlkZXMuY3NzKHsgbWFyZ2luUmlnaHQ6IChzcGFjZUJldHdlZW4gKyBcInB4XCIpIH0pOyB9XG4gICAgICB9IGVsc2UgeyBzbGlkZXMuY3NzKHsgbWFyZ2luQm90dG9tOiAoc3BhY2VCZXR3ZWVuICsgXCJweFwiKSB9KTsgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY2VudGVySW5zdWZmaWNpZW50U2xpZGVzKSB7XG4gICAgICB2YXIgYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgICBzbGlkZXNTaXplc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVTaXplVmFsdWUpIHtcbiAgICAgICAgYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChwYXJhbXMuc3BhY2VCZXR3ZWVuID8gcGFyYW1zLnNwYWNlQmV0d2VlbiA6IDApO1xuICAgICAgfSk7XG4gICAgICBhbGxTbGlkZXNTaXplIC09IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gICAgICBpZiAoYWxsU2xpZGVzU2l6ZSA8IHN3aXBlclNpemUpIHtcbiAgICAgICAgdmFyIGFsbFNsaWRlc09mZnNldCA9IChzd2lwZXJTaXplIC0gYWxsU2xpZGVzU2l6ZSkgLyAyO1xuICAgICAgICBzbmFwR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgICAgICBzbmFwR3JpZFtzbmFwSW5kZXhdID0gc25hcCAtIGFsbFNsaWRlc09mZnNldDtcbiAgICAgICAgfSk7XG4gICAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc25hcCwgc25hcEluZGV4KSB7XG4gICAgICAgICAgc2xpZGVzR3JpZFtzbmFwSW5kZXhdID0gc25hcCArIGFsbFNsaWRlc09mZnNldDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgc2xpZGVzOiBzbGlkZXMsXG4gICAgICBzbmFwR3JpZDogc25hcEdyaWQsXG4gICAgICBzbGlkZXNHcmlkOiBzbGlkZXNHcmlkLFxuICAgICAgc2xpZGVzU2l6ZXNHcmlkOiBzbGlkZXNTaXplc0dyaWQsXG4gICAgfSk7XG5cbiAgICBpZiAoc2xpZGVzTGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0xlbmd0aCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlc0xlbmd0aENoYW5nZScpO1xuICAgIH1cbiAgICBpZiAoc25hcEdyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NuYXBHcmlkTGVuZ3RoKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSB7IHN3aXBlci5jaGVja092ZXJmbG93KCk7IH1cbiAgICAgIHN3aXBlci5lbWl0KCdzbmFwR3JpZExlbmd0aENoYW5nZScpO1xuICAgIH1cbiAgICBpZiAoc2xpZGVzR3JpZC5sZW5ndGggIT09IHByZXZpb3VzU2xpZGVzR3JpZExlbmd0aCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlc0dyaWRMZW5ndGhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUF1dG9IZWlnaHQgKHNwZWVkKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZVNsaWRlcyA9IFtdO1xuICAgIHZhciBuZXdIZWlnaHQgPSAwO1xuICAgIHZhciBpO1xuICAgIGlmICh0eXBlb2Ygc3BlZWQgPT09ICdudW1iZXInKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCk7XG4gICAgfVxuICAgIC8vIEZpbmQgc2xpZGVzIGN1cnJlbnRseSBpbiB2aWV3XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nICYmIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBNYXRoLmNlaWwoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3KTsgaSArPSAxKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCArIGk7XG4gICAgICAgIGlmIChpbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoKSB7IGJyZWFrOyB9XG4gICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZlU2xpZGVzLnB1c2goc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpWzBdKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIG5ldyBoZWlnaHQgZnJvbSBoaWdoZXN0IHNsaWRlIGluIHZpZXdcbiAgICBmb3IgKGkgPSAwOyBpIDwgYWN0aXZlU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodHlwZW9mIGFjdGl2ZVNsaWRlc1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGhlaWdodCA9IGFjdGl2ZVNsaWRlc1tpXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIG5ld0hlaWdodCA9IGhlaWdodCA+IG5ld0hlaWdodCA/IGhlaWdodCA6IG5ld0hlaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgSGVpZ2h0XG4gICAgaWYgKG5ld0hlaWdodCkgeyBzd2lwZXIuJHdyYXBwZXJFbC5jc3MoJ2hlaWdodCcsIChuZXdIZWlnaHQgKyBcInB4XCIpKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xpZGVzT2Zmc2V0ICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlT2Zmc2V0ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGVzW2ldLm9mZnNldExlZnQgOiBzbGlkZXNbaV0ub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc1Byb2dyZXNzICh0cmFuc2xhdGUpIHtcbiAgICBpZiAoIHRyYW5zbGF0ZSA9PT0gdm9pZCAwICkgdHJhbnNsYXRlID0gKHRoaXMgJiYgdGhpcy50cmFuc2xhdGUpIHx8IDA7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcblxuICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuXG4gICAgaWYgKHNsaWRlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgaWYgKHR5cGVvZiBzbGlkZXNbMF0uc3dpcGVyU2xpZGVPZmZzZXQgPT09ICd1bmRlZmluZWQnKSB7IHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTsgfVxuXG4gICAgdmFyIG9mZnNldENlbnRlciA9IC10cmFuc2xhdGU7XG4gICAgaWYgKHJ0bCkgeyBvZmZzZXRDZW50ZXIgPSB0cmFuc2xhdGU7IH1cblxuICAgIC8vIFZpc2libGUgU2xpZGVzXG4gICAgc2xpZGVzLnJlbW92ZUNsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG5cbiAgICBzd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgICBzd2lwZXIudmlzaWJsZVNsaWRlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBzbGlkZSA9IHNsaWRlc1tpXTtcbiAgICAgIHZhciBzbGlkZVByb2dyZXNzID0gKFxuICAgICAgICAob2Zmc2V0Q2VudGVyICsgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5taW5UcmFuc2xhdGUoKSA6IDApKSAtIHNsaWRlLnN3aXBlclNsaWRlT2Zmc2V0XG4gICAgICApIC8gKHNsaWRlLnN3aXBlclNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pO1xuICAgICAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Zpc2liaWxpdHkpIHtcbiAgICAgICAgdmFyIHNsaWRlQmVmb3JlID0gLShvZmZzZXRDZW50ZXIgLSBzbGlkZS5zd2lwZXJTbGlkZU9mZnNldCk7XG4gICAgICAgIHZhciBzbGlkZUFmdGVyID0gc2xpZGVCZWZvcmUgKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2YXIgaXNWaXNpYmxlID0gKHNsaWRlQmVmb3JlID49IDAgJiYgc2xpZGVCZWZvcmUgPCBzd2lwZXIuc2l6ZSAtIDEpXG4gICAgICAgICAgICAgICAgICB8fCAoc2xpZGVBZnRlciA+IDEgJiYgc2xpZGVBZnRlciA8PSBzd2lwZXIuc2l6ZSlcbiAgICAgICAgICAgICAgICAgIHx8IChzbGlkZUJlZm9yZSA8PSAwICYmIHNsaWRlQWZ0ZXIgPj0gc3dpcGVyLnNpemUpO1xuICAgICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgICAgICAgc2xpZGVzLmVxKGkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNsaWRlLnByb2dyZXNzID0gcnRsID8gLXNsaWRlUHJvZ3Jlc3MgOiBzbGlkZVByb2dyZXNzO1xuICAgIH1cbiAgICBzd2lwZXIudmlzaWJsZVNsaWRlcyA9ICQoc3dpcGVyLnZpc2libGVTbGlkZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3MgKHRyYW5zbGF0ZSkge1xuICAgIGlmICggdHJhbnNsYXRlID09PSB2b2lkIDAgKSB0cmFuc2xhdGUgPSAodGhpcyAmJiB0aGlzLnRyYW5zbGF0ZSkgfHwgMDtcblxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuXG4gICAgdmFyIHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgIHZhciBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcztcbiAgICB2YXIgaXNCZWdpbm5pbmcgPSBzd2lwZXIuaXNCZWdpbm5pbmc7XG4gICAgdmFyIGlzRW5kID0gc3dpcGVyLmlzRW5kO1xuICAgIHZhciB3YXNCZWdpbm5pbmcgPSBpc0JlZ2lubmluZztcbiAgICB2YXIgd2FzRW5kID0gaXNFbmQ7XG4gICAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICBpc0JlZ2lubmluZyA9IHRydWU7XG4gICAgICBpc0VuZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzID0gKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyAodHJhbnNsYXRlc0RpZmYpO1xuICAgICAgaXNCZWdpbm5pbmcgPSBwcm9ncmVzcyA8PSAwO1xuICAgICAgaXNFbmQgPSBwcm9ncmVzcyA+PSAxO1xuICAgIH1cbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgICBpc0JlZ2lubmluZzogaXNCZWdpbm5pbmcsXG4gICAgICBpc0VuZDogaXNFbmQsXG4gICAgfSk7XG5cbiAgICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLndhdGNoU2xpZGVzVmlzaWJpbGl0eSkgeyBzd2lwZXIudXBkYXRlU2xpZGVzUHJvZ3Jlc3ModHJhbnNsYXRlKTsgfVxuXG4gICAgaWYgKGlzQmVnaW5uaW5nICYmICF3YXNCZWdpbm5pbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFjaEJlZ2lubmluZyB0b0VkZ2UnKTtcbiAgICB9XG4gICAgaWYgKGlzRW5kICYmICF3YXNFbmQpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFjaEVuZCB0b0VkZ2UnKTtcbiAgICB9XG4gICAgaWYgKCh3YXNCZWdpbm5pbmcgJiYgIWlzQmVnaW5uaW5nKSB8fCAod2FzRW5kICYmICFpc0VuZCkpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdmcm9tRWRnZScpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdwcm9ncmVzcycsIHByb2dyZXNzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc0NsYXNzZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHJlYWxJbmRleCA9IHN3aXBlci5yZWFsSW5kZXg7XG4gICAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG5cbiAgICBzbGlkZXMucmVtb3ZlQ2xhc3MoKChwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykgKyBcIiBcIiArIChwYXJhbXMuc2xpZGVOZXh0Q2xhc3MpICsgXCIgXCIgKyAocGFyYW1zLnNsaWRlUHJldkNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcykgKyBcIiBcIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpKSk7XG5cbiAgICB2YXIgYWN0aXZlU2xpZGU7XG4gICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgYWN0aXZlU2xpZGUgPSBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBhY3RpdmVJbmRleCArIFwiXFxcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVTbGlkZSA9IHNsaWRlcy5lcShhY3RpdmVJbmRleCk7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIGNsYXNzZXNcbiAgICBhY3RpdmVTbGlkZS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcyk7XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgICAgaWYgKGFjdGl2ZVNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIjpub3QoLlwiICsgKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSArIFwiKVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdXCIpKVxuICAgICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIi5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdXCIpKVxuICAgICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5leHQgU2xpZGVcbiAgICB2YXIgbmV4dFNsaWRlID0gYWN0aXZlU2xpZGUubmV4dEFsbCgoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpKSkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcbiAgICBpZiAocGFyYW1zLmxvb3AgJiYgbmV4dFNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbmV4dFNsaWRlID0gc2xpZGVzLmVxKDApO1xuICAgICAgbmV4dFNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZU5leHRDbGFzcyk7XG4gICAgfVxuICAgIC8vIFByZXYgU2xpZGVcbiAgICB2YXIgcHJldlNsaWRlID0gYWN0aXZlU2xpZGUucHJldkFsbCgoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpKSkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgICBpZiAocGFyYW1zLmxvb3AgJiYgcHJldlNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcHJldlNsaWRlID0gc2xpZGVzLmVxKC0xKTtcbiAgICAgIHByZXZTbGlkZS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVQcmV2Q2xhc3MpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgICAgaWYgKG5leHRTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAgIC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCI6bm90KC5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIilbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKG5leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpKSArIFwiXFxcIl1cIikpXG4gICAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIi5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyAobmV4dFNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykpICsgXCJcXFwiXVwiKSlcbiAgICAgICAgICAuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlTmV4dENsYXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmV2U2xpZGUuaGFzQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiOm5vdCguXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIpW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIChwcmV2U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgKyBcIlxcXCJdXCIpKVxuICAgICAgICAgIC5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJHdyYXBwZXJFbFxuICAgICAgICAgIC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCIuXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKHByZXZTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpKSArIFwiXFxcIl1cIikpXG4gICAgICAgICAgLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZVByZXZDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZlSW5kZXggKG5ld0FjdGl2ZUluZGV4KSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gICAgdmFyIHNsaWRlc0dyaWQgPSBzd2lwZXIuc2xpZGVzR3JpZDtcbiAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHByZXZpb3VzSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHByZXZpb3VzUmVhbEluZGV4ID0gc3dpcGVyLnJlYWxJbmRleDtcbiAgICB2YXIgcHJldmlvdXNTbmFwSW5kZXggPSBzd2lwZXIuc25hcEluZGV4O1xuICAgIHZhciBhY3RpdmVJbmRleCA9IG5ld0FjdGl2ZUluZGV4O1xuICAgIHZhciBzbmFwSW5kZXg7XG4gICAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSAtICgoc2xpZGVzR3JpZFtpICsgMV0gLSBzbGlkZXNHcmlkW2ldKSAvIDIpKSB7XG4gICAgICAgICAgICBhY3RpdmVJbmRleCA9IGk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSkge1xuICAgICAgICAgICAgYWN0aXZlSW5kZXggPSBpICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgICBhY3RpdmVJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gICAgICBpZiAocGFyYW1zLm5vcm1hbGl6ZVNsaWRlSW5kZXgpIHtcbiAgICAgICAgaWYgKGFjdGl2ZUluZGV4IDwgMCB8fCB0eXBlb2YgYWN0aXZlSW5kZXggPT09ICd1bmRlZmluZWQnKSB7IGFjdGl2ZUluZGV4ID0gMDsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpID49IDApIHtcbiAgICAgIHNuYXBJbmRleCA9IHNuYXBHcmlkLmluZGV4T2YodHJhbnNsYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hcEluZGV4ID0gTWF0aC5mbG9vcihhY3RpdmVJbmRleCAvIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gICAgfVxuICAgIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSB7IHNuYXBJbmRleCA9IHNuYXBHcmlkLmxlbmd0aCAtIDE7IH1cbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChzbmFwSW5kZXggIT09IHByZXZpb3VzU25hcEluZGV4KSB7XG4gICAgICAgIHN3aXBlci5zbmFwSW5kZXggPSBzbmFwSW5kZXg7XG4gICAgICAgIHN3aXBlci5lbWl0KCdzbmFwSW5kZXhDaGFuZ2UnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgcmVhbCBpbmRleFxuICAgIHZhciByZWFsSW5kZXggPSBwYXJzZUludChzd2lwZXIuc2xpZGVzLmVxKGFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpIHx8IGFjdGl2ZUluZGV4LCAxMCk7XG5cbiAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICBzbmFwSW5kZXg6IHNuYXBJbmRleCxcbiAgICAgIHJlYWxJbmRleDogcmVhbEluZGV4LFxuICAgICAgcHJldmlvdXNJbmRleDogcHJldmlvdXNJbmRleCxcbiAgICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleCxcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnYWN0aXZlSW5kZXhDaGFuZ2UnKTtcbiAgICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG4gICAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFsSW5kZXhDaGFuZ2UnKTtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5pbml0aWFsaXplZCB8fCBzd2lwZXIucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2UnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDbGlja2VkU2xpZGUgKGUpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgc2xpZGUgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKVswXTtcbiAgICB2YXIgc2xpZGVGb3VuZCA9IGZhbHNlO1xuICAgIGlmIChzbGlkZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2ldID09PSBzbGlkZSkgeyBzbGlkZUZvdW5kID0gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzbGlkZSAmJiBzbGlkZUZvdW5kKSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZFNsaWRlID0gc2xpZGU7XG4gICAgICBpZiAoc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHBhcnNlSW50KCQoc2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSAkKHNsaWRlKS5pbmRleCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZFNsaWRlID0gdW5kZWZpbmVkO1xuICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5zbGlkZVRvQ2xpY2tlZFNsaWRlICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHVuZGVmaW5lZCAmJiBzd2lwZXIuY2xpY2tlZEluZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICB1cGRhdGVTaXplOiB1cGRhdGVTaXplLFxuICAgIHVwZGF0ZVNsaWRlczogdXBkYXRlU2xpZGVzLFxuICAgIHVwZGF0ZUF1dG9IZWlnaHQ6IHVwZGF0ZUF1dG9IZWlnaHQsXG4gICAgdXBkYXRlU2xpZGVzT2Zmc2V0OiB1cGRhdGVTbGlkZXNPZmZzZXQsXG4gICAgdXBkYXRlU2xpZGVzUHJvZ3Jlc3M6IHVwZGF0ZVNsaWRlc1Byb2dyZXNzLFxuICAgIHVwZGF0ZVByb2dyZXNzOiB1cGRhdGVQcm9ncmVzcyxcbiAgICB1cGRhdGVTbGlkZXNDbGFzc2VzOiB1cGRhdGVTbGlkZXNDbGFzc2VzLFxuICAgIHVwZGF0ZUFjdGl2ZUluZGV4OiB1cGRhdGVBY3RpdmVJbmRleCxcbiAgICB1cGRhdGVDbGlja2VkU2xpZGU6IHVwZGF0ZUNsaWNrZWRTbGlkZSxcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRUcmFuc2xhdGUgKGF4aXMpIHtcbiAgICBpZiAoIGF4aXMgPT09IHZvaWQgMCApIGF4aXMgPSB0aGlzLmlzSG9yaXpvbnRhbCgpID8gJ3gnIDogJ3knO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuXG4gICAgaWYgKHBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgICByZXR1cm4gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudFRyYW5zbGF0ZSA9IFV0aWxzLmdldFRyYW5zbGF0ZSgkd3JhcHBlckVsWzBdLCBheGlzKTtcbiAgICBpZiAocnRsKSB7IGN1cnJlbnRUcmFuc2xhdGUgPSAtY3VycmVudFRyYW5zbGF0ZTsgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRUcmFuc2xhdGUgfHwgMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSAodHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBwcm9ncmVzcyA9IHN3aXBlci5wcm9ncmVzcztcbiAgICB2YXIgeCA9IDA7XG4gICAgdmFyIHkgPSAwO1xuICAgIHZhciB6ID0gMDtcblxuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHggPSBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB5ID0gdHJhbnNsYXRlO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KTtcbiAgICAgIHkgPSBNYXRoLmZsb29yKHkpO1xuICAgIH1cblxuICAgIGlmICghcGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICAgIGlmIChTdXBwb3J0LnRyYW5zZm9ybXMzZCkgeyAkd3JhcHBlckVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCBcIiArIHogKyBcInB4KVwiKSk7IH1cbiAgICAgIGVsc2UgeyAkd3JhcHBlckVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIikpOyB9XG4gICAgfVxuICAgIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHggOiB5O1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcbiAgICB2YXIgbmV3UHJvZ3Jlc3M7XG4gICAgdmFyIHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgICAgbmV3UHJvZ3Jlc3MgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gKHRyYW5zbGF0ZXNEaWZmKTtcbiAgICB9XG4gICAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiBtaW5UcmFuc2xhdGUgKCkge1xuICAgIHJldHVybiAoLXRoaXMuc25hcEdyaWRbMF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF4VHJhbnNsYXRlICgpIHtcbiAgICByZXR1cm4gKC10aGlzLnNuYXBHcmlkW3RoaXMuc25hcEdyaWQubGVuZ3RoIC0gMV0pO1xuICB9XG5cbiAgdmFyIHRyYW5zbGF0ZSA9IHtcbiAgICBnZXRUcmFuc2xhdGU6IGdldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2xhdGU6IHNldFRyYW5zbGF0ZSxcbiAgICBtaW5UcmFuc2xhdGU6IG1pblRyYW5zbGF0ZSxcbiAgICBtYXhUcmFuc2xhdGU6IG1heFRyYW5zbGF0ZSxcbiAgfTtcblxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uIChkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICBzd2lwZXIuJHdyYXBwZXJFbC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcblxuICAgIHN3aXBlci5lbWl0KCdzZXRUcmFuc2l0aW9uJywgZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQgKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKSB7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHByZXZpb3VzSW5kZXggPSBzd2lwZXIucHJldmlvdXNJbmRleDtcbiAgICBpZiAocGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgdmFyIGRpciA9IGRpcmVjdGlvbjtcbiAgICBpZiAoIWRpcikge1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgeyBkaXIgPSAnbmV4dCc7IH1cbiAgICAgIGVsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgeyBkaXIgPSAncHJldic7IH1cbiAgICAgIGVsc2UgeyBkaXIgPSAncmVzZXQnOyB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25TdGFydCcpO1xuXG4gICAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVSZXNldFRyYW5zaXRpb25TdGFydCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2lwZXIuZW1pdCgnc2xpZGVDaGFuZ2VUcmFuc2l0aW9uU3RhcnQnKTtcbiAgICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVQcmV2VHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCQxIChydW5DYWxsYmFja3MsIGRpcmVjdGlvbikge1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXg7XG4gICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuXG4gICAgdmFyIGRpciA9IGRpcmVjdGlvbjtcbiAgICBpZiAoIWRpcikge1xuICAgICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgeyBkaXIgPSAnbmV4dCc7IH1cbiAgICAgIGVsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgeyBkaXIgPSAncHJldic7IH1cbiAgICAgIGVsc2UgeyBkaXIgPSAncmVzZXQnOyB9XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcblxuICAgIGlmIChydW5DYWxsYmFja3MgJiYgYWN0aXZlSW5kZXggIT09IHByZXZpb3VzSW5kZXgpIHtcbiAgICAgIGlmIChkaXIgPT09ICdyZXNldCcpIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUmVzZXRUcmFuc2l0aW9uRW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZVRyYW5zaXRpb25FbmQnKTtcbiAgICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgICBzd2lwZXIuZW1pdCgnc2xpZGVOZXh0VHJhbnNpdGlvbkVuZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3NsaWRlUHJldlRyYW5zaXRpb25FbmQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbiQxID0ge1xuICAgIHNldFRyYW5zaXRpb246IHNldFRyYW5zaXRpb24sXG4gICAgdHJhbnNpdGlvblN0YXJ0OiB0cmFuc2l0aW9uU3RhcnQsXG4gICAgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCQxLFxuICB9O1xuXG4gIGZ1bmN0aW9uIHNsaWRlVG8gKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCkge1xuICAgIGlmICggaW5kZXggPT09IHZvaWQgMCApIGluZGV4ID0gMDtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHNsaWRlSW5kZXggPSBpbmRleDtcbiAgICBpZiAoc2xpZGVJbmRleCA8IDApIHsgc2xpZGVJbmRleCA9IDA7IH1cblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgICB2YXIgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkO1xuICAgIHZhciBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXg7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgc25hcEluZGV4ID0gTWF0aC5mbG9vcihzbGlkZUluZGV4IC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgeyBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxOyB9XG5cbiAgICBpZiAoKGFjdGl2ZUluZGV4IHx8IHBhcmFtcy5pbml0aWFsU2xpZGUgfHwgMCkgPT09IChwcmV2aW91c0luZGV4IHx8IDApICYmIHJ1bkNhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVNsaWRlQ2hhbmdlU3RhcnQnKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhbnNsYXRlID0gLXNuYXBHcmlkW3NuYXBJbmRleF07XG5cbiAgICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3ModHJhbnNsYXRlKTtcblxuICAgIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKC1NYXRoLmZsb29yKHRyYW5zbGF0ZSAqIDEwMCkgPj0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2ldICogMTAwKSkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkICYmIHNsaWRlSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiB0cmFuc2xhdGUgPCBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiB0cmFuc2xhdGUgPiBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA+IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAoKGFjdGl2ZUluZGV4IHx8IDApICE9PSBzbGlkZUluZGV4KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaXJlY3Rpb247XG4gICAgaWYgKHNsaWRlSW5kZXggPiBhY3RpdmVJbmRleCkgeyBkaXJlY3Rpb24gPSAnbmV4dCc7IH1cbiAgICBlbHNlIGlmIChzbGlkZUluZGV4IDwgYWN0aXZlSW5kZXgpIHsgZGlyZWN0aW9uID0gJ3ByZXYnOyB9XG4gICAgZWxzZSB7IGRpcmVjdGlvbiA9ICdyZXNldCc7IH1cblxuXG4gICAgLy8gVXBkYXRlIEluZGV4XG4gICAgaWYgKChydGwgJiYgLXRyYW5zbGF0ZSA9PT0gc3dpcGVyLnRyYW5zbGF0ZSkgfHwgKCFydGwgJiYgdHJhbnNsYXRlID09PSBzd2lwZXIudHJhbnNsYXRlKSkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KHNsaWRlSW5kZXgpO1xuICAgICAgLy8gVXBkYXRlIEhlaWdodFxuICAgICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgaWYgKHBhcmFtcy5lZmZlY3QgIT09ICdzbGlkZScpIHtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ3Jlc2V0Jykge1xuICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzcGVlZCA9PT0gMCB8fCAhU3VwcG9ydC50cmFuc2l0aW9uKSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIGlmICghc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gbnVsbDtcbiAgICAgICAgICAgIGRlbGV0ZSBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQ7XG4gICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVRvTG9vcCAoaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKSB7XG4gICAgaWYgKCBpbmRleCA9PT0gdm9pZCAwICkgaW5kZXggPSAwO1xuICAgIGlmICggc3BlZWQgPT09IHZvaWQgMCApIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgbmV3SW5kZXggPSBpbmRleDtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICBuZXdJbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlTmV4dCAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIGFuaW1hdGluZyA9IHN3aXBlci5hbmltYXRpbmc7XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBpZiAoYW5pbWF0aW5nKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXggKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXAsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCArIHBhcmFtcy5zbGlkZXNQZXJHcm91cCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlUHJldiAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIGFuaW1hdGluZyA9IHN3aXBlci5hbmltYXRpbmc7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQ7XG4gICAgdmFyIHJ0bFRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChhbmltYXRpbmcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgIH1cbiAgICB2YXIgdHJhbnNsYXRlID0gcnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWwpIHtcbiAgICAgIGlmICh2YWwgPCAwKSB7IHJldHVybiAtTWF0aC5mbG9vcihNYXRoLmFicyh2YWwpKTsgfVxuICAgICAgcmV0dXJuIE1hdGguZmxvb3IodmFsKTtcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPSBub3JtYWxpemUodHJhbnNsYXRlKTtcbiAgICB2YXIgbm9ybWFsaXplZFNuYXBHcmlkID0gc25hcEdyaWQubWFwKGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG5vcm1hbGl6ZSh2YWwpOyB9KTtcbiAgICB2YXIgbm9ybWFsaXplZFNsaWRlc0dyaWQgPSBzbGlkZXNHcmlkLm1hcChmdW5jdGlvbiAodmFsKSB7IHJldHVybiBub3JtYWxpemUodmFsKTsgfSk7XG5cbiAgICB2YXIgY3VycmVudFNuYXAgPSBzbmFwR3JpZFtub3JtYWxpemVkU25hcEdyaWQuaW5kZXhPZihub3JtYWxpemVkVHJhbnNsYXRlKV07XG4gICAgdmFyIHByZXZTbmFwID0gc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSkgLSAxXTtcbiAgICB2YXIgcHJldkluZGV4O1xuICAgIGlmICh0eXBlb2YgcHJldlNuYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwcmV2SW5kZXggPSBzbGlkZXNHcmlkLmluZGV4T2YocHJldlNuYXApO1xuICAgICAgaWYgKHByZXZJbmRleCA8IDApIHsgcHJldkluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4IC0gMTsgfVxuICAgIH1cbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8ocHJldkluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cblxuICAvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbiAgZnVuY3Rpb24gc2xpZGVSZXNldCAoc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpIHtcbiAgICBpZiAoIHNwZWVkID09PSB2b2lkIDAgKSBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkO1xuICAgIGlmICggcnVuQ2FsbGJhY2tzID09PSB2b2lkIDAgKSBydW5DYWxsYmFja3MgPSB0cnVlO1xuXG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG4gIGZ1bmN0aW9uIHNsaWRlVG9DbG9zZXN0IChzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCkge1xuICAgIGlmICggc3BlZWQgPT09IHZvaWQgMCApIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQ7XG4gICAgaWYgKCBydW5DYWxsYmFja3MgPT09IHZvaWQgMCApIHJ1bkNhbGxiYWNrcyA9IHRydWU7XG5cbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHNuYXBJbmRleCA9IE1hdGguZmxvb3IoaW5kZXggLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcblxuICAgIGlmIChzbmFwSW5kZXggPCBzd2lwZXIuc25hcEdyaWQubGVuZ3RoIC0gMSkge1xuICAgICAgdmFyIHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG5cbiAgICAgIHZhciBjdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuICAgICAgdmFyIG5leHRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCArIDFdO1xuXG4gICAgICBpZiAoKHRyYW5zbGF0ZSAtIGN1cnJlbnRTbmFwKSA+IChuZXh0U25hcCAtIGN1cnJlbnRTbmFwKSAvIDIpIHtcbiAgICAgICAgaW5kZXggPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhpbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVUb0NsaWNrZWRTbGlkZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcblxuICAgIHZhciBzbGlkZXNQZXJWaWV3ID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyA/IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpIDogcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgdmFyIHNsaWRlVG9JbmRleCA9IHN3aXBlci5jbGlja2VkSW5kZXg7XG4gICAgdmFyIHJlYWxJbmRleDtcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7IHJldHVybjsgfVxuICAgICAgcmVhbEluZGV4ID0gcGFyc2VJbnQoJChzd2lwZXIuY2xpY2tlZFNsaWRlKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc2xpZGVUb0luZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcyAtIChzbGlkZXNQZXJWaWV3IC8gMikpXG4gICAgICAgICAgfHwgKHNsaWRlVG9JbmRleCA+IChzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpICsgKHNsaWRlc1BlclZpZXcgLyAyKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsXG4gICAgICAgICAgICAuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHJlYWxJbmRleCArIFwiXFxcIl06bm90KC5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIilcIikpXG4gICAgICAgICAgICAuZXEoMClcbiAgICAgICAgICAgIC5pbmRleCgpO1xuXG4gICAgICAgICAgVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlVG9JbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gc2xpZGVzUGVyVmlldykge1xuICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICBzbGlkZVRvSW5kZXggPSAkd3JhcHBlckVsXG4gICAgICAgICAgLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyByZWFsSW5kZXggKyBcIlxcXCJdOm5vdCguXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIpXCIpKVxuICAgICAgICAgIC5lcSgwKVxuICAgICAgICAgIC5pbmRleCgpO1xuXG4gICAgICAgIFV0aWxzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNsaWRlID0ge1xuICAgIHNsaWRlVG86IHNsaWRlVG8sXG4gICAgc2xpZGVUb0xvb3A6IHNsaWRlVG9Mb29wLFxuICAgIHNsaWRlTmV4dDogc2xpZGVOZXh0LFxuICAgIHNsaWRlUHJldjogc2xpZGVQcmV2LFxuICAgIHNsaWRlUmVzZXQ6IHNsaWRlUmVzZXQsXG4gICAgc2xpZGVUb0Nsb3Nlc3Q6IHNsaWRlVG9DbG9zZXN0LFxuICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IHNsaWRlVG9DbGlja2VkU2xpZGUsXG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcENyZWF0ZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAvLyBSZW1vdmUgZHVwbGljYXRlZCBzbGlkZXNcbiAgICAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykgKyBcIi5cIiArIChwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpKS5yZW1vdmUoKTtcblxuICAgIHZhciBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKTtcblxuICAgIGlmIChwYXJhbXMubG9vcEZpbGxHcm91cFdpdGhCbGFuaykge1xuICAgICAgdmFyIGJsYW5rU2xpZGVzTnVtID0gcGFyYW1zLnNsaWRlc1Blckdyb3VwIC0gKHNsaWRlcy5sZW5ndGggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgICAgaWYgKGJsYW5rU2xpZGVzTnVtICE9PSBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBibGFua1NsaWRlc051bTsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIGJsYW5rTm9kZSA9ICQoZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hZGRDbGFzcygoKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiIFwiICsgKHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpKSk7XG4gICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoYmxhbmtOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChwYXJhbXMuc2xpZGVDbGFzcykpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiAhcGFyYW1zLmxvb3BlZFNsaWRlcykgeyBwYXJhbXMubG9vcGVkU2xpZGVzID0gc2xpZGVzLmxlbmd0aDsgfVxuXG4gICAgc3dpcGVyLmxvb3BlZFNsaWRlcyA9IHBhcnNlSW50KHBhcmFtcy5sb29wZWRTbGlkZXMgfHwgcGFyYW1zLnNsaWRlc1BlclZpZXcsIDEwKTtcbiAgICBzd2lwZXIubG9vcGVkU2xpZGVzICs9IHBhcmFtcy5sb29wQWRkaXRpb25hbFNsaWRlcztcbiAgICBpZiAoc3dpcGVyLmxvb3BlZFNsaWRlcyA+IHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgIHN3aXBlci5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBwcmVwZW5kU2xpZGVzID0gW107XG4gICAgdmFyIGFwcGVuZFNsaWRlcyA9IFtdO1xuICAgIHNsaWRlcy5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWwpIHtcbiAgICAgIHZhciBzbGlkZSA9ICQoZWwpO1xuICAgICAgaWYgKGluZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcykgeyBhcHBlbmRTbGlkZXMucHVzaChlbCk7IH1cbiAgICAgIGlmIChpbmRleCA8IHNsaWRlcy5sZW5ndGggJiYgaW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMpIHsgcHJlcGVuZFNsaWRlcy5wdXNoKGVsKTsgfVxuICAgICAgc2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgfSk7XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgYXBwZW5kU2xpZGVzLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICR3cmFwcGVyRWwuYXBwZW5kKCQoYXBwZW5kU2xpZGVzW2kkMV0uY2xvbmVOb2RlKHRydWUpKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpJDIgPSBwcmVwZW5kU2xpZGVzLmxlbmd0aCAtIDE7IGkkMiA+PSAwOyBpJDIgLT0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5wcmVwZW5kKCQocHJlcGVuZFNsaWRlc1tpJDJdLmNsb25lTm9kZSh0cnVlKSkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29wRml4ICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgdmFyIGxvb3BlZFNsaWRlcyA9IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgdmFyIGFsbG93U2xpZGVQcmV2ID0gc3dpcGVyLmFsbG93U2xpZGVQcmV2O1xuICAgIHZhciBhbGxvd1NsaWRlTmV4dCA9IHN3aXBlci5hbGxvd1NsaWRlTmV4dDtcbiAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgdmFyIG5ld0luZGV4O1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gdHJ1ZTtcblxuICAgIHZhciBzbmFwVHJhbnNsYXRlID0gLXNuYXBHcmlkW2FjdGl2ZUluZGV4XTtcbiAgICB2YXIgZGlmZiA9IHNuYXBUcmFuc2xhdGUgLSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG5cblxuICAgIC8vIEZpeCBGb3IgTmVnYXRpdmUgT3ZlcnNsaWRpbmdcbiAgICBpZiAoYWN0aXZlSW5kZXggPCBsb29wZWRTbGlkZXMpIHtcbiAgICAgIG5ld0luZGV4ID0gKHNsaWRlcy5sZW5ndGggLSAobG9vcGVkU2xpZGVzICogMykpICsgYWN0aXZlSW5kZXg7XG4gICAgICBuZXdJbmRleCArPSBsb29wZWRTbGlkZXM7XG4gICAgICB2YXIgc2xpZGVDaGFuZ2VkID0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIGlmIChzbGlkZUNoYW5nZWQgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiBhY3RpdmVJbmRleCA+PSBsb29wZWRTbGlkZXMgKiAyKSB8fCAoYWN0aXZlSW5kZXggPj0gc2xpZGVzLmxlbmd0aCAtIGxvb3BlZFNsaWRlcykpIHtcbiAgICAgIC8vIEZpeCBGb3IgUG9zaXRpdmUgT3ZlcnNsaWRpbmdcbiAgICAgIG5ld0luZGV4ID0gLXNsaWRlcy5sZW5ndGggKyBhY3RpdmVJbmRleCArIGxvb3BlZFNsaWRlcztcbiAgICAgIG5ld0luZGV4ICs9IGxvb3BlZFNsaWRlcztcbiAgICAgIHZhciBzbGlkZUNoYW5nZWQkMSA9IHN3aXBlci5zbGlkZVRvKG5ld0luZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICBpZiAoc2xpZGVDaGFuZ2VkJDEgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKChydGwgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpIC0gZGlmZik7XG4gICAgICB9XG4gICAgfVxuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IGFsbG93U2xpZGVQcmV2O1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9vcERlc3Ryb3kgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpICsgXCIuXCIgKyAocGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIsLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSArIFwiLlwiICsgKHBhcmFtcy5zbGlkZUJsYW5rQ2xhc3MpKSkucmVtb3ZlKCk7XG4gICAgc2xpZGVzLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gIH1cblxuICB2YXIgbG9vcCA9IHtcbiAgICBsb29wQ3JlYXRlOiBsb29wQ3JlYXRlLFxuICAgIGxvb3BGaXg6IGxvb3BGaXgsXG4gICAgbG9vcERlc3Ryb3k6IGxvb3BEZXN0cm95LFxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldEdyYWJDdXJzb3IgKG1vdmluZykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChTdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggfHwgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQpKSB7IHJldHVybjsgfVxuICAgIHZhciBlbCA9IHN3aXBlci5lbDtcbiAgICBlbC5zdHlsZS5jdXJzb3IgPSAnbW92ZSc7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJy13ZWJraXQtZ3JhYmJpbmcnIDogJy13ZWJraXQtZ3JhYic7XG4gICAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJy1tb3otZ3JhYmJpbicgOiAnLW1vei1ncmFiJztcbiAgICBlbC5zdHlsZS5jdXJzb3IgPSBtb3ZpbmcgPyAnZ3JhYmJpbmcnIDogJ2dyYWInO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5zZXRHcmFiQ3Vyc29yICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoU3VwcG9ydC50b3VjaCB8fCAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCkpIHsgcmV0dXJuOyB9XG4gICAgc3dpcGVyLmVsLnN0eWxlLmN1cnNvciA9ICcnO1xuICB9XG5cbiAgdmFyIGdyYWJDdXJzb3IgPSB7XG4gICAgc2V0R3JhYkN1cnNvcjogc2V0R3JhYkN1cnNvcixcbiAgICB1bnNldEdyYWJDdXJzb3I6IHVuc2V0R3JhYkN1cnNvcixcbiAgfTtcblxuICBmdW5jdGlvbiBhcHBlbmRTbGlkZSAoc2xpZGVzKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldKSB7ICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlc1tpXSk7IH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgIH1cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgU3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwZW5kU2xpZGUgKHNsaWRlcykge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG4gICAgdmFyIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyAxO1xuICAgIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0pIHsgJHdyYXBwZXJFbC5wcmVwZW5kKHNsaWRlc1tpXSk7IH1cbiAgICAgIH1cbiAgICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyBzbGlkZXMubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLnByZXBlbmQoc2xpZGVzKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgIH1cbiAgICBpZiAoIShwYXJhbXMub2JzZXJ2ZXIgJiYgU3VwcG9ydC5vYnNlcnZlcikpIHtcbiAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICB9XG4gICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDAsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFNsaWRlIChpbmRleCwgc2xpZGVzKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgdmFyIGFjdGl2ZUluZGV4QnVmZmVyID0gYWN0aXZlSW5kZXg7XG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBhY3RpdmVJbmRleEJ1ZmZlciAtPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgICBzd2lwZXIuc2xpZGVzID0gJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAocGFyYW1zLnNsaWRlQ2xhc3MpKSk7XG4gICAgfVxuICAgIHZhciBiYXNlTGVuZ3RoID0gc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gICAgaWYgKGluZGV4IDw9IDApIHtcbiAgICAgIHN3aXBlci5wcmVwZW5kU2xpZGUoc2xpZGVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGluZGV4ID49IGJhc2VMZW5ndGgpIHtcbiAgICAgIHN3aXBlci5hcHBlbmRTbGlkZShzbGlkZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlciA+IGluZGV4ID8gYWN0aXZlSW5kZXhCdWZmZXIgKyAxIDogYWN0aXZlSW5kZXhCdWZmZXI7XG5cbiAgICB2YXIgc2xpZGVzQnVmZmVyID0gW107XG4gICAgZm9yICh2YXIgaSA9IGJhc2VMZW5ndGggLSAxOyBpID49IGluZGV4OyBpIC09IDEpIHtcbiAgICAgIHZhciBjdXJyZW50U2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgY3VycmVudFNsaWRlLnJlbW92ZSgpO1xuICAgICAgc2xpZGVzQnVmZmVyLnVuc2hpZnQoY3VycmVudFNsaWRlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBzbGlkZXMubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2kkMV0pIHsgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzW2kkMV0pOyB9XG4gICAgICB9XG4gICAgICBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyID4gaW5kZXggPyBhY3RpdmVJbmRleEJ1ZmZlciArIHNsaWRlcy5sZW5ndGggOiBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBzbGlkZXNCdWZmZXIubGVuZ3RoOyBpJDIgKz0gMSkge1xuICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoc2xpZGVzQnVmZmVyW2kkMl0pO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG4gICAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXggKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlU2xpZGUgKHNsaWRlc0luZGV4ZXMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcblxuICAgIHZhciBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgYWN0aXZlSW5kZXhCdWZmZXIgLT0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgc3dpcGVyLnNsaWRlcyA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHBhcmFtcy5zbGlkZUNsYXNzKSkpO1xuICAgIH1cbiAgICB2YXIgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgICB2YXIgaW5kZXhUb1JlbW92ZTtcblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzSW5kZXhlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzSW5kZXhlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNJbmRleGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzW2ldO1xuICAgICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpbmRleFRvUmVtb3ZlXSkgeyBzd2lwZXIuc2xpZGVzLmVxKGluZGV4VG9SZW1vdmUpLnJlbW92ZSgpOyB9XG4gICAgICAgIGlmIChpbmRleFRvUmVtb3ZlIDwgbmV3QWN0aXZlSW5kZXgpIHsgbmV3QWN0aXZlSW5kZXggLT0gMTsgfVxuICAgICAgfVxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4VG9SZW1vdmUgPSBzbGlkZXNJbmRleGVzO1xuICAgICAgaWYgKHN3aXBlci5zbGlkZXNbaW5kZXhUb1JlbW92ZV0pIHsgc3dpcGVyLnNsaWRlcy5lcShpbmRleFRvUmVtb3ZlKS5yZW1vdmUoKTsgfVxuICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgeyBuZXdBY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICBuZXdBY3RpdmVJbmRleCA9IE1hdGgubWF4KG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKCEocGFyYW1zLm9ic2VydmVyICYmIFN1cHBvcnQub2JzZXJ2ZXIpKSB7XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXggKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQWxsU2xpZGVzICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIHZhciBzbGlkZXNJbmRleGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBzbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgfVxuICAgIHN3aXBlci5yZW1vdmVTbGlkZShzbGlkZXNJbmRleGVzKTtcbiAgfVxuXG4gIHZhciBtYW5pcHVsYXRpb24gPSB7XG4gICAgYXBwZW5kU2xpZGU6IGFwcGVuZFNsaWRlLFxuICAgIHByZXBlbmRTbGlkZTogcHJlcGVuZFNsaWRlLFxuICAgIGFkZFNsaWRlOiBhZGRTbGlkZSxcbiAgICByZW1vdmVTbGlkZTogcmVtb3ZlU2xpZGUsXG4gICAgcmVtb3ZlQWxsU2xpZGVzOiByZW1vdmVBbGxTbGlkZXMsXG4gIH07XG5cbiAgdmFyIERldmljZSA9IChmdW5jdGlvbiBEZXZpY2UoKSB7XG4gICAgdmFyIHVhID0gd2luLm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICB2YXIgZGV2aWNlID0ge1xuICAgICAgaW9zOiBmYWxzZSxcbiAgICAgIGFuZHJvaWQ6IGZhbHNlLFxuICAgICAgYW5kcm9pZENocm9tZTogZmFsc2UsXG4gICAgICBkZXNrdG9wOiBmYWxzZSxcbiAgICAgIHdpbmRvd3M6IGZhbHNlLFxuICAgICAgaXBob25lOiBmYWxzZSxcbiAgICAgIGlwb2Q6IGZhbHNlLFxuICAgICAgaXBhZDogZmFsc2UsXG4gICAgICBjb3Jkb3ZhOiB3aW4uY29yZG92YSB8fCB3aW4ucGhvbmVnYXAsXG4gICAgICBwaG9uZWdhcDogd2luLmNvcmRvdmEgfHwgd2luLnBob25lZ2FwLFxuICAgIH07XG5cbiAgICB2YXIgd2luZG93cyA9IHVhLm1hdGNoKC8oV2luZG93cyBQaG9uZSk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBhbmRyb2lkID0gdWEubWF0Y2goLyhBbmRyb2lkKTs/W1xcc1xcL10rKFtcXGQuXSspPy8pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICAgIHZhciBpcG9kID0gdWEubWF0Y2goLyhpUG9kKSguKk9TXFxzKFtcXGRfXSspKT8vKTtcbiAgICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG5cblxuICAgIC8vIFdpbmRvd3NcbiAgICBpZiAod2luZG93cykge1xuICAgICAgZGV2aWNlLm9zID0gJ3dpbmRvd3MnO1xuICAgICAgZGV2aWNlLm9zVmVyc2lvbiA9IHdpbmRvd3NbMl07XG4gICAgICBkZXZpY2Uud2luZG93cyA9IHRydWU7XG4gICAgfVxuICAgIC8vIEFuZHJvaWRcbiAgICBpZiAoYW5kcm9pZCAmJiAhd2luZG93cykge1xuICAgICAgZGV2aWNlLm9zID0gJ2FuZHJvaWQnO1xuICAgICAgZGV2aWNlLm9zVmVyc2lvbiA9IGFuZHJvaWRbMl07XG4gICAgICBkZXZpY2UuYW5kcm9pZCA9IHRydWU7XG4gICAgICBkZXZpY2UuYW5kcm9pZENocm9tZSA9IHVhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lJykgPj0gMDtcbiAgICB9XG4gICAgaWYgKGlwYWQgfHwgaXBob25lIHx8IGlwb2QpIHtcbiAgICAgIGRldmljZS5vcyA9ICdpb3MnO1xuICAgICAgZGV2aWNlLmlvcyA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlPU1xuICAgIGlmIChpcGhvbmUgJiYgIWlwb2QpIHtcbiAgICAgIGRldmljZS5vc1ZlcnNpb24gPSBpcGhvbmVbMl0ucmVwbGFjZSgvXy9nLCAnLicpO1xuICAgICAgZGV2aWNlLmlwaG9uZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpcGFkKSB7XG4gICAgICBkZXZpY2Uub3NWZXJzaW9uID0gaXBhZFsyXS5yZXBsYWNlKC9fL2csICcuJyk7XG4gICAgICBkZXZpY2UuaXBhZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpcG9kKSB7XG4gICAgICBkZXZpY2Uub3NWZXJzaW9uID0gaXBvZFszXSA/IGlwb2RbM10ucmVwbGFjZSgvXy9nLCAnLicpIDogbnVsbDtcbiAgICAgIGRldmljZS5pcGhvbmUgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpT1MgOCsgY2hhbmdlZCBVQVxuICAgIGlmIChkZXZpY2UuaW9zICYmIGRldmljZS5vc1ZlcnNpb24gJiYgdWEuaW5kZXhPZignVmVyc2lvbi8nKSA+PSAwKSB7XG4gICAgICBpZiAoZGV2aWNlLm9zVmVyc2lvbi5zcGxpdCgnLicpWzBdID09PSAnMTAnKSB7XG4gICAgICAgIGRldmljZS5vc1ZlcnNpb24gPSB1YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCd2ZXJzaW9uLycpWzFdLnNwbGl0KCcgJylbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVza3RvcFxuICAgIGRldmljZS5kZXNrdG9wID0gIShkZXZpY2Uub3MgfHwgZGV2aWNlLmFuZHJvaWQgfHwgZGV2aWNlLndlYlZpZXcpO1xuXG4gICAgLy8gV2Vidmlld1xuICAgIGRldmljZS53ZWJWaWV3ID0gKGlwaG9uZSB8fCBpcGFkIHx8IGlwb2QpICYmIHVhLm1hdGNoKC8uKkFwcGxlV2ViS2l0KD8hLipTYWZhcmkpL2kpO1xuXG4gICAgLy8gTWluaW1hbCBVSVxuICAgIGlmIChkZXZpY2Uub3MgJiYgZGV2aWNlLm9zID09PSAnaW9zJykge1xuICAgICAgdmFyIG9zVmVyc2lvbkFyciA9IGRldmljZS5vc1ZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICAgIHZhciBtZXRhVmlld3BvcnQgPSBkb2MucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwidmlld3BvcnRcIl0nKTtcbiAgICAgIGRldmljZS5taW5pbWFsVWkgPSAhZGV2aWNlLndlYlZpZXdcbiAgICAgICAgJiYgKGlwb2QgfHwgaXBob25lKVxuICAgICAgICAmJiAob3NWZXJzaW9uQXJyWzBdICogMSA9PT0gNyA/IG9zVmVyc2lvbkFyclsxXSAqIDEgPj0gMSA6IG9zVmVyc2lvbkFyclswXSAqIDEgPiA3KVxuICAgICAgICAmJiBtZXRhVmlld3BvcnQgJiYgbWV0YVZpZXdwb3J0LmdldEF0dHJpYnV0ZSgnY29udGVudCcpLmluZGV4T2YoJ21pbmltYWwtdWknKSA+PSAwO1xuICAgIH1cblxuICAgIC8vIFBpeGVsIFJhdGlvXG4gICAgZGV2aWNlLnBpeGVsUmF0aW8gPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXG4gICAgLy8gRXhwb3J0IG9iamVjdFxuICAgIHJldHVybiBkZXZpY2U7XG4gIH0oKSk7XG5cbiAgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0IChldmVudCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzO1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSB7IGUgPSBlLm9yaWdpbmFsRXZlbnQ7IH1cbiAgICBkYXRhLmlzVG91Y2hFdmVudCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuICAgIGlmICghZGF0YS5pc1RvdWNoRXZlbnQgJiYgJ3doaWNoJyBpbiBlICYmIGUud2hpY2ggPT09IDMpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCFkYXRhLmlzVG91Y2hFdmVudCAmJiAnYnV0dG9uJyBpbiBlICYmIGUuYnV0dG9uID4gMCkgeyByZXR1cm47IH1cbiAgICBpZiAoZGF0YS5pc1RvdWNoZWQgJiYgZGF0YS5pc01vdmVkKSB7IHJldHVybjsgfVxuICAgIGlmIChwYXJhbXMubm9Td2lwaW5nICYmICQoZS50YXJnZXQpLmNsb3Nlc3QocGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yID8gcGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yIDogKFwiLlwiICsgKHBhcmFtcy5ub1N3aXBpbmdDbGFzcykpKVswXSkge1xuICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnN3aXBlSGFuZGxlcikge1xuICAgICAgaWYgKCEkKGUpLmNsb3Nlc3QocGFyYW1zLnN3aXBlSGFuZGxlcilbMF0pIHsgcmV0dXJuOyB9XG4gICAgfVxuXG4gICAgdG91Y2hlcy5jdXJyZW50WCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICB0b3VjaGVzLmN1cnJlbnRZID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIHZhciBzdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICAgIHZhciBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuXG4gICAgLy8gRG8gTk9UIHN0YXJ0IGlmIGlPUyBlZGdlIHN3aXBlIGlzIGRldGVjdGVkLiBPdGhlcndpc2UgaU9TIGFwcCAoVUlXZWJWaWV3KSBjYW5ub3Qgc3dpcGUtdG8tZ28tYmFjayBhbnltb3JlXG5cbiAgICB2YXIgZWRnZVN3aXBlRGV0ZWN0aW9uID0gcGFyYW1zLmVkZ2VTd2lwZURldGVjdGlvbiB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlRGV0ZWN0aW9uO1xuICAgIHZhciBlZGdlU3dpcGVUaHJlc2hvbGQgPSBwYXJhbXMuZWRnZVN3aXBlVGhyZXNob2xkIHx8IHBhcmFtcy5pT1NFZGdlU3dpcGVUaHJlc2hvbGQ7XG4gICAgaWYgKFxuICAgICAgZWRnZVN3aXBlRGV0ZWN0aW9uXG4gICAgICAmJiAoKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQpXG4gICAgICB8fCAoc3RhcnRYID49IHdpbi5zY3JlZW4ud2lkdGggLSBlZGdlU3dpcGVUaHJlc2hvbGQpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFV0aWxzLmV4dGVuZChkYXRhLCB7XG4gICAgICBpc1RvdWNoZWQ6IHRydWUsXG4gICAgICBpc01vdmVkOiBmYWxzZSxcbiAgICAgIGFsbG93VG91Y2hDYWxsYmFja3M6IHRydWUsXG4gICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgc3RhcnRNb3Zpbmc6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRvdWNoZXMuc3RhcnRYID0gc3RhcnRYO1xuICAgIHRvdWNoZXMuc3RhcnRZID0gc3RhcnRZO1xuICAgIGRhdGEudG91Y2hTdGFydFRpbWUgPSBVdGlscy5ub3coKTtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSB7IGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gZmFsc2U7IH1cbiAgICBpZiAoZS50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICBpZiAoJChlLnRhcmdldCkuaXMoZGF0YS5mb3JtRWxlbWVudHMpKSB7IHByZXZlbnREZWZhdWx0ID0gZmFsc2U7IH1cbiAgICAgIGlmIChcbiAgICAgICAgZG9jLmFjdGl2ZUVsZW1lbnRcbiAgICAgICAgJiYgJChkb2MuYWN0aXZlRWxlbWVudCkuaXMoZGF0YS5mb3JtRWxlbWVudHMpXG4gICAgICAgICYmIGRvYy5hY3RpdmVFbGVtZW50ICE9PSBlLnRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIGRvYy5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gcHJldmVudERlZmF1bHQgJiYgc3dpcGVyLmFsbG93VG91Y2hNb3ZlICYmIHBhcmFtcy50b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ7XG4gICAgICBpZiAocGFyYW1zLnRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0IHx8IHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3RvdWNoU3RhcnQnLCBlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hNb3ZlIChldmVudCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgdG91Y2hlcyA9IHN3aXBlci50b3VjaGVzO1xuICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgIHZhciBlID0gZXZlbnQ7XG4gICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9XG4gICAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgICAgaWYgKGRhdGEuc3RhcnRNb3ZpbmcgJiYgZGF0YS5pc1Njcm9sbGluZykge1xuICAgICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNUb3VjaEV2ZW50ICYmIGUudHlwZSA9PT0gJ21vdXNlbW92ZScpIHsgcmV0dXJuOyB9XG4gICAgdmFyIHBhZ2VYID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCA6IGUucGFnZVg7XG4gICAgdmFyIHBhZ2VZID0gZS50eXBlID09PSAndG91Y2htb3ZlJyA/IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSA6IGUucGFnZVk7XG4gICAgaWYgKGUucHJldmVudGVkQnlOZXN0ZWRTd2lwZXIpIHtcbiAgICAgIHRvdWNoZXMuc3RhcnRYID0gcGFnZVg7XG4gICAgICB0b3VjaGVzLnN0YXJ0WSA9IHBhZ2VZO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXN3aXBlci5hbGxvd1RvdWNoTW92ZSkge1xuICAgICAgLy8gaXNNb3ZlZCA9IHRydWU7XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgICAgaWYgKGRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICAgIFV0aWxzLmV4dGVuZCh0b3VjaGVzLCB7XG4gICAgICAgICAgc3RhcnRYOiBwYWdlWCxcbiAgICAgICAgICBzdGFydFk6IHBhZ2VZLFxuICAgICAgICAgIGN1cnJlbnRYOiBwYWdlWCxcbiAgICAgICAgICBjdXJyZW50WTogcGFnZVksXG4gICAgICAgIH0pO1xuICAgICAgICBkYXRhLnRvdWNoU3RhcnRUaW1lID0gVXRpbHMubm93KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBwYXJhbXMudG91Y2hSZWxlYXNlT25FZGdlcyAmJiAhcGFyYW1zLmxvb3ApIHtcbiAgICAgIGlmIChzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICAgIC8vIFZlcnRpY2FsXG4gICAgICAgIGlmIChcbiAgICAgICAgICAocGFnZVkgPCB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSlcbiAgICAgICAgICB8fCAocGFnZVkgPiB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIChwYWdlWCA8IHRvdWNoZXMuc3RhcnRYICYmIHN3aXBlci50cmFuc2xhdGUgPD0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpKVxuICAgICAgICB8fCAocGFnZVggPiB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBkb2MuYWN0aXZlRWxlbWVudCkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2MuYWN0aXZlRWxlbWVudCAmJiAkKGUudGFyZ2V0KS5pcyhkYXRhLmZvcm1FbGVtZW50cykpIHtcbiAgICAgICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlJywgZSk7XG4gICAgfVxuICAgIGlmIChlLnRhcmdldFRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEpIHsgcmV0dXJuOyB9XG5cbiAgICB0b3VjaGVzLmN1cnJlbnRYID0gcGFnZVg7XG4gICAgdG91Y2hlcy5jdXJyZW50WSA9IHBhZ2VZO1xuXG4gICAgdmFyIGRpZmZYID0gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYO1xuICAgIHZhciBkaWZmWSA9IHRvdWNoZXMuY3VycmVudFkgLSB0b3VjaGVzLnN0YXJ0WTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy50aHJlc2hvbGQgJiYgTWF0aC5zcXJ0KChNYXRoLnBvdyggZGlmZlgsIDIgKSkgKyAoTWF0aC5wb3coIGRpZmZZLCAyICkpKSA8IHN3aXBlci5wYXJhbXMudGhyZXNob2xkKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLmlzU2Nyb2xsaW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIHRvdWNoQW5nbGU7XG4gICAgICBpZiAoKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRZID09PSB0b3VjaGVzLnN0YXJ0WSkgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYgdG91Y2hlcy5jdXJyZW50WCA9PT0gdG91Y2hlcy5zdGFydFgpKSB7XG4gICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAoKGRpZmZYICogZGlmZlgpICsgKGRpZmZZICogZGlmZlkpID49IDI1KSB7XG4gICAgICAgICAgdG91Y2hBbmdsZSA9IChNYXRoLmF0YW4yKE1hdGguYWJzKGRpZmZZKSwgTWF0aC5hYnMoZGlmZlgpKSAqIDE4MCkgLyBNYXRoLlBJO1xuICAgICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUgOiAoOTAgLSB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhLnN0YXJ0TW92aW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRvdWNoZXMuY3VycmVudFggIT09IHRvdWNoZXMuc3RhcnRYIHx8IHRvdWNoZXMuY3VycmVudFkgIT09IHRvdWNoZXMuc3RhcnRZKSB7XG4gICAgICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5pc1Njcm9sbGluZykge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFkYXRhLnN0YXJ0TW92aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChwYXJhbXMudG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uICYmICFwYXJhbXMubmVzdGVkKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghZGF0YS5pc01vdmVkKSB7XG4gICAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIH1cbiAgICAgIGRhdGEuc3RhcnRUcmFuc2xhdGUgPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnRyaWdnZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQgdHJhbnNpdGlvbmVuZCcpO1xuICAgICAgfVxuICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7XG4gICAgICAvLyBHcmFiIEN1cnNvclxuICAgICAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdzbGlkZXJGaXJzdE1vdmUnLCBlKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlck1vdmUnLCBlKTtcbiAgICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuXG4gICAgdmFyIGRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBkaWZmWCA6IGRpZmZZO1xuICAgIHRvdWNoZXMuZGlmZiA9IGRpZmY7XG5cbiAgICBkaWZmICo9IHBhcmFtcy50b3VjaFJhdGlvO1xuICAgIGlmIChydGwpIHsgZGlmZiA9IC1kaWZmOyB9XG5cbiAgICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkaWZmICsgZGF0YS5zdGFydFRyYW5zbGF0ZTtcblxuICAgIHZhciBkaXNhYmxlUGFyZW50U3dpcGVyID0gdHJ1ZTtcbiAgICB2YXIgcmVzaXN0YW5jZVJhdGlvID0gcGFyYW1zLnJlc2lzdGFuY2VSYXRpbztcbiAgICBpZiAocGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgIHJlc2lzdGFuY2VSYXRpbyA9IDA7XG4gICAgfVxuICAgIGlmICgoZGlmZiA+IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSkge1xuICAgICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSB7IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IChzd2lwZXIubWluVHJhbnNsYXRlKCkgLSAxKSArIChNYXRoLnBvdyggKC1zd2lwZXIubWluVHJhbnNsYXRlKCkgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlICsgZGlmZiksIHJlc2lzdGFuY2VSYXRpbyApKTsgfVxuICAgIH0gZWxzZSBpZiAoZGlmZiA8IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLnJlc2lzdGFuY2UpIHsgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gKHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIDEpIC0gKE1hdGgucG93KCAoc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gZGF0YS5zdGFydFRyYW5zbGF0ZSAtIGRpZmYpLCByZXNpc3RhbmNlUmF0aW8gKSk7IH1cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlcikge1xuICAgICAgZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlciA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGlyZWN0aW9ucyBsb2Nrc1xuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgfVxuXG5cbiAgICAvLyBUaHJlc2hvbGRcbiAgICBpZiAocGFyYW1zLnRocmVzaG9sZCA+IDApIHtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmKSA+IHBhcmFtcy50aHJlc2hvbGQgfHwgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgICAgaWYgKCFkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgICAgIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlID0gdHJ1ZTtcbiAgICAgICAgICB0b3VjaGVzLnN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gICAgICAgICAgdG91Y2hlcy5zdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuICAgICAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgICAgICAgdG91Y2hlcy5kaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyYW1zLmZvbGxvd0ZpbmdlcikgeyByZXR1cm47IH1cblxuICAgIC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG4gICAgaWYgKHBhcmFtcy5mcmVlTW9kZSB8fCBwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyB8fCBwYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIC8vIFZlbG9jaXR5XG4gICAgICBpZiAoZGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3N0YXJ0WCcgOiAnc3RhcnRZJ10sXG4gICAgICAgICAgdGltZTogZGF0YS50b3VjaFN0YXJ0VGltZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdjdXJyZW50WCcgOiAnY3VycmVudFknXSxcbiAgICAgICAgdGltZTogVXRpbHMubm93KCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHByb2dyZXNzXG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7XG4gICAgLy8gVXBkYXRlIHRyYW5zbGF0ZVxuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVG91Y2hFbmQgKGV2ZW50KSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuXG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcztcbiAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZTtcbiAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgIHZhciBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQ7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuICAgIHZhciBlID0gZXZlbnQ7XG4gICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9XG4gICAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3RvdWNoRW5kJywgZSk7XG4gICAgfVxuICAgIGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcyA9IGZhbHNlO1xuICAgIGlmICghZGF0YS5pc1RvdWNoZWQpIHtcbiAgICAgIGlmIChkYXRhLmlzTW92ZWQgJiYgcGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoZmFsc2UpO1xuICAgICAgfVxuICAgICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJldHVybiBHcmFiIEN1cnNvclxuICAgIGlmIChwYXJhbXMuZ3JhYkN1cnNvciAmJiBkYXRhLmlzTW92ZWQgJiYgZGF0YS5pc1RvdWNoZWQgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcihmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gVGltZSBkaWZmXG4gICAgdmFyIHRvdWNoRW5kVGltZSA9IFV0aWxzLm5vdygpO1xuICAgIHZhciB0aW1lRGlmZiA9IHRvdWNoRW5kVGltZSAtIGRhdGEudG91Y2hTdGFydFRpbWU7XG5cbiAgICAvLyBUYXAsIGRvdWJsZVRhcCwgQ2xpY2tcbiAgICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUoZSk7XG4gICAgICBzd2lwZXIuZW1pdCgndGFwJywgZSk7XG4gICAgICBpZiAodGltZURpZmYgPCAzMDAgJiYgKHRvdWNoRW5kVGltZSAtIGRhdGEubGFzdENsaWNrVGltZSkgPiAzMDApIHtcbiAgICAgICAgaWYgKGRhdGEuY2xpY2tUaW1lb3V0KSB7IGNsZWFyVGltZW91dChkYXRhLmNsaWNrVGltZW91dCk7IH1cbiAgICAgICAgZGF0YS5jbGlja1RpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzd2lwZXIuZW1pdCgnY2xpY2snLCBlKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lRGlmZiA8IDMwMCAmJiAodG91Y2hFbmRUaW1lIC0gZGF0YS5sYXN0Q2xpY2tUaW1lKSA8IDMwMCkge1xuICAgICAgICBpZiAoZGF0YS5jbGlja1RpbWVvdXQpIHsgY2xlYXJUaW1lb3V0KGRhdGEuY2xpY2tUaW1lb3V0KTsgfVxuICAgICAgICBzd2lwZXIuZW1pdCgnZG91YmxlVGFwJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGF0YS5sYXN0Q2xpY2tUaW1lID0gVXRpbHMubm93KCk7XG4gICAgVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzd2lwZXIuZGVzdHJveWVkKSB7IHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTsgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhLmlzVG91Y2hlZCB8fCAhZGF0YS5pc01vdmVkIHx8ICFzd2lwZXIuc3dpcGVEaXJlY3Rpb24gfHwgdG91Y2hlcy5kaWZmID09PSAwIHx8IGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9PT0gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcblxuICAgIHZhciBjdXJyZW50UG9zO1xuICAgIGlmIChwYXJhbXMuZm9sbG93RmluZ2VyKSB7XG4gICAgICBjdXJyZW50UG9zID0gcnRsID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UG9zID0gLWRhdGEuY3VycmVudFRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICBpZiAoY3VycmVudFBvcyA8IC1zd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRQb3MgPiAtc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA8IHNuYXBHcmlkLmxlbmd0aCkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHNuYXBHcmlkLmxlbmd0aCAtIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW0pIHtcbiAgICAgICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmFyIGxhc3RNb3ZlRXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgICAgdmFyIHZlbG9jaXR5RXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG5cbiAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBsYXN0TW92ZUV2ZW50LnBvc2l0aW9uIC0gdmVsb2NpdHlFdmVudC5wb3NpdGlvbjtcbiAgICAgICAgICB2YXIgdGltZSA9IGxhc3RNb3ZlRXZlbnQudGltZSAtIHZlbG9jaXR5RXZlbnQudGltZTtcbiAgICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSBkaXN0YW5jZSAvIHRpbWU7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5IC89IDI7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKHN3aXBlci52ZWxvY2l0eSkgPCBwYXJhbXMuZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHkpIHtcbiAgICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMgaW1wbGllcyB0aGF0IHRoZSB1c2VyIHN0b3BwZWQgbW92aW5nIGEgZmluZ2VyIHRoZW4gcmVsZWFzZWQuXG4gICAgICAgICAgLy8gVGhlcmUgd291bGQgYmUgbm8gZXZlbnRzIHdpdGggZGlzdGFuY2UgemVybywgc28gdGhlIGxhc3QgZXZlbnQgaXMgc3RhbGUuXG4gICAgICAgICAgaWYgKHRpbWUgPiAxNTAgfHwgKFV0aWxzLm5vdygpIC0gbGFzdE1vdmVFdmVudC50aW1lKSA+IDMwMCkge1xuICAgICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBzd2lwZXIudmVsb2NpdHkgKj0gcGFyYW1zLmZyZWVNb2RlTW9tZW50dW1WZWxvY2l0eVJhdGlvO1xuXG4gICAgICAgIGRhdGEudmVsb2NpdGllcy5sZW5ndGggPSAwO1xuICAgICAgICB2YXIgbW9tZW50dW1EdXJhdGlvbiA9IDEwMDAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bVJhdGlvO1xuICAgICAgICB2YXIgbW9tZW50dW1EaXN0YW5jZSA9IHN3aXBlci52ZWxvY2l0eSAqIG1vbWVudHVtRHVyYXRpb247XG5cbiAgICAgICAgdmFyIG5ld1Bvc2l0aW9uID0gc3dpcGVyLnRyYW5zbGF0ZSArIG1vbWVudHVtRGlzdGFuY2U7XG4gICAgICAgIGlmIChydGwpIHsgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247IH1cblxuICAgICAgICB2YXIgZG9Cb3VuY2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIGFmdGVyQm91bmNlUG9zaXRpb247XG4gICAgICAgIHZhciBib3VuY2VBbW91bnQgPSBNYXRoLmFicyhzd2lwZXIudmVsb2NpdHkpICogMjAgKiBwYXJhbXMuZnJlZU1vZGVNb21lbnR1bUJvdW5jZVJhdGlvO1xuICAgICAgICB2YXIgbmVlZHNMb29wRml4O1xuICAgICAgICBpZiAobmV3UG9zaXRpb24gPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICAgIGlmIChuZXdQb3NpdGlvbiArIHN3aXBlci5tYXhUcmFuc2xhdGUoKSA8IC1ib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgICAgICAgICAgZG9Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJhbXMubG9vcCAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHsgbmVlZHNMb29wRml4ID0gdHJ1ZTsgfVxuICAgICAgICB9IGVsc2UgaWYgKG5ld1Bvc2l0aW9uID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZU1vbWVudHVtQm91bmNlKSB7XG4gICAgICAgICAgICBpZiAobmV3UG9zaXRpb24gLSBzd2lwZXIubWluVHJhbnNsYXRlKCkgPiBib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgKyBib3VuY2VBbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgICAgZG9Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJhbXMubG9vcCAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHsgbmVlZHNMb29wRml4ID0gdHJ1ZTsgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHZhciBuZXh0U2xpZGU7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzbmFwR3JpZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNuYXBHcmlkW2pdID4gLW5ld1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIG5leHRTbGlkZSA9IGo7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChNYXRoLmFicyhzbmFwR3JpZFtuZXh0U2xpZGVdIC0gbmV3UG9zaXRpb24pIDwgTWF0aC5hYnMoc25hcEdyaWRbbmV4dFNsaWRlIC0gMV0gLSBuZXdQb3NpdGlvbikgfHwgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc25hcEdyaWRbbmV4dFNsaWRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzbmFwR3JpZFtuZXh0U2xpZGUgLSAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWRzTG9vcEZpeCkge1xuICAgICAgICAgIHN3aXBlci5vbmNlKCd0cmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXggZHVyYXRpb25cbiAgICAgICAgaWYgKHN3aXBlci52ZWxvY2l0eSAhPT0gMCkge1xuICAgICAgICAgIGlmIChydGwpIHtcbiAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLmFicygoLW5ld1Bvc2l0aW9uIC0gc3dpcGVyLnRyYW5zbGF0ZSkgLyBzd2lwZXIudmVsb2NpdHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gTWF0aC5hYnMoKG5ld1Bvc2l0aW9uIC0gc3dpcGVyLnRyYW5zbGF0ZSkgLyBzd2lwZXIudmVsb2NpdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlTW9tZW50dW1Cb3VuY2UgJiYgZG9Cb3VuY2UpIHtcbiAgICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24obW9tZW50dW1EdXJhdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdQb3NpdGlvbik7XG4gICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydCh0cnVlLCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24pO1xuICAgICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgnbW9tZW50dW1Cb3VuY2UnKTtcblxuICAgICAgICAgICAgc3dpcGVyLnNldFRyYW5zaXRpb24ocGFyYW1zLnNwZWVkKTtcbiAgICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgICAgICAkd3JhcHBlckVsLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnZlbG9jaXR5KSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHRydWUsIHN3aXBlci5zd2lwZURpcmVjdGlvbik7XG4gICAgICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGVTdGlja3kpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXJhbXMuZnJlZU1vZGVNb21lbnR1bSB8fCB0aW1lRGlmZiA+PSBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGN1cnJlbnQgc2xpZGVcbiAgICB2YXIgc3RvcEluZGV4ID0gMDtcbiAgICB2YXIgZ3JvdXBTaXplID0gc3dpcGVyLnNsaWRlc1NpemVzR3JpZFswXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IHBhcmFtcy5zbGlkZXNQZXJHcm91cCkge1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXBdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoY3VycmVudFBvcyA+PSBzbGlkZXNHcmlkW2ldICYmIGN1cnJlbnRQb3MgPCBzbGlkZXNHcmlkW2kgKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXBdKSB7XG4gICAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgICBncm91cFNpemUgPSBzbGlkZXNHcmlkW2kgKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXBdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDFdIC0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbmQgY3VycmVudCBzbGlkZSBzaXplXG4gICAgdmFyIHJhdGlvID0gKGN1cnJlbnRQb3MgLSBzbGlkZXNHcmlkW3N0b3BJbmRleF0pIC8gZ3JvdXBTaXplO1xuXG4gICAgaWYgKHRpbWVEaWZmID4gcGFyYW1zLmxvbmdTd2lwZXNNcykge1xuICAgICAgLy8gTG9uZyB0b3VjaGVzXG4gICAgICBpZiAoIXBhcmFtcy5sb25nU3dpcGVzKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICBpZiAocmF0aW8gPj0gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXApOyB9XG4gICAgICAgIGVsc2UgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgaWYgKHJhdGlvID4gKDEgLSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSkgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBwYXJhbXMuc2xpZGVzUGVyR3JvdXApOyB9XG4gICAgICAgIGVsc2UgeyBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpOyB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNob3J0IHN3aXBlc1xuICAgICAgaWYgKCFwYXJhbXMuc2hvcnRTd2lwZXMpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJlc2l6ZSAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG5cbiAgICBpZiAoZWwgJiYgZWwub2Zmc2V0V2lkdGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAvLyBCcmVha3BvaW50c1xuICAgIGlmIChwYXJhbXMuYnJlYWtwb2ludHMpIHtcbiAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBsb2Nrc1xuICAgIHZhciBhbGxvd1NsaWRlTmV4dCA9IHN3aXBlci5hbGxvd1NsaWRlTmV4dDtcbiAgICB2YXIgYWxsb3dTbGlkZVByZXYgPSBzd2lwZXIuYWxsb3dTbGlkZVByZXY7XG4gICAgdmFyIHNuYXBHcmlkID0gc3dpcGVyLnNuYXBHcmlkO1xuXG4gICAgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG5cbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcblxuICAgIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIHZhciBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heChzd2lwZXIudHJhbnNsYXRlLCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpLCBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgICBpZiAocGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIGlmICgocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpICYmIHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3dpcGVyLmF1dG9wbGF5ICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIGxvY2tzIGFmdGVyIHJlc2l6ZVxuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IGFsbG93U2xpZGVQcmV2O1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzbmFwR3JpZCAhPT0gc3dpcGVyLnNuYXBHcmlkKSB7XG4gICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2sgKGUpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5hbGxvd0NsaWNrKSB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzKSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uICYmIHN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdHRhY2hFdmVudHMoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHRvdWNoRXZlbnRzID0gc3dpcGVyLnRvdWNoRXZlbnRzO1xuICAgIHZhciBlbCA9IHN3aXBlci5lbDtcbiAgICB2YXIgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbDtcblxuICAgIHtcbiAgICAgIHN3aXBlci5vblRvdWNoU3RhcnQgPSBvblRvdWNoU3RhcnQuYmluZChzd2lwZXIpO1xuICAgICAgc3dpcGVyLm9uVG91Y2hNb3ZlID0gb25Ub3VjaE1vdmUuYmluZChzd2lwZXIpO1xuICAgICAgc3dpcGVyLm9uVG91Y2hFbmQgPSBvblRvdWNoRW5kLmJpbmQoc3dpcGVyKTtcbiAgICB9XG5cbiAgICBzd2lwZXIub25DbGljayA9IG9uQ2xpY2suYmluZChzd2lwZXIpO1xuXG4gICAgdmFyIHRhcmdldCA9IHBhcmFtcy50b3VjaEV2ZW50c1RhcmdldCA9PT0gJ2NvbnRhaW5lcicgPyBlbCA6IHdyYXBwZXJFbDtcbiAgICB2YXIgY2FwdHVyZSA9ICEhcGFyYW1zLm5lc3RlZDtcblxuICAgIC8vIFRvdWNoIEV2ZW50c1xuICAgIHtcbiAgICAgIGlmICghU3VwcG9ydC50b3VjaCAmJiAoU3VwcG9ydC5wb2ludGVyRXZlbnRzIHx8IFN1cHBvcnQucHJlZml4ZWRQb2ludGVyRXZlbnRzKSkge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIGNhcHR1cmUpO1xuICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50cy5lbmQsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoU3VwcG9ydC50b3VjaCkge1xuICAgICAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSB0b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGNhcHR1cmUgfSA6IGNhcHR1cmUpO1xuICAgICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhRGV2aWNlLmlvcyAmJiAhRGV2aWNlLmFuZHJvaWQpIHx8IChwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiAhU3VwcG9ydC50b3VjaCAmJiBEZXZpY2UuaW9zKSkge1xuICAgICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBzd2lwZXIub25Ub3VjaEVuZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBQcmV2ZW50IExpbmtzIENsaWNrc1xuICAgICAgaWYgKHBhcmFtcy5wcmV2ZW50Q2xpY2tzIHx8IHBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24pIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3dpcGVyLm9uQ2xpY2ssIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2l6ZSBoYW5kbGVyXG4gICAgc3dpcGVyLm9uKChEZXZpY2UuaW9zIHx8IERldmljZS5hbmRyb2lkID8gJ3Jlc2l6ZSBvcmllbnRhdGlvbmNoYW5nZSBvYnNlcnZlclVwZGF0ZScgOiAncmVzaXplIG9ic2VydmVyVXBkYXRlJyksIG9uUmVzaXplLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICAgIHZhciB0b3VjaEV2ZW50cyA9IHN3aXBlci50b3VjaEV2ZW50cztcbiAgICB2YXIgZWwgPSBzd2lwZXIuZWw7XG4gICAgdmFyIHdyYXBwZXJFbCA9IHN3aXBlci53cmFwcGVyRWw7XG5cbiAgICB2YXIgdGFyZ2V0ID0gcGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnY29udGFpbmVyJyA/IGVsIDogd3JhcHBlckVsO1xuICAgIHZhciBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkO1xuXG4gICAgLy8gVG91Y2ggRXZlbnRzXG4gICAge1xuICAgICAgaWYgKCFTdXBwb3J0LnRvdWNoICYmIChTdXBwb3J0LnBvaW50ZXJFdmVudHMgfHwgU3VwcG9ydC5wcmVmaXhlZFBvaW50ZXJFdmVudHMpKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBmYWxzZSk7XG4gICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChTdXBwb3J0LnRvdWNoKSB7XG4gICAgICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IHRvdWNoRXZlbnRzLnN0YXJ0ID09PSAnb25Ub3VjaFN0YXJ0JyAmJiBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLnN0YXJ0LCBzd2lwZXIub25Ub3VjaFN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzLm1vdmUsIHN3aXBlci5vblRvdWNoTW92ZSwgY2FwdHVyZSk7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFEZXZpY2UuaW9zICYmICFEZXZpY2UuYW5kcm9pZCkgfHwgKHBhcmFtcy5zaW11bGF0ZVRvdWNoICYmICFTdXBwb3J0LnRvdWNoICYmIERldmljZS5pb3MpKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHN3aXBlci5vblRvdWNoU3RhcnQsIGZhbHNlKTtcbiAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHN3aXBlci5vblRvdWNoRW5kLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFByZXZlbnQgTGlua3MgQ2xpY2tzXG4gICAgICBpZiAocGFyYW1zLnByZXZlbnRDbGlja3MgfHwgcGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbikge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzd2lwZXIub25DbGljaywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzaXplIGhhbmRsZXJcbiAgICBzd2lwZXIub2ZmKChEZXZpY2UuaW9zIHx8IERldmljZS5hbmRyb2lkID8gJ3Jlc2l6ZSBvcmllbnRhdGlvbmNoYW5nZSBvYnNlcnZlclVwZGF0ZScgOiAncmVzaXplIG9ic2VydmVyVXBkYXRlJyksIG9uUmVzaXplKTtcbiAgfVxuXG4gIHZhciBldmVudHMgPSB7XG4gICAgYXR0YWNoRXZlbnRzOiBhdHRhY2hFdmVudHMsXG4gICAgZGV0YWNoRXZlbnRzOiBkZXRhY2hFdmVudHMsXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludCAoKSB7XG4gICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIHZhciBpbml0aWFsaXplZCA9IHN3aXBlci5pbml0aWFsaXplZDtcbiAgICB2YXIgbG9vcGVkU2xpZGVzID0gc3dpcGVyLmxvb3BlZFNsaWRlczsgaWYgKCBsb29wZWRTbGlkZXMgPT09IHZvaWQgMCApIGxvb3BlZFNsaWRlcyA9IDA7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIGJyZWFrcG9pbnRzID0gcGFyYW1zLmJyZWFrcG9pbnRzO1xuICAgIGlmICghYnJlYWtwb2ludHMgfHwgKGJyZWFrcG9pbnRzICYmIE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5sZW5ndGggPT09IDApKSB7IHJldHVybjsgfVxuXG4gICAgLy8gU2V0IGJyZWFrcG9pbnQgZm9yIHdpbmRvdyB3aWR0aCBhbmQgdXBkYXRlIHBhcmFtZXRlcnNcbiAgICB2YXIgYnJlYWtwb2ludCA9IHN3aXBlci5nZXRCcmVha3BvaW50KGJyZWFrcG9pbnRzKTtcblxuICAgIGlmIChicmVha3BvaW50ICYmIHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCAhPT0gYnJlYWtwb2ludCkge1xuICAgICAgdmFyIGJyZWFrcG9pbnRPbmx5UGFyYW1zID0gYnJlYWtwb2ludCBpbiBicmVha3BvaW50cyA/IGJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGJyZWFrcG9pbnRPbmx5UGFyYW1zKSB7XG4gICAgICAgIFsnc2xpZGVzUGVyVmlldycsICdzcGFjZUJldHdlZW4nLCAnc2xpZGVzUGVyR3JvdXAnXS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICAgIHZhciBwYXJhbVZhbHVlID0gYnJlYWtwb2ludE9ubHlQYXJhbXNbcGFyYW1dO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1WYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgaWYgKHBhcmFtID09PSAnc2xpZGVzUGVyVmlldycgJiYgKHBhcmFtVmFsdWUgPT09ICdBVVRPJyB8fCBwYXJhbVZhbHVlID09PSAnYXV0bycpKSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSAnYXV0byc7XG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ3NsaWRlc1BlclZpZXcnKSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSBwYXJzZUZsb2F0KHBhcmFtVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBicmVha3BvaW50T25seVBhcmFtc1twYXJhbV0gPSBwYXJzZUludChwYXJhbVZhbHVlLCAxMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJyZWFrcG9pbnRQYXJhbXMgPSBicmVha3BvaW50T25seVBhcmFtcyB8fCBzd2lwZXIub3JpZ2luYWxQYXJhbXM7XG4gICAgICB2YXIgZGlyZWN0aW9uQ2hhbmdlZCA9IGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICYmIGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICE9PSBwYXJhbXMuZGlyZWN0aW9uO1xuICAgICAgdmFyIG5lZWRzUmVMb29wID0gcGFyYW1zLmxvb3AgJiYgKGJyZWFrcG9pbnRQYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gcGFyYW1zLnNsaWRlc1BlclZpZXcgfHwgZGlyZWN0aW9uQ2hhbmdlZCk7XG5cbiAgICAgIGlmIChkaXJlY3Rpb25DaGFuZ2VkICYmIGluaXRpYWxpemVkKSB7XG4gICAgICAgIHN3aXBlci5jaGFuZ2VEaXJlY3Rpb24oKTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIGJyZWFrcG9pbnRQYXJhbXMpO1xuXG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGFsbG93VG91Y2hNb3ZlOiBzd2lwZXIucGFyYW1zLmFsbG93VG91Y2hNb3ZlLFxuICAgICAgICBhbGxvd1NsaWRlTmV4dDogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlTmV4dCxcbiAgICAgICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXYsXG4gICAgICB9KTtcblxuICAgICAgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludDtcblxuICAgICAgaWYgKG5lZWRzUmVMb29wICYmIGluaXRpYWxpemVkKSB7XG4gICAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKChhY3RpdmVJbmRleCAtIGxvb3BlZFNsaWRlcykgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdicmVha3BvaW50JywgYnJlYWtwb2ludFBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludCAoYnJlYWtwb2ludHMpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93IHdpZHRoXG4gICAgaWYgKCFicmVha3BvaW50cykgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgdmFyIGJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgICB2YXIgcG9pbnRzID0gW107XG4gICAgT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLmZvckVhY2goZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgICBwb2ludHMucHVzaChwb2ludCk7XG4gICAgfSk7XG4gICAgcG9pbnRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHBhcnNlSW50KGEsIDEwKSAtIHBhcnNlSW50KGIsIDEwKTsgfSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBwb2ludCA9IHBvaW50c1tpXTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzSW52ZXJzZSkge1xuICAgICAgICBpZiAocG9pbnQgPD0gd2luLmlubmVyV2lkdGgpIHtcbiAgICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocG9pbnQgPj0gd2luLmlubmVyV2lkdGggJiYgIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgYnJlYWtwb2ludCA9IHBvaW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnJlYWtwb2ludCB8fCAnbWF4JztcbiAgfVxuXG4gIHZhciBicmVha3BvaW50cyA9IHsgc2V0QnJlYWtwb2ludDogc2V0QnJlYWtwb2ludCwgZ2V0QnJlYWtwb2ludDogZ2V0QnJlYWtwb2ludCB9O1xuXG4gIGZ1bmN0aW9uIGFkZENsYXNzZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciBjbGFzc05hbWVzID0gc3dpcGVyLmNsYXNzTmFtZXM7XG4gICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgdmFyIHJ0bCA9IHN3aXBlci5ydGw7XG4gICAgdmFyICRlbCA9IHN3aXBlci4kZWw7XG4gICAgdmFyIHN1ZmZpeGVzID0gW107XG5cbiAgICBzdWZmaXhlcy5wdXNoKCdpbml0aWFsaXplZCcpO1xuICAgIHN1ZmZpeGVzLnB1c2gocGFyYW1zLmRpcmVjdGlvbik7XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdmcmVlLW1vZGUnKTtcbiAgICB9XG4gICAgaWYgKCFTdXBwb3J0LmZsZXhib3gpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ25vLWZsZXhib3gnKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKCdhdXRvaGVpZ2h0Jyk7XG4gICAgfVxuICAgIGlmIChydGwpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ3J0bCcpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlckNvbHVtbiA+IDEpIHtcbiAgICAgIHN1ZmZpeGVzLnB1c2goJ211bHRpcm93Jyk7XG4gICAgfVxuICAgIGlmIChEZXZpY2UuYW5kcm9pZCkge1xuICAgICAgc3VmZml4ZXMucHVzaCgnYW5kcm9pZCcpO1xuICAgIH1cbiAgICBpZiAoRGV2aWNlLmlvcykge1xuICAgICAgc3VmZml4ZXMucHVzaCgnaW9zJyk7XG4gICAgfVxuICAgIC8vIFdQOCBUb3VjaCBFdmVudHMgRml4XG4gICAgaWYgKChCcm93c2VyLmlzSUUgfHwgQnJvd3Nlci5pc0VkZ2UpICYmIChTdXBwb3J0LnBvaW50ZXJFdmVudHMgfHwgU3VwcG9ydC5wcmVmaXhlZFBvaW50ZXJFdmVudHMpKSB7XG4gICAgICBzdWZmaXhlcy5wdXNoKChcIndwOC1cIiArIChwYXJhbXMuZGlyZWN0aW9uKSkpO1xuICAgIH1cblxuICAgIHN1ZmZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzICsgc3VmZml4KTtcbiAgICB9KTtcblxuICAgICRlbC5hZGRDbGFzcyhjbGFzc05hbWVzLmpvaW4oJyAnKSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDbGFzc2VzICgpIHtcbiAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICB2YXIgY2xhc3NOYW1lcyA9IHN3aXBlci5jbGFzc05hbWVzO1xuXG4gICAgJGVsLnJlbW92ZUNsYXNzKGNsYXNzTmFtZXMuam9pbignICcpKTtcbiAgfVxuXG4gIHZhciBjbGFzc2VzID0geyBhZGRDbGFzc2VzOiBhZGRDbGFzc2VzLCByZW1vdmVDbGFzc2VzOiByZW1vdmVDbGFzc2VzIH07XG5cbiAgZnVuY3Rpb24gbG9hZEltYWdlIChpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGltYWdlO1xuICAgIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfVxuICAgIH1cbiAgICBpZiAoIWltYWdlRWwuY29tcGxldGUgfHwgIWNoZWNrRm9yQ29tcGxldGUpIHtcbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgaW1hZ2UgPSBuZXcgd2luLkltYWdlKCk7XG4gICAgICAgIGltYWdlLm9ubG9hZCA9IG9uUmVhZHk7XG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBvblJlYWR5O1xuICAgICAgICBpZiAoc2l6ZXMpIHtcbiAgICAgICAgICBpbWFnZS5zaXplcyA9IHNpemVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgICBpbWFnZS5zcmNzZXQgPSBzcmNzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgIGltYWdlLnNyYyA9IHNyYztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25SZWFkeSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbWFnZSBhbHJlYWR5IGxvYWRlZC4uLlxuICAgICAgb25SZWFkeSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWxvYWRJbWFnZXMgKCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5pbWFnZXNUb0xvYWQgPSBzd2lwZXIuJGVsLmZpbmQoJ2ltZycpO1xuICAgIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgICBpZiAodHlwZW9mIHN3aXBlciA9PT0gJ3VuZGVmaW5lZCcgfHwgc3dpcGVyID09PSBudWxsIHx8ICFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChzd2lwZXIuaW1hZ2VzTG9hZGVkICE9PSB1bmRlZmluZWQpIHsgc3dpcGVyLmltYWdlc0xvYWRlZCArPSAxOyB9XG4gICAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCA9PT0gc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMudXBkYXRlT25JbWFnZXNSZWFkeSkgeyBzd2lwZXIudXBkYXRlKCk7IH1cbiAgICAgICAgc3dpcGVyLmVtaXQoJ2ltYWdlc1JlYWR5Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIGltYWdlRWwgPSBzd2lwZXIuaW1hZ2VzVG9Mb2FkW2ldO1xuICAgICAgc3dpcGVyLmxvYWRJbWFnZShcbiAgICAgICAgaW1hZ2VFbCxcbiAgICAgICAgaW1hZ2VFbC5jdXJyZW50U3JjIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzcmMnKSxcbiAgICAgICAgaW1hZ2VFbC5zcmNzZXQgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpLFxuICAgICAgICBpbWFnZUVsLnNpemVzIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzaXplcycpLFxuICAgICAgICB0cnVlLFxuICAgICAgICBvblJlYWR5XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbWFnZXMgPSB7XG4gICAgbG9hZEltYWdlOiBsb2FkSW1hZ2UsXG4gICAgcHJlbG9hZEltYWdlczogcHJlbG9hZEltYWdlcyxcbiAgfTtcblxuICBmdW5jdGlvbiBjaGVja092ZXJmbG93KCkge1xuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHZhciB3YXNMb2NrZWQgPSBzd2lwZXIuaXNMb2NrZWQ7XG5cbiAgICBzd2lwZXIuaXNMb2NrZWQgPSBzd2lwZXIuc25hcEdyaWQubGVuZ3RoID09PSAxO1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9ICFzd2lwZXIuaXNMb2NrZWQ7XG4gICAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gIXN3aXBlci5pc0xvY2tlZDtcblxuICAgIC8vIGV2ZW50c1xuICAgIGlmICh3YXNMb2NrZWQgIT09IHN3aXBlci5pc0xvY2tlZCkgeyBzd2lwZXIuZW1pdChzd2lwZXIuaXNMb2NrZWQgPyAnbG9jaycgOiAndW5sb2NrJyk7IH1cblxuICAgIGlmICh3YXNMb2NrZWQgJiYgd2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHtcbiAgICAgIHN3aXBlci5pc0VuZCA9IGZhbHNlO1xuICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoZWNrT3ZlcmZsb3ckMSA9IHsgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvdyB9O1xuXG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBpbml0OiB0cnVlLFxuICAgIGRpcmVjdGlvbjogJ2hvcml6b250YWwnLFxuICAgIHRvdWNoRXZlbnRzVGFyZ2V0OiAnY29udGFpbmVyJyxcbiAgICBpbml0aWFsU2xpZGU6IDAsXG4gICAgc3BlZWQ6IDMwMCxcbiAgICAvL1xuICAgIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG5cbiAgICAvLyBUbyBzdXBwb3J0IGlPUydzIHN3aXBlLXRvLWdvLWJhY2sgZ2VzdHVyZSAod2hlbiBiZWluZyB1c2VkIGluLWFwcCwgd2l0aCBVSVdlYlZpZXcpLlxuICAgIGVkZ2VTd2lwZURldGVjdGlvbjogZmFsc2UsXG4gICAgZWRnZVN3aXBlVGhyZXNob2xkOiAyMCxcblxuICAgIC8vIEZyZWUgbW9kZVxuICAgIGZyZWVNb2RlOiBmYWxzZSxcbiAgICBmcmVlTW9kZU1vbWVudHVtOiB0cnVlLFxuICAgIGZyZWVNb2RlTW9tZW50dW1SYXRpbzogMSxcbiAgICBmcmVlTW9kZU1vbWVudHVtQm91bmNlOiB0cnVlLFxuICAgIGZyZWVNb2RlTW9tZW50dW1Cb3VuY2VSYXRpbzogMSxcbiAgICBmcmVlTW9kZU1vbWVudHVtVmVsb2NpdHlSYXRpbzogMSxcbiAgICBmcmVlTW9kZVN0aWNreTogZmFsc2UsXG4gICAgZnJlZU1vZGVNaW5pbXVtVmVsb2NpdHk6IDAuMDIsXG5cbiAgICAvLyBBdXRvaGVpZ2h0XG4gICAgYXV0b0hlaWdodDogZmFsc2UsXG5cbiAgICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICAgIHNldFdyYXBwZXJTaXplOiBmYWxzZSxcblxuICAgIC8vIFZpcnR1YWwgVHJhbnNsYXRlXG4gICAgdmlydHVhbFRyYW5zbGF0ZTogZmFsc2UsXG5cbiAgICAvLyBFZmZlY3RzXG4gICAgZWZmZWN0OiAnc2xpZGUnLCAvLyAnc2xpZGUnIG9yICdmYWRlJyBvciAnY3ViZScgb3IgJ2NvdmVyZmxvdycgb3IgJ2ZsaXAnXG5cbiAgICAvLyBCcmVha3BvaW50c1xuICAgIGJyZWFrcG9pbnRzOiB1bmRlZmluZWQsXG4gICAgYnJlYWtwb2ludHNJbnZlcnNlOiBmYWxzZSxcblxuICAgIC8vIFNsaWRlcyBncmlkXG4gICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgc2xpZGVzUGVyQ29sdW1uOiAxLFxuICAgIHNsaWRlc1BlckNvbHVtbkZpbGw6ICdjb2x1bW4nLFxuICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICBzbGlkZXNPZmZzZXRCZWZvcmU6IDAsIC8vIGluIHB4XG4gICAgc2xpZGVzT2Zmc2V0QWZ0ZXI6IDAsIC8vIGluIHB4XG4gICAgbm9ybWFsaXplU2xpZGVJbmRleDogdHJ1ZSxcbiAgICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IGZhbHNlLFxuXG4gICAgLy8gRGlzYWJsZSBzd2lwZXIgYW5kIGhpZGUgbmF2aWdhdGlvbiB3aGVuIGNvbnRhaW5lciBub3Qgb3ZlcmZsb3dcbiAgICB3YXRjaE92ZXJmbG93OiBmYWxzZSxcblxuICAgIC8vIFJvdW5kIGxlbmd0aFxuICAgIHJvdW5kTGVuZ3RoczogZmFsc2UsXG5cbiAgICAvLyBUb3VjaGVzXG4gICAgdG91Y2hSYXRpbzogMSxcbiAgICB0b3VjaEFuZ2xlOiA0NSxcbiAgICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICAgIHNob3J0U3dpcGVzOiB0cnVlLFxuICAgIGxvbmdTd2lwZXM6IHRydWUsXG4gICAgbG9uZ1N3aXBlc1JhdGlvOiAwLjUsXG4gICAgbG9uZ1N3aXBlc01zOiAzMDAsXG4gICAgZm9sbG93RmluZ2VyOiB0cnVlLFxuICAgIGFsbG93VG91Y2hNb3ZlOiB0cnVlLFxuICAgIHRocmVzaG9sZDogMCxcbiAgICB0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb246IHRydWUsXG4gICAgdG91Y2hTdGFydFByZXZlbnREZWZhdWx0OiB0cnVlLFxuICAgIHRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0OiBmYWxzZSxcbiAgICB0b3VjaFJlbGVhc2VPbkVkZ2VzOiBmYWxzZSxcblxuICAgIC8vIFVuaXF1ZSBOYXZpZ2F0aW9uIEVsZW1lbnRzXG4gICAgdW5pcXVlTmF2RWxlbWVudHM6IHRydWUsXG5cbiAgICAvLyBSZXNpc3RhbmNlXG4gICAgcmVzaXN0YW5jZTogdHJ1ZSxcbiAgICByZXNpc3RhbmNlUmF0aW86IDAuODUsXG5cbiAgICAvLyBQcm9ncmVzc1xuICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IGZhbHNlLFxuICAgIHdhdGNoU2xpZGVzVmlzaWJpbGl0eTogZmFsc2UsXG5cbiAgICAvLyBDdXJzb3JcbiAgICBncmFiQ3Vyc29yOiBmYWxzZSxcblxuICAgIC8vIENsaWNrc1xuICAgIHByZXZlbnRDbGlja3M6IHRydWUsXG4gICAgcHJldmVudENsaWNrc1Byb3BhZ2F0aW9uOiB0cnVlLFxuICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuXG4gICAgLy8gSW1hZ2VzXG4gICAgcHJlbG9hZEltYWdlczogdHJ1ZSxcbiAgICB1cGRhdGVPbkltYWdlc1JlYWR5OiB0cnVlLFxuXG4gICAgLy8gbG9vcFxuICAgIGxvb3A6IGZhbHNlLFxuICAgIGxvb3BBZGRpdGlvbmFsU2xpZGVzOiAwLFxuICAgIGxvb3BlZFNsaWRlczogbnVsbCxcbiAgICBsb29wRmlsbEdyb3VwV2l0aEJsYW5rOiBmYWxzZSxcblxuICAgIC8vIFN3aXBpbmcvbm8gc3dpcGluZ1xuICAgIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICAgIGFsbG93U2xpZGVOZXh0OiB0cnVlLFxuICAgIHN3aXBlSGFuZGxlcjogbnVsbCwgLy8gJy5zd2lwZS1oYW5kbGVyJyxcbiAgICBub1N3aXBpbmc6IHRydWUsXG4gICAgbm9Td2lwaW5nQ2xhc3M6ICdzd2lwZXItbm8tc3dpcGluZycsXG4gICAgbm9Td2lwaW5nU2VsZWN0b3I6IG51bGwsXG5cbiAgICAvLyBQYXNzaXZlIExpc3RlbmVyc1xuICAgIHBhc3NpdmVMaXN0ZW5lcnM6IHRydWUsXG5cbiAgICAvLyBOU1xuICAgIGNvbnRhaW5lck1vZGlmaWVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLScsIC8vIE5FV1xuICAgIHNsaWRlQ2xhc3M6ICdzd2lwZXItc2xpZGUnLFxuICAgIHNsaWRlQmxhbmtDbGFzczogJ3N3aXBlci1zbGlkZS1pbnZpc2libGUtYmxhbmsnLFxuICAgIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgICBzbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1hY3RpdmUnLFxuICAgIHNsaWRlVmlzaWJsZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXZpc2libGUnLFxuICAgIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgICBzbGlkZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1uZXh0JyxcbiAgICBzbGlkZUR1cGxpY2F0ZU5leHRDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtbmV4dCcsXG4gICAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gICAgc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlLXByZXYnLFxuICAgIHdyYXBwZXJDbGFzczogJ3N3aXBlci13cmFwcGVyJyxcblxuICAgIC8vIENhbGxiYWNrc1xuICAgIHJ1bkNhbGxiYWNrc09uSW5pdDogdHJ1ZSxcbiAgfTtcblxuICAvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IFwib2ZmXCIgKi9cblxuICB2YXIgcHJvdG90eXBlcyA9IHtcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICB0cmFuc2xhdGU6IHRyYW5zbGF0ZSxcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uJDEsXG4gICAgc2xpZGU6IHNsaWRlLFxuICAgIGxvb3A6IGxvb3AsXG4gICAgZ3JhYkN1cnNvcjogZ3JhYkN1cnNvcixcbiAgICBtYW5pcHVsYXRpb246IG1hbmlwdWxhdGlvbixcbiAgICBldmVudHM6IGV2ZW50cyxcbiAgICBicmVha3BvaW50czogYnJlYWtwb2ludHMsXG4gICAgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvdyQxLFxuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgaW1hZ2VzOiBpbWFnZXMsXG4gIH07XG5cbiAgdmFyIGV4dGVuZGVkRGVmYXVsdHMgPSB7fTtcblxuICB2YXIgU3dpcGVyID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoU3dpcGVyQ2xhc3MpIHtcbiAgICBmdW5jdGlvbiBTd2lwZXIoKSB7XG4gICAgICB2YXIgYXNzaWduO1xuXG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgIHZhciBlbDtcbiAgICAgIHZhciBwYXJhbXM7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXS5jb25zdHJ1Y3RvciAmJiBhcmdzWzBdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIChhc3NpZ24gPSBhcmdzLCBlbCA9IGFzc2lnblswXSwgcGFyYW1zID0gYXNzaWduWzFdKTtcbiAgICAgIH1cbiAgICAgIGlmICghcGFyYW1zKSB7IHBhcmFtcyA9IHt9OyB9XG5cbiAgICAgIHBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICAgIGlmIChlbCAmJiAhcGFyYW1zLmVsKSB7IHBhcmFtcy5lbCA9IGVsOyB9XG5cbiAgICAgIFN3aXBlckNsYXNzLmNhbGwodGhpcywgcGFyYW1zKTtcblxuICAgICAgT2JqZWN0LmtleXMocHJvdG90eXBlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvdG90eXBlR3JvdXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMocHJvdG90eXBlc1twcm90b3R5cGVHcm91cF0pLmZvckVhY2goZnVuY3Rpb24gKHByb3RvTWV0aG9kKSB7XG4gICAgICAgICAgaWYgKCFTd2lwZXIucHJvdG90eXBlW3Byb3RvTWV0aG9kXSkge1xuICAgICAgICAgICAgU3dpcGVyLnByb3RvdHlwZVtwcm90b01ldGhvZF0gPSBwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXVtwcm90b01ldGhvZF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTd2lwZXIgSW5zdGFuY2VcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIubW9kdWxlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc3dpcGVyLm1vZHVsZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5rZXlzKHN3aXBlci5tb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBzd2lwZXIubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgaWYgKG1vZHVsZS5wYXJhbXMpIHtcbiAgICAgICAgICB2YXIgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMobW9kdWxlLnBhcmFtcylbMF07XG4gICAgICAgICAgdmFyIG1vZHVsZVBhcmFtcyA9IG1vZHVsZS5wYXJhbXNbbW9kdWxlUGFyYW1OYW1lXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZVBhcmFtcyAhPT0gJ29iamVjdCcgfHwgbW9kdWxlUGFyYW1zID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgICAgIGlmICghKG1vZHVsZVBhcmFtTmFtZSBpbiBwYXJhbXMgJiYgJ2VuYWJsZWQnIGluIG1vZHVsZVBhcmFtcykpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgaWYgKHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID09PSB0cnVlKSB7XG4gICAgICAgICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHsgZW5hYmxlZDogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09ICdvYmplY3QnXG4gICAgICAgICAgICAmJiAhKCdlbmFibGVkJyBpbiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdKSB7IHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0geyBlbmFibGVkOiBmYWxzZSB9OyB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBtb2R1bGVzIHBhcmFtc1xuICAgICAgdmFyIHN3aXBlclBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgZGVmYXVsdHMpO1xuICAgICAgc3dpcGVyLnVzZU1vZHVsZXNQYXJhbXMoc3dpcGVyUGFyYW1zKTtcblxuICAgICAgLy8gRXh0ZW5kIGRlZmF1bHRzIHdpdGggcGFzc2VkIHBhcmFtc1xuICAgICAgc3dpcGVyLnBhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgc3dpcGVyUGFyYW1zLCBleHRlbmRlZERlZmF1bHRzLCBwYXJhbXMpO1xuICAgICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zID0gVXRpbHMuZXh0ZW5kKHt9LCBzd2lwZXIucGFyYW1zKTtcbiAgICAgIHN3aXBlci5wYXNzZWRQYXJhbXMgPSBVdGlscy5leHRlbmQoe30sIHBhcmFtcyk7XG5cbiAgICAgIC8vIFNhdmUgRG9tIGxpYlxuICAgICAgc3dpcGVyLiQgPSAkO1xuXG4gICAgICAvLyBGaW5kIGVsXG4gICAgICB2YXIgJGVsID0gJChzd2lwZXIucGFyYW1zLmVsKTtcbiAgICAgIGVsID0gJGVsWzBdO1xuXG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICgkZWwubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgc3dpcGVycyA9IFtdO1xuICAgICAgICAkZWwuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGNvbnRhaW5lckVsKSB7XG4gICAgICAgICAgdmFyIG5ld1BhcmFtcyA9IFV0aWxzLmV4dGVuZCh7fSwgcGFyYW1zLCB7IGVsOiBjb250YWluZXJFbCB9KTtcbiAgICAgICAgICBzd2lwZXJzLnB1c2gobmV3IFN3aXBlcihuZXdQYXJhbXMpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzd2lwZXJzO1xuICAgICAgfVxuXG4gICAgICBlbC5zd2lwZXIgPSBzd2lwZXI7XG4gICAgICAkZWwuZGF0YSgnc3dpcGVyJywgc3dpcGVyKTtcblxuICAgICAgLy8gRmluZCBXcmFwcGVyXG4gICAgICB2YXIgJHdyYXBwZXJFbCA9ICRlbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3MpKSk7XG5cbiAgICAgIC8vIEV4dGVuZCBTd2lwZXJcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgJGVsOiAkZWwsXG4gICAgICAgIGVsOiBlbCxcbiAgICAgICAgJHdyYXBwZXJFbDogJHdyYXBwZXJFbCxcbiAgICAgICAgd3JhcHBlckVsOiAkd3JhcHBlckVsWzBdLFxuXG4gICAgICAgIC8vIENsYXNzZXNcbiAgICAgICAgY2xhc3NOYW1lczogW10sXG5cbiAgICAgICAgLy8gU2xpZGVzXG4gICAgICAgIHNsaWRlczogJCgpLFxuICAgICAgICBzbGlkZXNHcmlkOiBbXSxcbiAgICAgICAgc25hcEdyaWQ6IFtdLFxuICAgICAgICBzbGlkZXNTaXplc0dyaWQ6IFtdLFxuXG4gICAgICAgIC8vIGlzRGlyZWN0aW9uXG4gICAgICAgIGlzSG9yaXpvbnRhbDogZnVuY3Rpb24gaXNIb3Jpem9udGFsKCkge1xuICAgICAgICAgIHJldHVybiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgICB9LFxuICAgICAgICBpc1ZlcnRpY2FsOiBmdW5jdGlvbiBpc1ZlcnRpY2FsKCkge1xuICAgICAgICAgIHJldHVybiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUlRMXG4gICAgICAgIHJ0bDogKGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCAkZWwuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcpLFxuICAgICAgICBydGxUcmFuc2xhdGU6IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgKGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCAkZWwuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcpLFxuICAgICAgICB3cm9uZ1JUTDogJHdyYXBwZXJFbC5jc3MoJ2Rpc3BsYXknKSA9PT0gJy13ZWJraXQtYm94JyxcblxuICAgICAgICAvLyBJbmRleGVzXG4gICAgICAgIGFjdGl2ZUluZGV4OiAwLFxuICAgICAgICByZWFsSW5kZXg6IDAsXG5cbiAgICAgICAgLy9cbiAgICAgICAgaXNCZWdpbm5pbmc6IHRydWUsXG4gICAgICAgIGlzRW5kOiBmYWxzZSxcblxuICAgICAgICAvLyBQcm9wc1xuICAgICAgICB0cmFuc2xhdGU6IDAsXG4gICAgICAgIHByZXZpb3VzVHJhbnNsYXRlOiAwLFxuICAgICAgICBwcm9ncmVzczogMCxcbiAgICAgICAgdmVsb2NpdHk6IDAsXG4gICAgICAgIGFuaW1hdGluZzogZmFsc2UsXG5cbiAgICAgICAgLy8gTG9ja3NcbiAgICAgICAgYWxsb3dTbGlkZU5leHQ6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZU5leHQsXG4gICAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuXG4gICAgICAgIC8vIFRvdWNoIEV2ZW50c1xuICAgICAgICB0b3VjaEV2ZW50czogKGZ1bmN0aW9uIHRvdWNoRXZlbnRzKCkge1xuICAgICAgICAgIHZhciB0b3VjaCA9IFsndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnXTtcbiAgICAgICAgICB2YXIgZGVza3RvcCA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJ107XG4gICAgICAgICAgaWYgKFN1cHBvcnQucG9pbnRlckV2ZW50cykge1xuICAgICAgICAgICAgZGVza3RvcCA9IFsncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJ107XG4gICAgICAgICAgfSBlbHNlIGlmIChTdXBwb3J0LnByZWZpeGVkUG9pbnRlckV2ZW50cykge1xuICAgICAgICAgICAgZGVza3RvcCA9IFsnTVNQb2ludGVyRG93bicsICdNU1BvaW50ZXJNb3ZlJywgJ01TUG9pbnRlclVwJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXBlci50b3VjaEV2ZW50c1RvdWNoID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHRvdWNoWzBdLFxuICAgICAgICAgICAgbW92ZTogdG91Y2hbMV0sXG4gICAgICAgICAgICBlbmQ6IHRvdWNoWzJdLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzRGVza3RvcCA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBkZXNrdG9wWzBdLFxuICAgICAgICAgICAgbW92ZTogZGVza3RvcFsxXSxcbiAgICAgICAgICAgIGVuZDogZGVza3RvcFsyXSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBTdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggPyBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCA6IHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3A7XG4gICAgICAgIH0oKSksXG4gICAgICAgIHRvdWNoRXZlbnRzRGF0YToge1xuICAgICAgICAgIGlzVG91Y2hlZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTW92ZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhbGxvd1RvdWNoQ2FsbGJhY2tzOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG91Y2hTdGFydFRpbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgICAgIGN1cnJlbnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydFRyYW5zbGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGFsbG93VGhyZXNob2xkTW92ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIC8vIEZvcm0gZWxlbWVudHMgdG8gbWF0Y2hcbiAgICAgICAgICBmb3JtRWxlbWVudHM6ICdpbnB1dCwgc2VsZWN0LCBvcHRpb24sIHRleHRhcmVhLCBidXR0b24sIHZpZGVvJyxcbiAgICAgICAgICAvLyBMYXN0IGNsaWNrIHRpbWVcbiAgICAgICAgICBsYXN0Q2xpY2tUaW1lOiBVdGlscy5ub3coKSxcbiAgICAgICAgICBjbGlja1RpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAvLyBWZWxvY2l0aWVzXG4gICAgICAgICAgdmVsb2NpdGllczogW10sXG4gICAgICAgICAgYWxsb3dNb21lbnR1bUJvdW5jZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzVG91Y2hFdmVudDogdW5kZWZpbmVkLFxuICAgICAgICAgIHN0YXJ0TW92aW5nOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gQ2xpY2tzXG4gICAgICAgIGFsbG93Q2xpY2s6IHRydWUsXG5cbiAgICAgICAgLy8gVG91Y2hlc1xuICAgICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcblxuICAgICAgICB0b3VjaGVzOiB7XG4gICAgICAgICAgc3RhcnRYOiAwLFxuICAgICAgICAgIHN0YXJ0WTogMCxcbiAgICAgICAgICBjdXJyZW50WDogMCxcbiAgICAgICAgICBjdXJyZW50WTogMCxcbiAgICAgICAgICBkaWZmOiAwLFxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIEltYWdlc1xuICAgICAgICBpbWFnZXNUb0xvYWQ6IFtdLFxuICAgICAgICBpbWFnZXNMb2FkZWQ6IDAsXG5cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbnN0YWxsIE1vZHVsZXNcbiAgICAgIHN3aXBlci51c2VNb2R1bGVzKCk7XG5cbiAgICAgIC8vIEluaXRcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmluaXQpIHtcbiAgICAgICAgc3dpcGVyLmluaXQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuICAgICAgcmV0dXJuIHN3aXBlcjtcbiAgICB9XG5cbiAgICBpZiAoIFN3aXBlckNsYXNzICkgU3dpcGVyLl9fcHJvdG9fXyA9IFN3aXBlckNsYXNzO1xuICAgIFN3aXBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBTd2lwZXJDbGFzcyAmJiBTd2lwZXJDbGFzcy5wcm90b3R5cGUgKTtcbiAgICBTd2lwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3dpcGVyO1xuXG4gICAgdmFyIHN0YXRpY0FjY2Vzc29ycyA9IHsgZXh0ZW5kZWREZWZhdWx0czogeyBjb25maWd1cmFibGU6IHRydWUgfSxkZWZhdWx0czogeyBjb25maWd1cmFibGU6IHRydWUgfSxDbGFzczogeyBjb25maWd1cmFibGU6IHRydWUgfSwkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLnNsaWRlc1BlclZpZXdEeW5hbWljID0gZnVuY3Rpb24gc2xpZGVzUGVyVmlld0R5bmFtaWMgKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgdmFyIHNsaWRlc0dyaWQgPSBzd2lwZXIuc2xpZGVzR3JpZDtcbiAgICAgIHZhciBzd2lwZXJTaXplID0gc3dpcGVyLnNpemU7XG4gICAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICB2YXIgc3B2ID0gMTtcbiAgICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdmFyIHNsaWRlU2l6ZSA9IHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICB2YXIgYnJlYWtMb29wO1xuICAgICAgICBmb3IgKHZhciBpID0gYWN0aXZlSW5kZXggKyAxOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc1tpXSAmJiAhYnJlYWtMb29wKSB7XG4gICAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgICAgaWYgKHNsaWRlU2l6ZSA+IHN3aXBlclNpemUpIHsgYnJlYWtMb29wID0gdHJ1ZTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpJDEgPSBhY3RpdmVJbmRleCAtIDE7IGkkMSA+PSAwOyBpJDEgLT0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbaSQxXSAmJiAhYnJlYWtMb29wKSB7XG4gICAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2kkMV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgeyBicmVha0xvb3AgPSB0cnVlOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpJDIgPSBhY3RpdmVJbmRleCArIDE7IGkkMiA8IHNsaWRlcy5sZW5ndGg7IGkkMiArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc0dyaWRbaSQyXSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3B2O1xuICAgIH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICAgIC8vIEJyZWFrcG9pbnRzXG4gICAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciB0cmFuc2xhdGVWYWx1ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlICogLTEgOiBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgICB2YXIgbmV3VHJhbnNsYXRlID0gTWF0aC5taW4oTWF0aC5tYXgodHJhbnNsYXRlVmFsdWUsIHN3aXBlci5tYXhUcmFuc2xhdGUoKSksIHN3aXBlci5taW5UcmFuc2xhdGUoKSk7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgICB9XG4gICAgICB2YXIgdHJhbnNsYXRlZDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlKSB7XG4gICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSAmJiBzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgICB0cmFuc2xhdGVkID0gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxLCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdHJhbnNsYXRlZCkge1xuICAgICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09IHN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3VwZGF0ZScpO1xuICAgIH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLmNoYW5nZURpcmVjdGlvbiA9IGZ1bmN0aW9uIGNoYW5nZURpcmVjdGlvbiAobmV3RGlyZWN0aW9uLCBuZWVkVXBkYXRlKSB7XG4gICAgICBpZiAoIG5lZWRVcGRhdGUgPT09IHZvaWQgMCApIG5lZWRVcGRhdGUgPSB0cnVlO1xuXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBjdXJyZW50RGlyZWN0aW9uID0gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb247XG4gICAgICBpZiAoIW5ld0RpcmVjdGlvbikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgbmV3RGlyZWN0aW9uID0gY3VycmVudERpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgIH1cbiAgICAgIGlmICgobmV3RGlyZWN0aW9uID09PSBjdXJyZW50RGlyZWN0aW9uKSB8fCAobmV3RGlyZWN0aW9uICE9PSAnaG9yaXpvbnRhbCcgJiYgbmV3RGlyZWN0aW9uICE9PSAndmVydGljYWwnKSkge1xuICAgICAgICByZXR1cm4gc3dpcGVyO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuJGVsXG4gICAgICAgIC5yZW1vdmVDbGFzcygoXCJcIiArIChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgY3VycmVudERpcmVjdGlvbiArIFwiIHdwOC1cIiArIGN1cnJlbnREaXJlY3Rpb24pKVxuICAgICAgICAuYWRkQ2xhc3MoKFwiXCIgKyAoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIG5ld0RpcmVjdGlvbikpO1xuXG4gICAgICBpZiAoKEJyb3dzZXIuaXNJRSB8fCBCcm93c2VyLmlzRWRnZSkgJiYgKFN1cHBvcnQucG9pbnRlckV2ZW50cyB8fCBTdXBwb3J0LnByZWZpeGVkUG9pbnRlckV2ZW50cykpIHtcbiAgICAgICAgc3dpcGVyLiRlbC5hZGRDbGFzcygoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcIndwOC1cIiArIG5ld0RpcmVjdGlvbikpO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9IG5ld0RpcmVjdGlvbjtcblxuICAgICAgc3dpcGVyLnNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUluZGV4LCBzbGlkZUVsKSB7XG4gICAgICAgIGlmIChuZXdEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzbGlkZUVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpZGVFbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHN3aXBlci5lbWl0KCdjaGFuZ2VEaXJlY3Rpb24nKTtcbiAgICAgIGlmIChuZWVkVXBkYXRlKSB7IHN3aXBlci51cGRhdGUoKTsgfVxuXG4gICAgICByZXR1cm4gc3dpcGVyO1xuICAgIH07XG5cbiAgICBTd2lwZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0ICgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5pbml0aWFsaXplZCkgeyByZXR1cm47IH1cblxuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZUluaXQnKTtcblxuICAgICAgLy8gU2V0IGJyZWFrcG9pbnRcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDbGFzc2VzXG4gICAgICBzd2lwZXIuYWRkQ2xhc3NlcygpO1xuXG4gICAgICAvLyBDcmVhdGUgbG9vcFxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIubG9vcENyZWF0ZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgc2l6ZVxuICAgICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcblxuICAgICAgLy8gVXBkYXRlIHNsaWRlc1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSB7XG4gICAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBHcmFiIEN1cnNvclxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmVsb2FkSW1hZ2VzKSB7XG4gICAgICAgIHN3aXBlci5wcmVsb2FkSW1hZ2VzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSwgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRhY2ggZXZlbnRzXG4gICAgICBzd2lwZXIuYXR0YWNoRXZlbnRzKCk7XG5cbiAgICAgIC8vIEluaXQgRmxhZ1xuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgLy8gRW1pdFxuICAgICAgc3dpcGVyLmVtaXQoJ2luaXQnKTtcbiAgICB9O1xuXG4gICAgU3dpcGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSAoZGVsZXRlSW5zdGFuY2UsIGNsZWFuU3R5bGVzKSB7XG4gICAgICBpZiAoIGRlbGV0ZUluc3RhbmNlID09PSB2b2lkIDAgKSBkZWxldGVJbnN0YW5jZSA9IHRydWU7XG4gICAgICBpZiAoIGNsZWFuU3R5bGVzID09PSB2b2lkIDAgKSBjbGVhblN0eWxlcyA9IHRydWU7XG5cbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcblxuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpO1xuXG4gICAgICAvLyBJbml0IEZsYWdcbiAgICAgIHN3aXBlci5pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyBEZXRhY2ggZXZlbnRzXG4gICAgICBzd2lwZXIuZGV0YWNoRXZlbnRzKCk7XG5cbiAgICAgIC8vIERlc3Ryb3kgbG9vcFxuICAgICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhbnVwIHN0eWxlc1xuICAgICAgaWYgKGNsZWFuU3R5bGVzKSB7XG4gICAgICAgIHN3aXBlci5yZW1vdmVDbGFzc2VzKCk7XG4gICAgICAgICRlbC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuICAgICAgICAkd3JhcHBlckVsLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICAgIGlmIChzbGlkZXMgJiYgc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHNsaWRlc1xuICAgICAgICAgICAgLnJlbW92ZUNsYXNzKFtcbiAgICAgICAgICAgICAgcGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzLFxuICAgICAgICAgICAgICBwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcyxcbiAgICAgICAgICAgICAgcGFyYW1zLnNsaWRlTmV4dENsYXNzLFxuICAgICAgICAgICAgICBwYXJhbXMuc2xpZGVQcmV2Q2xhc3MgXS5qb2luKCcgJykpXG4gICAgICAgICAgICAucmVtb3ZlQXR0cignc3R5bGUnKVxuICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JylcbiAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdkYXRhLXN3aXBlci1jb2x1bW4nKVxuICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXJvdycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci5lbWl0KCdkZXN0cm95Jyk7XG5cbiAgICAgIC8vIERldGFjaCBlbWl0dGVyIGV2ZW50c1xuICAgICAgT2JqZWN0LmtleXMoc3dpcGVyLmV2ZW50c0xpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgIHN3aXBlci5vZmYoZXZlbnROYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGVsZXRlSW5zdGFuY2UgIT09IGZhbHNlKSB7XG4gICAgICAgIHN3aXBlci4kZWxbMF0uc3dpcGVyID0gbnVsbDtcbiAgICAgICAgc3dpcGVyLiRlbC5kYXRhKCdzd2lwZXInLCBudWxsKTtcbiAgICAgICAgVXRpbHMuZGVsZXRlUHJvcHMoc3dpcGVyKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgU3dpcGVyLmV4dGVuZERlZmF1bHRzID0gZnVuY3Rpb24gZXh0ZW5kRGVmYXVsdHMgKG5ld0RlZmF1bHRzKSB7XG4gICAgICBVdGlscy5leHRlbmQoZXh0ZW5kZWREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICAgIH07XG5cbiAgICBzdGF0aWNBY2Nlc3NvcnMuZXh0ZW5kZWREZWZhdWx0cy5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXh0ZW5kZWREZWZhdWx0cztcbiAgICB9O1xuXG4gICAgc3RhdGljQWNjZXNzb3JzLmRlZmF1bHRzLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9O1xuXG4gICAgc3RhdGljQWNjZXNzb3JzLkNsYXNzLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBTd2lwZXJDbGFzcztcbiAgICB9O1xuXG4gICAgc3RhdGljQWNjZXNzb3JzLiQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICQ7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTd2lwZXIsIHN0YXRpY0FjY2Vzc29ycyApO1xuXG4gICAgcmV0dXJuIFN3aXBlcjtcbiAgfShTd2lwZXJDbGFzcykpO1xuXG4gIHZhciBEZXZpY2UkMSA9IHtcbiAgICBuYW1lOiAnZGV2aWNlJyxcbiAgICBwcm90bzoge1xuICAgICAgZGV2aWNlOiBEZXZpY2UsXG4gICAgfSxcbiAgICBzdGF0aWM6IHtcbiAgICAgIGRldmljZTogRGV2aWNlLFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFN1cHBvcnQkMSA9IHtcbiAgICBuYW1lOiAnc3VwcG9ydCcsXG4gICAgcHJvdG86IHtcbiAgICAgIHN1cHBvcnQ6IFN1cHBvcnQsXG4gICAgfSxcbiAgICBzdGF0aWM6IHtcbiAgICAgIHN1cHBvcnQ6IFN1cHBvcnQsXG4gICAgfSxcbiAgfTtcblxuICB2YXIgQnJvd3NlciQxID0ge1xuICAgIG5hbWU6ICdicm93c2VyJyxcbiAgICBwcm90bzoge1xuICAgICAgYnJvd3NlcjogQnJvd3NlcixcbiAgICB9LFxuICAgIHN0YXRpYzoge1xuICAgICAgYnJvd3NlcjogQnJvd3NlcixcbiAgICB9LFxuICB9O1xuXG4gIHZhciBSZXNpemUgPSB7XG4gICAgbmFtZTogJ3Jlc2l6ZScsXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgcmVzaXplOiB7XG4gICAgICAgICAgcmVzaXplSGFuZGxlcjogZnVuY3Rpb24gcmVzaXplSGFuZGxlcigpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5pbml0aWFsaXplZCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdyZXNpemUnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcjogZnVuY3Rpb24gb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKCkge1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ29yaWVudGF0aW9uY2hhbmdlJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICAvLyBFbWl0IHJlc2l6ZVxuICAgICAgICB3aW4uYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc3dpcGVyLnJlc2l6ZS5yZXNpemVIYW5kbGVyKTtcblxuICAgICAgICAvLyBFbWl0IG9yaWVudGF0aW9uY2hhbmdlXG4gICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN3aXBlci5yZXNpemUucmVzaXplSGFuZGxlcik7XG4gICAgICAgIHdpbi5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHN3aXBlci5yZXNpemUub3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgT2JzZXJ2ZXIgPSB7XG4gICAgZnVuYzogd2luLk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luLldlYmtpdE11dGF0aW9uT2JzZXJ2ZXIsXG4gICAgYXR0YWNoOiBmdW5jdGlvbiBhdHRhY2godGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG5cbiAgICAgIHZhciBPYnNlcnZlckZ1bmMgPSBPYnNlcnZlci5mdW5jO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgIC8vIFRoZSBvYnNlcnZlclVwZGF0ZSBldmVudCBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWRcbiAgICAgICAgLy8gb25jZSBkZXNwaXRlIHRoZSBudW1iZXIgb2YgbXV0YXRpb25zLiAgQWRkaXRpb25hbFxuICAgICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb2JzZXJ2ZXJVcGRhdGUgPSBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh3aW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgICAgd2luLnJlcXVlc3RBbmltYXRpb25GcmFtZShvYnNlcnZlclVwZGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luLnNldFRpbWVvdXQob2JzZXJ2ZXJVcGRhdGUsIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgICBjaGlsZExpc3Q6IHR5cGVvZiBvcHRpb25zLmNoaWxkTGlzdCA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGlsZExpc3QsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHR5cGVvZiBvcHRpb25zLmNoYXJhY3RlckRhdGEgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hhcmFjdGVyRGF0YSxcbiAgICAgIH0pO1xuXG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFTdXBwb3J0Lm9ic2VydmVyIHx8ICFzd2lwZXIucGFyYW1zLm9ic2VydmVyKSB7IHJldHVybjsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMub2JzZXJ2ZVBhcmVudHMpIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lclBhcmVudHMgPSBzd2lwZXIuJGVsLnBhcmVudHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250YWluZXJQYXJlbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChjb250YWluZXJQYXJlbnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT2JzZXJ2ZSBjb250YWluZXJcbiAgICAgIHN3aXBlci5vYnNlcnZlci5hdHRhY2goc3dpcGVyLiRlbFswXSwgeyBjaGlsZExpc3Q6IHN3aXBlci5wYXJhbXMub2JzZXJ2ZVNsaWRlQ2hpbGRyZW4gfSk7XG5cbiAgICAgIC8vIE9ic2VydmUgd3JhcHBlclxuICAgICAgc3dpcGVyLm9ic2VydmVyLmF0dGFjaChzd2lwZXIuJHdyYXBwZXJFbFswXSwgeyBhdHRyaWJ1dGVzOiBmYWxzZSB9KTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5vYnNlcnZlci5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgICBzd2lwZXIub2JzZXJ2ZXIub2JzZXJ2ZXJzID0gW107XG4gICAgfSxcbiAgfTtcblxuICB2YXIgT2JzZXJ2ZXIkMSA9IHtcbiAgICBuYW1lOiAnb2JzZXJ2ZXInLFxuICAgIHBhcmFtczoge1xuICAgICAgb2JzZXJ2ZXI6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZVBhcmVudHM6IGZhbHNlLFxuICAgICAgb2JzZXJ2ZVNsaWRlQ2hpbGRyZW46IGZhbHNlLFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgb2JzZXJ2ZXI6IHtcbiAgICAgICAgICBpbml0OiBPYnNlcnZlci5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBhdHRhY2g6IE9ic2VydmVyLmF0dGFjaC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogT2JzZXJ2ZXIuZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb2JzZXJ2ZXJzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIub2JzZXJ2ZXIuaW5pdCgpO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIub2JzZXJ2ZXIuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBWaXJ0dWFsID0ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGZvcmNlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciByZWYgPSBzd2lwZXIucGFyYW1zO1xuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSByZWYuc2xpZGVzUGVyVmlldztcbiAgICAgIHZhciBzbGlkZXNQZXJHcm91cCA9IHJlZi5zbGlkZXNQZXJHcm91cDtcbiAgICAgIHZhciBjZW50ZXJlZFNsaWRlcyA9IHJlZi5jZW50ZXJlZFNsaWRlcztcbiAgICAgIHZhciByZWYkMSA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcbiAgICAgIHZhciBhZGRTbGlkZXNCZWZvcmUgPSByZWYkMS5hZGRTbGlkZXNCZWZvcmU7XG4gICAgICB2YXIgYWRkU2xpZGVzQWZ0ZXIgPSByZWYkMS5hZGRTbGlkZXNBZnRlcjtcbiAgICAgIHZhciByZWYkMiA9IHN3aXBlci52aXJ0dWFsO1xuICAgICAgdmFyIHByZXZpb3VzRnJvbSA9IHJlZiQyLmZyb207XG4gICAgICB2YXIgcHJldmlvdXNUbyA9IHJlZiQyLnRvO1xuICAgICAgdmFyIHNsaWRlcyA9IHJlZiQyLnNsaWRlcztcbiAgICAgIHZhciBwcmV2aW91c1NsaWRlc0dyaWQgPSByZWYkMi5zbGlkZXNHcmlkO1xuICAgICAgdmFyIHJlbmRlclNsaWRlID0gcmVmJDIucmVuZGVyU2xpZGU7XG4gICAgICB2YXIgcHJldmlvdXNPZmZzZXQgPSByZWYkMi5vZmZzZXQ7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuXG4gICAgICB2YXIgb2Zmc2V0UHJvcDtcbiAgICAgIGlmIChzd2lwZXIucnRsVHJhbnNsYXRlKSB7IG9mZnNldFByb3AgPSAncmlnaHQnOyB9XG4gICAgICBlbHNlIHsgb2Zmc2V0UHJvcCA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnOyB9XG5cbiAgICAgIHZhciBzbGlkZXNBZnRlcjtcbiAgICAgIHZhciBzbGlkZXNCZWZvcmU7XG4gICAgICBpZiAoY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgc2xpZGVzQWZ0ZXIgPSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQmVmb3JlO1xuICAgICAgICBzbGlkZXNCZWZvcmUgPSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIHNsaWRlc1Blckdyb3VwICsgYWRkU2xpZGVzQWZ0ZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZXNBZnRlciA9IHNsaWRlc1BlclZpZXcgKyAoc2xpZGVzUGVyR3JvdXAgLSAxKSArIGFkZFNsaWRlc0JlZm9yZTtcbiAgICAgICAgc2xpZGVzQmVmb3JlID0gc2xpZGVzUGVyR3JvdXAgKyBhZGRTbGlkZXNBZnRlcjtcbiAgICAgIH1cbiAgICAgIHZhciBmcm9tID0gTWF0aC5tYXgoKGFjdGl2ZUluZGV4IHx8IDApIC0gc2xpZGVzQmVmb3JlLCAwKTtcbiAgICAgIHZhciB0byA9IE1hdGgubWluKChhY3RpdmVJbmRleCB8fCAwKSArIHNsaWRlc0FmdGVyLCBzbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICB2YXIgb2Zmc2V0ID0gKHN3aXBlci5zbGlkZXNHcmlkW2Zyb21dIHx8IDApIC0gKHN3aXBlci5zbGlkZXNHcmlkWzBdIHx8IDApO1xuXG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnZpcnR1YWwsIHtcbiAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgdG86IHRvLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2xpZGVzR3JpZDogc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gb25SZW5kZXJlZCgpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgICAgaWYgKHN3aXBlci5sYXp5ICYmIHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2aW91c0Zyb20gPT09IGZyb20gJiYgcHJldmlvdXNUbyA9PT0gdG8gJiYgIWZvcmNlKSB7XG4gICAgICAgIGlmIChzd2lwZXIuc2xpZGVzR3JpZCAhPT0gcHJldmlvdXNTbGlkZXNHcmlkICYmIG9mZnNldCAhPT0gcHJldmlvdXNPZmZzZXQpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVzLmNzcyhvZmZzZXRQcm9wLCAob2Zmc2V0ICsgXCJweFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwucmVuZGVyRXh0ZXJuYWwpIHtcbiAgICAgICAgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnJlbmRlckV4dGVybmFsLmNhbGwoc3dpcGVyLCB7XG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgICB0bzogdG8sXG4gICAgICAgICAgc2xpZGVzOiAoZnVuY3Rpb24gZ2V0U2xpZGVzKCkge1xuICAgICAgICAgICAgdmFyIHNsaWRlc1RvUmVuZGVyID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8PSB0bzsgaSArPSAxKSB7XG4gICAgICAgICAgICAgIHNsaWRlc1RvUmVuZGVyLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzbGlkZXNUb1JlbmRlcjtcbiAgICAgICAgICB9KCkpLFxuICAgICAgICB9KTtcbiAgICAgICAgb25SZW5kZXJlZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcHJlcGVuZEluZGV4ZXMgPSBbXTtcbiAgICAgIHZhciBhcHBlbmRJbmRleGVzID0gW107XG4gICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuZmluZCgoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSkpLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHByZXZpb3VzRnJvbTsgaSA8PSBwcmV2aW91c1RvOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoaSA8IGZyb20gfHwgaSA+IHRvKSB7XG4gICAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpICsgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaSArIFwiXFxcIl1cIikpLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc2xpZGVzLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgaWYgKGkkMSA+PSBmcm9tICYmIGkkMSA8PSB0bykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcHJldmlvdXNUbyA9PT0gJ3VuZGVmaW5lZCcgfHwgZm9yY2UpIHtcbiAgICAgICAgICAgIGFwcGVuZEluZGV4ZXMucHVzaChpJDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSQxID4gcHJldmlvdXNUbykgeyBhcHBlbmRJbmRleGVzLnB1c2goaSQxKTsgfVxuICAgICAgICAgICAgaWYgKGkkMSA8IHByZXZpb3VzRnJvbSkgeyBwcmVwZW5kSW5kZXhlcy5wdXNoKGkkMSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFwcGVuZEluZGV4ZXMuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwuYXBwZW5kKHJlbmRlclNsaWRlKHNsaWRlc1tpbmRleF0sIGluZGV4KSk7XG4gICAgICB9KTtcbiAgICAgIHByZXBlbmRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIgLSBhOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5wcmVwZW5kKHJlbmRlclNsaWRlKHNsaWRlc1tpbmRleF0sIGluZGV4KSk7XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLmNoaWxkcmVuKCcuc3dpcGVyLXNsaWRlJykuY3NzKG9mZnNldFByb3AsIChvZmZzZXQgKyBcInB4XCIpKTtcbiAgICAgIG9uUmVuZGVyZWQoKTtcbiAgICB9LFxuICAgIHJlbmRlclNsaWRlOiBmdW5jdGlvbiByZW5kZXJTbGlkZShzbGlkZSwgaW5kZXgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcbiAgICAgIGlmIChwYXJhbXMuY2FjaGUgJiYgc3dpcGVyLnZpcnR1YWwuY2FjaGVbaW5kZXhdKSB7XG4gICAgICAgIHJldHVybiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgJHNsaWRlRWwgPSBwYXJhbXMucmVuZGVyU2xpZGVcbiAgICAgICAgPyAkKHBhcmFtcy5yZW5kZXJTbGlkZS5jYWxsKHN3aXBlciwgc2xpZGUsIGluZGV4KSlcbiAgICAgICAgOiAkKChcIjxkaXYgY2xhc3M9XFxcIlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykgKyBcIlxcXCIgZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgaW5kZXggKyBcIlxcXCI+XCIgKyBzbGlkZSArIFwiPC9kaXY+XCIpKTtcbiAgICAgIGlmICghJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSkgeyAkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcsIGluZGV4KTsgfVxuICAgICAgaWYgKHBhcmFtcy5jYWNoZSkgeyBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0gPSAkc2xpZGVFbDsgfVxuICAgICAgcmV0dXJuICRzbGlkZUVsO1xuICAgIH0sXG4gICAgYXBwZW5kU2xpZGU6IGZ1bmN0aW9uIGFwcGVuZFNsaWRlKHNsaWRlcykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlc1tpXSkgeyBzd2lwZXIudmlydHVhbC5zbGlkZXMucHVzaChzbGlkZXNbaV0pOyB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5wdXNoKHNsaWRlcyk7XG4gICAgICB9XG4gICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUodHJ1ZSk7XG4gICAgfSxcbiAgICBwcmVwZW5kU2xpZGU6IGZ1bmN0aW9uIHByZXBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyAxO1xuICAgICAgdmFyIG51bWJlck9mTmV3U2xpZGVzID0gMTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xpZGVzKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbaV0pIHsgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnVuc2hpZnQoc2xpZGVzW2ldKTsgfVxuICAgICAgICB9XG4gICAgICAgIG5ld0FjdGl2ZUluZGV4ID0gYWN0aXZlSW5kZXggKyBzbGlkZXMubGVuZ3RoO1xuICAgICAgICBudW1iZXJPZk5ld1NsaWRlcyA9IHNsaWRlcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMudW5zaGlmdChzbGlkZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICB2YXIgY2FjaGUgPSBzd2lwZXIudmlydHVhbC5jYWNoZTtcbiAgICAgICAgdmFyIG5ld0NhY2hlID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGNhY2hlKS5mb3JFYWNoKGZ1bmN0aW9uIChjYWNoZWRJbmRleCkge1xuICAgICAgICAgIG5ld0NhY2hlW3BhcnNlSW50KGNhY2hlZEluZGV4LCAxMCkgKyBudW1iZXJPZk5ld1NsaWRlc10gPSBjYWNoZVtjYWNoZWRJbmRleF07XG4gICAgICAgIH0pO1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IG5ld0NhY2hlO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8obmV3QWN0aXZlSW5kZXgsIDApO1xuICAgIH0sXG4gICAgcmVtb3ZlU2xpZGU6IGZ1bmN0aW9uIHJlbW92ZVNsaWRlKHNsaWRlc0luZGV4ZXMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAndW5kZWZpbmVkJyB8fCBzbGlkZXNJbmRleGVzID09PSBudWxsKSB7IHJldHVybjsgfVxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xpZGVzSW5kZXhlcykpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHNsaWRlc0luZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMuc3BsaWNlKHNsaWRlc0luZGV4ZXNbaV0sIDEpO1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzd2lwZXIudmlydHVhbC5jYWNoZVtzbGlkZXNJbmRleGVzW2ldXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXNbaV0gPCBhY3RpdmVJbmRleCkgeyBhY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy5zcGxpY2Uoc2xpZGVzSW5kZXhlcywgMSk7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgICAgICBkZWxldGUgc3dpcGVyLnZpcnR1YWwuY2FjaGVbc2xpZGVzSW5kZXhlc107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNsaWRlc0luZGV4ZXMgPCBhY3RpdmVJbmRleCkgeyBhY3RpdmVJbmRleCAtPSAxOyB9XG4gICAgICAgIGFjdGl2ZUluZGV4ID0gTWF0aC5tYXgoYWN0aXZlSW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8oYWN0aXZlSW5kZXgsIDApO1xuICAgIH0sXG4gICAgcmVtb3ZlQWxsU2xpZGVzOiBmdW5jdGlvbiByZW1vdmVBbGxTbGlkZXMoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcyA9IFtdO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5jYWNoZSA9IHt9O1xuICAgICAgfVxuICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKHRydWUpO1xuICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgMCk7XG4gICAgfSxcbiAgfTtcblxuICB2YXIgVmlydHVhbCQxID0ge1xuICAgIG5hbWU6ICd2aXJ0dWFsJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHZpcnR1YWw6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNsaWRlczogW10sXG4gICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICByZW5kZXJTbGlkZTogbnVsbCxcbiAgICAgICAgcmVuZGVyRXh0ZXJuYWw6IG51bGwsXG4gICAgICAgIGFkZFNsaWRlc0JlZm9yZTogMCxcbiAgICAgICAgYWRkU2xpZGVzQWZ0ZXI6IDAsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgdmlydHVhbDoge1xuICAgICAgICAgIHVwZGF0ZTogVmlydHVhbC51cGRhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGFwcGVuZFNsaWRlOiBWaXJ0dWFsLmFwcGVuZFNsaWRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBwcmVwZW5kU2xpZGU6IFZpcnR1YWwucHJlcGVuZFNsaWRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICByZW1vdmVTbGlkZTogVmlydHVhbC5yZW1vdmVTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcmVtb3ZlQWxsU2xpZGVzOiBWaXJ0dWFsLnJlbW92ZUFsbFNsaWRlcy5iaW5kKHN3aXBlciksXG4gICAgICAgICAgcmVuZGVyU2xpZGU6IFZpcnR1YWwucmVuZGVyU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNsaWRlczogc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnNsaWRlcyxcbiAgICAgICAgICBjYWNoZToge30sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcInZpcnR1YWxcIikpO1xuICAgICAgICB2YXIgb3ZlcndyaXRlUGFyYW1zID0ge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXMpO1xuXG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUpIHtcbiAgICAgICAgICBzd2lwZXIudmlydHVhbC51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKCk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEtleWJvYXJkID0ge1xuICAgIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlO1xuICAgICAgdmFyIGUgPSBldmVudDtcbiAgICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIHsgZSA9IGUub3JpZ2luYWxFdmVudDsgfSAvLyBqcXVlcnkgZml4XG4gICAgICB2YXIga2MgPSBlLmtleUNvZGUgfHwgZS5jaGFyQ29kZTtcbiAgICAgIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIGtjID09PSAzOSkgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYga2MgPT09IDQwKSB8fCBrYyA9PT0gMzQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmICgoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIGtjID09PSAzNykgfHwgKHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYga2MgPT09IDM4KSB8fCBrYyA9PT0gMzMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChlLnNoaWZ0S2V5IHx8IGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAmJiBkb2MuYWN0aXZlRWxlbWVudC5ub2RlTmFtZSAmJiAoZG9jLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyB8fCBkb2MuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGV4dGFyZWEnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMua2V5Ym9hcmQub25seUluVmlld3BvcnQgJiYgKGtjID09PSAzMyB8fCBrYyA9PT0gMzQgfHwga2MgPT09IDM3IHx8IGtjID09PSAzOSB8fCBrYyA9PT0gMzggfHwga2MgPT09IDQwKSkge1xuICAgICAgICB2YXIgaW5WaWV3ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgc3dpcGVyIHNob3VsZCBiZSBpbnNpZGUgb2YgdmlzaWJsZSBhcmVhIG9mIHdpbmRvd1xuICAgICAgICBpZiAoc3dpcGVyLiRlbC5wYXJlbnRzKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpKSkubGVuZ3RoID4gMCAmJiBzd2lwZXIuJGVsLnBhcmVudHMoKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykpKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbi5pbm5lcldpZHRoO1xuICAgICAgICB2YXIgd2luZG93SGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0O1xuICAgICAgICB2YXIgc3dpcGVyT2Zmc2V0ID0gc3dpcGVyLiRlbC5vZmZzZXQoKTtcbiAgICAgICAgaWYgKHJ0bCkgeyBzd2lwZXJPZmZzZXQubGVmdCAtPSBzd2lwZXIuJGVsWzBdLnNjcm9sbExlZnQ7IH1cbiAgICAgICAgdmFyIHN3aXBlckNvb3JkID0gW1xuICAgICAgICAgIFtzd2lwZXJPZmZzZXQubGVmdCwgc3dpcGVyT2Zmc2V0LnRvcF0sXG4gICAgICAgICAgW3N3aXBlck9mZnNldC5sZWZ0ICsgc3dpcGVyLndpZHRoLCBzd2lwZXJPZmZzZXQudG9wXSxcbiAgICAgICAgICBbc3dpcGVyT2Zmc2V0LmxlZnQsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXIuaGVpZ2h0XSxcbiAgICAgICAgICBbc3dpcGVyT2Zmc2V0LmxlZnQgKyBzd2lwZXIud2lkdGgsIHN3aXBlck9mZnNldC50b3AgKyBzd2lwZXIuaGVpZ2h0XSBdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN3aXBlckNvb3JkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHBvaW50ID0gc3dpcGVyQ29vcmRbaV07XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9pbnRbMF0gPj0gMCAmJiBwb2ludFswXSA8PSB3aW5kb3dXaWR0aFxuICAgICAgICAgICAgJiYgcG9pbnRbMV0gPj0gMCAmJiBwb2ludFsxXSA8PSB3aW5kb3dIZWlnaHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGluVmlldyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaW5WaWV3KSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKGtjID09PSAzMyB8fCBrYyA9PT0gMzQgfHwga2MgPT09IDM3IHx8IGtjID09PSAzOSkge1xuICAgICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgICAgIGVsc2UgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKChrYyA9PT0gMzQgfHwga2MgPT09IDM5KSAmJiAhcnRsKSB8fCAoKGtjID09PSAzMyB8fCBrYyA9PT0gMzcpICYmIHJ0bCkpIHsgc3dpcGVyLnNsaWRlTmV4dCgpOyB9XG4gICAgICAgIGlmICgoKGtjID09PSAzMyB8fCBrYyA9PT0gMzcpICYmICFydGwpIHx8ICgoa2MgPT09IDM0IHx8IGtjID09PSAzOSkgJiYgcnRsKSkgeyBzd2lwZXIuc2xpZGVQcmV2KCk7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrYyA9PT0gMzMgfHwga2MgPT09IDM0IHx8IGtjID09PSAzOCB8fCBrYyA9PT0gNDApIHtcbiAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICAgICAgICBlbHNlIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtjID09PSAzNCB8fCBrYyA9PT0gNDApIHsgc3dpcGVyLnNsaWRlTmV4dCgpOyB9XG4gICAgICAgIGlmIChrYyA9PT0gMzMgfHwga2MgPT09IDM4KSB7IHN3aXBlci5zbGlkZVByZXYoKTsgfVxuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ2tleVByZXNzJywga2MpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAkKGRvYykub24oJ2tleWRvd24nLCBzd2lwZXIua2V5Ym9hcmQuaGFuZGxlKTtcbiAgICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGVkID0gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAkKGRvYykub2ZmKCdrZXlkb3duJywgc3dpcGVyLmtleWJvYXJkLmhhbmRsZSk7XG4gICAgICBzd2lwZXIua2V5Ym9hcmQuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIEtleWJvYXJkJDEgPSB7XG4gICAgbmFtZTogJ2tleWJvYXJkJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGtleWJvYXJkOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBvbmx5SW5WaWV3cG9ydDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIGVuYWJsZTogS2V5Ym9hcmQuZW5hYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkaXNhYmxlOiBLZXlib2FyZC5kaXNhYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBoYW5kbGU6IEtleWJvYXJkLmhhbmRsZS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMua2V5Ym9hcmQuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZCgpIHtcbiAgICB2YXIgZXZlbnROYW1lID0gJ29ud2hlZWwnO1xuICAgIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2M7XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBpZiAoIWlzU3VwcG9ydGVkXG4gICAgICAmJiBkb2MuaW1wbGVtZW50YXRpb25cbiAgICAgICYmIGRvYy5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlXG4gICAgICAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICAgICAgJiYgZG9jLmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gdGVzdCBzdXBwb3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLlxuICAgICAgaXNTdXBwb3J0ZWQgPSBkb2MuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgfVxuICB2YXIgTW91c2V3aGVlbCA9IHtcbiAgICBsYXN0U2Nyb2xsVGltZTogVXRpbHMubm93KCksXG4gICAgZXZlbnQ6IChmdW5jdGlvbiBnZXRFdmVudCgpIHtcbiAgICAgIGlmICh3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdmaXJlZm94JykgPiAtMSkgeyByZXR1cm4gJ0RPTU1vdXNlU2Nyb2xsJzsgfVxuICAgICAgcmV0dXJuIGlzRXZlbnRTdXBwb3J0ZWQoKSA/ICd3aGVlbCcgOiAnbW91c2V3aGVlbCc7XG4gICAgfSgpKSxcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShlKSB7XG4gICAgICAvLyBSZWFzb25hYmxlIGRlZmF1bHRzXG4gICAgICB2YXIgUElYRUxfU1RFUCA9IDEwO1xuICAgICAgdmFyIExJTkVfSEVJR0hUID0gNDA7XG4gICAgICB2YXIgUEFHRV9IRUlHSFQgPSA4MDA7XG5cbiAgICAgIHZhciBzWCA9IDA7XG4gICAgICB2YXIgc1kgPSAwOyAvLyBzcGluWCwgc3BpbllcbiAgICAgIHZhciBwWCA9IDA7XG4gICAgICB2YXIgcFkgPSAwOyAvLyBwaXhlbFgsIHBpeGVsWVxuXG4gICAgICAvLyBMZWdhY3lcbiAgICAgIGlmICgnZGV0YWlsJyBpbiBlKSB7XG4gICAgICAgIHNZID0gZS5kZXRhaWw7XG4gICAgICB9XG4gICAgICBpZiAoJ3doZWVsRGVsdGEnIGluIGUpIHtcbiAgICAgICAgc1kgPSAtZS53aGVlbERlbHRhIC8gMTIwO1xuICAgICAgfVxuICAgICAgaWYgKCd3aGVlbERlbHRhWScgaW4gZSkge1xuICAgICAgICBzWSA9IC1lLndoZWVsRGVsdGFZIC8gMTIwO1xuICAgICAgfVxuICAgICAgaWYgKCd3aGVlbERlbHRhWCcgaW4gZSkge1xuICAgICAgICBzWCA9IC1lLndoZWVsRGVsdGFYIC8gMTIwO1xuICAgICAgfVxuXG4gICAgICAvLyBzaWRlIHNjcm9sbGluZyBvbiBGRiB3aXRoIERPTU1vdXNlU2Nyb2xsXG4gICAgICBpZiAoJ2F4aXMnIGluIGUgJiYgZS5heGlzID09PSBlLkhPUklaT05UQUxfQVhJUykge1xuICAgICAgICBzWCA9IHNZO1xuICAgICAgICBzWSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHBYID0gc1ggKiBQSVhFTF9TVEVQO1xuICAgICAgcFkgPSBzWSAqIFBJWEVMX1NURVA7XG5cbiAgICAgIGlmICgnZGVsdGFZJyBpbiBlKSB7XG4gICAgICAgIHBZID0gZS5kZWx0YVk7XG4gICAgICB9XG4gICAgICBpZiAoJ2RlbHRhWCcgaW4gZSkge1xuICAgICAgICBwWCA9IGUuZGVsdGFYO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHBYIHx8IHBZKSAmJiBlLmRlbHRhTW9kZSkge1xuICAgICAgICBpZiAoZS5kZWx0YU1vZGUgPT09IDEpIHsgLy8gZGVsdGEgaW4gTElORSB1bml0c1xuICAgICAgICAgIHBYICo9IExJTkVfSEVJR0hUO1xuICAgICAgICAgIHBZICo9IExJTkVfSEVJR0hUO1xuICAgICAgICB9IGVsc2UgeyAvLyBkZWx0YSBpbiBQQUdFIHVuaXRzXG4gICAgICAgICAgcFggKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgICAgcFkgKj0gUEFHRV9IRUlHSFQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRmFsbC1iYWNrIGlmIHNwaW4gY2Fubm90IGJlIGRldGVybWluZWRcbiAgICAgIGlmIChwWCAmJiAhc1gpIHtcbiAgICAgICAgc1ggPSAocFggPCAxKSA/IC0xIDogMTtcbiAgICAgIH1cbiAgICAgIGlmIChwWSAmJiAhc1kpIHtcbiAgICAgICAgc1kgPSAocFkgPCAxKSA/IC0xIDogMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Bpblg6IHNYLFxuICAgICAgICBzcGluWTogc1ksXG4gICAgICAgIHBpeGVsWDogcFgsXG4gICAgICAgIHBpeGVsWTogcFksXG4gICAgICB9O1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VFbnRlcjogZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IHRydWU7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIubW91c2VFbnRlcmVkID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGU6IGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgICAgdmFyIGUgPSBldmVudDtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMubW91c2V3aGVlbDtcblxuICAgICAgaWYgKCFzd2lwZXIubW91c2VFbnRlcmVkICYmICFwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHsgcmV0dXJuIHRydWU7IH1cblxuICAgICAgaWYgKGUub3JpZ2luYWxFdmVudCkgeyBlID0gZS5vcmlnaW5hbEV2ZW50OyB9IC8vIGpxdWVyeSBmaXhcbiAgICAgIHZhciBkZWx0YSA9IDA7XG4gICAgICB2YXIgcnRsRmFjdG9yID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC0xIDogMTtcblxuICAgICAgdmFyIGRhdGEgPSBNb3VzZXdoZWVsLm5vcm1hbGl6ZShlKTtcblxuICAgICAgaWYgKHBhcmFtcy5mb3JjZVRvQXhpcykge1xuICAgICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSkgeyBkZWx0YSA9IGRhdGEucGl4ZWxYICogcnRsRmFjdG9yOyB9XG4gICAgICAgICAgZWxzZSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGF0YS5waXhlbFkpID4gTWF0aC5hYnMoZGF0YS5waXhlbFgpKSB7IGRlbHRhID0gZGF0YS5waXhlbFk7IH1cbiAgICAgICAgZWxzZSB7IHJldHVybiB0cnVlOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWx0YSA9IE1hdGguYWJzKGRhdGEucGl4ZWxYKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxZKSA/IC1kYXRhLnBpeGVsWCAqIHJ0bEZhY3RvciA6IC1kYXRhLnBpeGVsWTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlbHRhID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICAgIGlmIChwYXJhbXMuaW52ZXJ0KSB7IGRlbHRhID0gLWRlbHRhOyB9XG5cbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgICBpZiAoVXRpbHMubm93KCkgLSBzd2lwZXIubW91c2V3aGVlbC5sYXN0U2Nyb2xsVGltZSA+IDYwKSB7XG4gICAgICAgICAgaWYgKGRlbHRhIDwgMCkge1xuICAgICAgICAgICAgaWYgKCghc3dpcGVyLmlzRW5kIHx8IHN3aXBlci5wYXJhbXMubG9vcCkgJiYgIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgICAgICAgICAgICBzd2lwZXIuZW1pdCgnc2Nyb2xsJywgZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy5yZWxlYXNlT25FZGdlcykgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoKCFzd2lwZXIuaXNCZWdpbm5pbmcgfHwgc3dpcGVyLnBhcmFtcy5sb29wKSAmJiAhc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIGUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlbGVhc2VPbkVkZ2VzKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpcGVyLm1vdXNld2hlZWwubGFzdFNjcm9sbFRpbWUgPSAobmV3IHdpbi5EYXRlKCkpLmdldFRpbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZyZWVtb2RlIG9yIHNjcm9sbENvbnRhaW5lcjpcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpICsgKGRlbHRhICogcGFyYW1zLnNlbnNpdGl2aXR5KTtcbiAgICAgICAgdmFyIHdhc0JlZ2lubmluZyA9IHN3aXBlci5pc0JlZ2lubmluZztcbiAgICAgICAgdmFyIHdhc0VuZCA9IHN3aXBlci5pc0VuZDtcblxuICAgICAgICBpZiAocG9zaXRpb24gPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7IHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpOyB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHsgcG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7IH1cblxuICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShwb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcblxuICAgICAgICBpZiAoKCF3YXNCZWdpbm5pbmcgJiYgc3dpcGVyLmlzQmVnaW5uaW5nKSB8fCAoIXdhc0VuZCAmJiBzd2lwZXIuaXNFbmQpKSB7XG4gICAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlU3RpY2t5KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQpO1xuICAgICAgICAgIHN3aXBlci5tb3VzZXdoZWVsLnRpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVtaXQgZXZlbnRcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbCcsIGUpO1xuXG4gICAgICAgIC8vIFN0b3AgYXV0b3BsYXlcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkgJiYgc3dpcGVyLnBhcmFtcy5hdXRvcGxheURpc2FibGVPbkludGVyYWN0aW9uKSB7IHN3aXBlci5hdXRvcGxheS5zdG9wKCk7IH1cbiAgICAgICAgLy8gUmV0dXJuIHBhZ2Ugc2Nyb2xsIG9uIGVkZ2UgcG9zaXRpb25zXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIHx8IHBvc2l0aW9uID09PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9XG4gICAgICBlbHNlIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBlbmFibGU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFNb3VzZXdoZWVsLmV2ZW50KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICB2YXIgdGFyZ2V0ID0gc3dpcGVyLiRlbDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2VkICE9PSAnY29udGFpbmVyJykge1xuICAgICAgICB0YXJnZXQgPSAkKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQpO1xuICAgICAgfVxuICAgICAgdGFyZ2V0Lm9uKCdtb3VzZWVudGVyJywgc3dpcGVyLm1vdXNld2hlZWwuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgICB0YXJnZXQub24oJ21vdXNlbGVhdmUnLCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICAgIHRhcmdldC5vbihNb3VzZXdoZWVsLmV2ZW50LCBzd2lwZXIubW91c2V3aGVlbC5oYW5kbGUpO1xuICAgICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghTW91c2V3aGVlbC5ldmVudCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmICghc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIHZhciB0YXJnZXQgPSBzd2lwZXIuJGVsO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZWQgIT09ICdjb250YWluZXInKSB7XG4gICAgICAgIHRhcmdldCA9ICQoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdlZCk7XG4gICAgICB9XG4gICAgICB0YXJnZXQub2ZmKE1vdXNld2hlZWwuZXZlbnQsIHN3aXBlci5tb3VzZXdoZWVsLmhhbmRsZSk7XG4gICAgICBzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9O1xuXG4gIHZhciBNb3VzZXdoZWVsJDEgPSB7XG4gICAgbmFtZTogJ21vdXNld2hlZWwnLFxuICAgIHBhcmFtczoge1xuICAgICAgbW91c2V3aGVlbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmVsZWFzZU9uRWRnZXM6IGZhbHNlLFxuICAgICAgICBpbnZlcnQ6IGZhbHNlLFxuICAgICAgICBmb3JjZVRvQXhpczogZmFsc2UsXG4gICAgICAgIHNlbnNpdGl2aXR5OiAxLFxuICAgICAgICBldmVudHNUYXJnZWQ6ICdjb250YWluZXInLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIG1vdXNld2hlZWw6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBlbmFibGU6IE1vdXNld2hlZWwuZW5hYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkaXNhYmxlOiBNb3VzZXdoZWVsLmRpc2FibGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGhhbmRsZTogTW91c2V3aGVlbC5oYW5kbGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGhhbmRsZU1vdXNlRW50ZXI6IE1vdXNld2hlZWwuaGFuZGxlTW91c2VFbnRlci5iaW5kKHN3aXBlciksXG4gICAgICAgICAgaGFuZGxlTW91c2VMZWF2ZTogTW91c2V3aGVlbC5oYW5kbGVNb3VzZUxlYXZlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBsYXN0U2Nyb2xsVGltZTogVXRpbHMubm93KCksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5lbmFibGVkKSB7IHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZSgpOyB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkKSB7IHN3aXBlci5tb3VzZXdoZWVsLmRpc2FibGUoKTsgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBOYXZpZ2F0aW9uID0ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgLy8gVXBkYXRlIE5hdmlnYXRpb24gQnV0dG9uc1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHJlZiA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgICAgdmFyICRuZXh0RWwgPSByZWYuJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsID0gcmVmLiRwcmV2RWw7XG5cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICAgICAgJHByZXZFbC5hZGRDbGFzcyhwYXJhbXMuZGlzYWJsZWRDbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJHByZXZFbC5yZW1vdmVDbGFzcyhwYXJhbXMuZGlzYWJsZWRDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgJHByZXZFbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgICAgfVxuICAgICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICAkbmV4dEVsLmFkZENsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkbmV4dEVsLnJlbW92ZUNsYXNzKHBhcmFtcy5kaXNhYmxlZENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICAkbmV4dEVsW3N3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblByZXZDbGljazogZnVuY3Rpb24gb25QcmV2Q2xpY2soZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHsgcmV0dXJuOyB9XG4gICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgfSxcbiAgICBvbk5leHRDbGljazogZnVuY3Rpb24gb25OZXh0Q2xpY2soZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3ApIHsgcmV0dXJuOyB9XG4gICAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uO1xuICAgICAgaWYgKCEocGFyYW1zLm5leHRFbCB8fCBwYXJhbXMucHJldkVsKSkgeyByZXR1cm47IH1cblxuICAgICAgdmFyICRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbDtcbiAgICAgIGlmIChwYXJhbXMubmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSAkKHBhcmFtcy5uZXh0RWwpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50c1xuICAgICAgICAgICYmIHR5cGVvZiBwYXJhbXMubmV4dEVsID09PSAnc3RyaW5nJ1xuICAgICAgICAgICYmICRuZXh0RWwubGVuZ3RoID4gMVxuICAgICAgICAgICYmIHN3aXBlci4kZWwuZmluZChwYXJhbXMubmV4dEVsKS5sZW5ndGggPT09IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgJG5leHRFbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMubmV4dEVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5wcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9ICQocGFyYW1zLnByZXZFbCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzXG4gICAgICAgICAgJiYgdHlwZW9mIHBhcmFtcy5wcmV2RWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgJiYgJHByZXZFbC5sZW5ndGggPiAxXG4gICAgICAgICAgJiYgc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5wcmV2RWwpLmxlbmd0aCA9PT0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAkcHJldkVsID0gc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5wcmV2RWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgkbmV4dEVsICYmICRuZXh0RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAkbmV4dEVsLm9uKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uTmV4dENsaWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAkcHJldkVsLm9uKCdjbGljaycsIHN3aXBlci5uYXZpZ2F0aW9uLm9uUHJldkNsaWNrKTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5uYXZpZ2F0aW9uLCB7XG4gICAgICAgICRuZXh0RWw6ICRuZXh0RWwsXG4gICAgICAgIG5leHRFbDogJG5leHRFbCAmJiAkbmV4dEVsWzBdLFxuICAgICAgICAkcHJldkVsOiAkcHJldkVsLFxuICAgICAgICBwcmV2RWw6ICRwcmV2RWwgJiYgJHByZXZFbFswXSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHJlZiA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgICAgdmFyICRuZXh0RWwgPSByZWYuJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsID0gcmVmLiRwcmV2RWw7XG4gICAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCkge1xuICAgICAgICAkbmV4dEVsLm9mZignY2xpY2snLCBzd2lwZXIubmF2aWdhdGlvbi5vbk5leHRDbGljayk7XG4gICAgICAgICRuZXh0RWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgfVxuICAgICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGgpIHtcbiAgICAgICAgJHByZXZFbC5vZmYoJ2NsaWNrJywgc3dpcGVyLm5hdmlnYXRpb24ub25QcmV2Q2xpY2spO1xuICAgICAgICAkcHJldkVsLnJlbW92ZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5kaXNhYmxlZENsYXNzKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIHZhciBOYXZpZ2F0aW9uJDEgPSB7XG4gICAgbmFtZTogJ25hdmlnYXRpb24nLFxuICAgIHBhcmFtczoge1xuICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICBuZXh0RWw6IG51bGwsXG4gICAgICAgIHByZXZFbDogbnVsbCxcblxuICAgICAgICBoaWRlT25DbGljazogZmFsc2UsXG4gICAgICAgIGRpc2FibGVkQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWRpc2FibGVkJyxcbiAgICAgICAgaGlkZGVuQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWhpZGRlbicsXG4gICAgICAgIGxvY2tDbGFzczogJ3N3aXBlci1idXR0b24tbG9jaycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgbmF2aWdhdGlvbjoge1xuICAgICAgICAgIGluaXQ6IE5hdmlnYXRpb24uaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgdXBkYXRlOiBOYXZpZ2F0aW9uLnVwZGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogTmF2aWdhdGlvbi5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvbk5leHRDbGljazogTmF2aWdhdGlvbi5vbk5leHRDbGljay5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25QcmV2Q2xpY2s6IE5hdmlnYXRpb24ub25QcmV2Q2xpY2suYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5uYXZpZ2F0aW9uLmluaXQoKTtcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgdG9FZGdlOiBmdW5jdGlvbiB0b0VkZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIubmF2aWdhdGlvbi51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLm5hdmlnYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljayhlKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICB2YXIgcmVmID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgICAgIHZhciAkbmV4dEVsID0gcmVmLiRuZXh0RWw7XG4gICAgICAgIHZhciAkcHJldkVsID0gcmVmLiRwcmV2RWw7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZU9uQ2xpY2tcbiAgICAgICAgICAmJiAhJChlLnRhcmdldCkuaXMoJHByZXZFbClcbiAgICAgICAgICAmJiAhJChlLnRhcmdldCkuaXMoJG5leHRFbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGlzSGlkZGVuO1xuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICBpc0hpZGRlbiA9ICRuZXh0RWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgICAgIGlzSGlkZGVuID0gJHByZXZFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCduYXZpZ2F0aW9uU2hvdycsIHN3aXBlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCduYXZpZ2F0aW9uSGlkZScsIHN3aXBlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgICAgICAkbmV4dEVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgICAgICAkcHJldkVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFBhZ2luYXRpb24gPSB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAvLyBSZW5kZXIgfHwgVXBkYXRlIFBhZ2luYXRpb24gYnVsbGV0cy9pdGVtc1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcnRsID0gc3dpcGVyLnJ0bDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLiRlbCB8fCBzd2lwZXIucGFnaW5hdGlvbi4kZWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgICAgdmFyICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcbiAgICAgIC8vIEN1cnJlbnQvVG90YWxcbiAgICAgIHZhciBjdXJyZW50O1xuICAgICAgdmFyIHRvdGFsID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSAoc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgY3VycmVudCA9IE1hdGguY2VpbCgoc3dpcGVyLmFjdGl2ZUluZGV4IC0gc3dpcGVyLmxvb3BlZFNsaWRlcykgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICAgICAgaWYgKGN1cnJlbnQgPiBzbGlkZXNMZW5ndGggLSAxIC0gKHN3aXBlci5sb29wZWRTbGlkZXMgKiAyKSkge1xuICAgICAgICAgIGN1cnJlbnQgLT0gKHNsaWRlc0xlbmd0aCAtIChzd2lwZXIubG9vcGVkU2xpZGVzICogMikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50ID4gdG90YWwgLSAxKSB7IGN1cnJlbnQgLT0gdG90YWw7IH1cbiAgICAgICAgaWYgKGN1cnJlbnQgPCAwICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvblR5cGUgIT09ICdidWxsZXRzJykgeyBjdXJyZW50ID0gdG90YWwgKyBjdXJyZW50OyB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzd2lwZXIuc25hcEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjdXJyZW50ID0gc3dpcGVyLnNuYXBJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgPSBzd2lwZXIuYWN0aXZlSW5kZXggfHwgMDtcbiAgICAgIH1cbiAgICAgIC8vIFR5cGVzXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgYnVsbGV0cyA9IHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHM7XG4gICAgICAgIHZhciBmaXJzdEluZGV4O1xuICAgICAgICB2YXIgbGFzdEluZGV4O1xuICAgICAgICB2YXIgbWlkSW5kZXg7XG4gICAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplID0gYnVsbGV0cy5lcSgwKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnb3V0ZXJXaWR0aCcgOiAnb3V0ZXJIZWlnaHQnXSh0cnVlKTtcbiAgICAgICAgICAkZWwuY3NzKHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd3aWR0aCcgOiAnaGVpZ2h0JywgKChzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplICogKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgKyA0KSkgKyBcInB4XCIpKTtcbiAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA+IDEgJiYgc3dpcGVyLnByZXZpb3VzSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ICs9IChjdXJyZW50IC0gc3dpcGVyLnByZXZpb3VzSW5kZXgpO1xuICAgICAgICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA+IChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIC0gMSkpIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmR5bmFtaWNCdWxsZXRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZHluYW1pY0J1bGxldEluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3RJbmRleCA9IGN1cnJlbnQgLSBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXg7XG4gICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleCArIChNYXRoLm1pbihidWxsZXRzLmxlbmd0aCwgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cykgLSAxKTtcbiAgICAgICAgICBtaWRJbmRleCA9IChsYXN0SW5kZXggKyBmaXJzdEluZGV4KSAvIDI7XG4gICAgICAgIH1cbiAgICAgICAgYnVsbGV0cy5yZW1vdmVDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIiBcIiArIChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dCBcIiArIChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dC1uZXh0IFwiICsgKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2IFwiICsgKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2LXByZXYgXCIgKyAocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW1haW5cIikpO1xuICAgICAgICBpZiAoJGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBidWxsZXRzLmVhY2goZnVuY3Rpb24gKGluZGV4LCBidWxsZXQpIHtcbiAgICAgICAgICAgIHZhciAkYnVsbGV0ID0gJChidWxsZXQpO1xuICAgICAgICAgICAgdmFyIGJ1bGxldEluZGV4ID0gJGJ1bGxldC5pbmRleCgpO1xuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICRidWxsZXQuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID49IGZpcnN0SW5kZXggJiYgYnVsbGV0SW5kZXggPD0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgJGJ1bGxldC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1tYWluXCIpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGZpcnN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAkYnVsbGV0XG4gICAgICAgICAgICAgICAgICAucHJldigpXG4gICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoKChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItcHJldlwiKSlcbiAgICAgICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1wcmV2LXByZXZcIikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgJGJ1bGxldFxuICAgICAgICAgICAgICAgICAgLm5leHQoKVxuICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW5leHRcIikpXG4gICAgICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoKChwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpICsgXCItbmV4dC1uZXh0XCIpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciAkYnVsbGV0ID0gYnVsbGV0cy5lcShjdXJyZW50KTtcbiAgICAgICAgICAkYnVsbGV0LmFkZENsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgICAgdmFyICRmaXJzdERpc3BsYXllZEJ1bGxldCA9IGJ1bGxldHMuZXEoZmlyc3RJbmRleCk7XG4gICAgICAgICAgICB2YXIgJGxhc3REaXNwbGF5ZWRCdWxsZXQgPSBidWxsZXRzLmVxKGxhc3RJbmRleCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RJbmRleDsgaSA8PSBsYXN0SW5kZXg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICBidWxsZXRzLmVxKGkpLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLW1haW5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGZpcnN0RGlzcGxheWVkQnVsbGV0XG4gICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXZcIikpXG4gICAgICAgICAgICAgIC5wcmV2KClcbiAgICAgICAgICAgICAgLmFkZENsYXNzKCgocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSArIFwiLXByZXYtcHJldlwiKSk7XG4gICAgICAgICAgICAkbGFzdERpc3BsYXllZEJ1bGxldFxuICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0XCIpKVxuICAgICAgICAgICAgICAubmV4dCgpXG4gICAgICAgICAgICAgIC5hZGRDbGFzcygoKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcykgKyBcIi1uZXh0LW5leHRcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgdmFyIGR5bmFtaWNCdWxsZXRzTGVuZ3RoID0gTWF0aC5taW4oYnVsbGV0cy5sZW5ndGgsIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgKyA0KTtcbiAgICAgICAgICB2YXIgYnVsbGV0c09mZnNldCA9ICgoKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldFNpemUgKiBkeW5hbWljQnVsbGV0c0xlbmd0aCkgLSAoc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0U2l6ZSkpIC8gMikgLSAobWlkSW5kZXggKiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRTaXplKTtcbiAgICAgICAgICB2YXIgb2Zmc2V0UHJvcCA9IHJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgICAgYnVsbGV0cy5jc3Moc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gb2Zmc2V0UHJvcCA6ICd0b3AnLCAoYnVsbGV0c09mZnNldCArIFwicHhcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgICAgJGVsLmZpbmQoKFwiLlwiICsgKHBhcmFtcy5jdXJyZW50Q2xhc3MpKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25DdXJyZW50KGN1cnJlbnQgKyAxKSk7XG4gICAgICAgICRlbC5maW5kKChcIi5cIiArIChwYXJhbXMudG90YWxDbGFzcykpKS50ZXh0KHBhcmFtcy5mb3JtYXRGcmFjdGlvblRvdGFsKHRvdGFsKSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgdmFyIHByb2dyZXNzYmFyRGlyZWN0aW9uO1xuICAgICAgICBpZiAocGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGUpIHtcbiAgICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzY2FsZSA9IChjdXJyZW50ICsgMSkgLyB0b3RhbDtcbiAgICAgICAgdmFyIHNjYWxlWCA9IDE7XG4gICAgICAgIHZhciBzY2FsZVkgPSAxO1xuICAgICAgICBpZiAocHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIHNjYWxlWCA9IHNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlWSA9IHNjYWxlO1xuICAgICAgICB9XG4gICAgICAgICRlbC5maW5kKChcIi5cIiArIChwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpKSkudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoXCIgKyBzY2FsZVggKyBcIikgc2NhbGVZKFwiICsgc2NhbGVZICsgXCIpXCIpKS50cmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnY3VzdG9tJyAmJiBwYXJhbXMucmVuZGVyQ3VzdG9tKSB7XG4gICAgICAgICRlbC5odG1sKHBhcmFtcy5yZW5kZXJDdXN0b20oc3dpcGVyLCBjdXJyZW50ICsgMSwgdG90YWwpKTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCBzd2lwZXIsICRlbFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblVwZGF0ZScsIHN3aXBlciwgJGVsWzBdKTtcbiAgICAgIH1cbiAgICAgICRlbFtzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmlzTG9ja2VkID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAvLyBSZW5kZXIgQ29udGFpbmVyXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgICBpZiAoIXBhcmFtcy5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLiRlbCB8fCBzd2lwZXIucGFnaW5hdGlvbi4kZWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuXG4gICAgICB2YXIgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsO1xuICAgICAgdmFyIHBhZ2luYXRpb25IVE1MID0gJyc7XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJykge1xuICAgICAgICB2YXIgbnVtYmVyT2ZCdWxsZXRzID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSAoc3dpcGVyLmxvb3BlZFNsaWRlcyAqIDIpKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkJ1bGxldHM7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChwYXJhbXMucmVuZGVyQnVsbGV0KSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBwYXJhbXMucmVuZGVyQnVsbGV0LmNhbGwoc3dpcGVyLCBpLCBwYXJhbXMuYnVsbGV0Q2xhc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBcIjxcIiArIChwYXJhbXMuYnVsbGV0RWxlbWVudCkgKyBcIiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLmJ1bGxldENsYXNzKSArIFwiXFxcIj48L1wiICsgKHBhcmFtcy5idWxsZXRFbGVtZW50KSArIFwiPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAkZWwuaHRtbChwYWdpbmF0aW9uSFRNTCk7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgPSAkZWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLmJ1bGxldENsYXNzKSkpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnZnJhY3Rpb24nKSB7XG4gICAgICAgIGlmIChwYXJhbXMucmVuZGVyRnJhY3Rpb24pIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IHBhcmFtcy5yZW5kZXJGcmFjdGlvbi5jYWxsKHN3aXBlciwgcGFyYW1zLmN1cnJlbnRDbGFzcywgcGFyYW1zLnRvdGFsQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLmN1cnJlbnRDbGFzcykgKyBcIlxcXCI+PC9zcGFuPlwiXG4gICAgICAgICAgKyAnIC8gJ1xuICAgICAgICAgICsgXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLnRvdGFsQ2xhc3MpICsgXCJcXFwiPjwvc3Bhbj5cIjtcbiAgICAgICAgfVxuICAgICAgICAkZWwuaHRtbChwYWdpbmF0aW9uSFRNTCk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJQcm9ncmVzc2Jhcikge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gcGFyYW1zLnJlbmRlclByb2dyZXNzYmFyLmNhbGwoc3dpcGVyLCBwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MID0gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyAocGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzKSArIFwiXFxcIj48L3NwYW4+XCI7XG4gICAgICAgIH1cbiAgICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgICBzd2lwZXIuZW1pdCgncGFnaW5hdGlvblJlbmRlcicsIHN3aXBlci5wYWdpbmF0aW9uLiRlbFswXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgICAgaWYgKCFwYXJhbXMuZWwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIHZhciAkZWwgPSAkKHBhcmFtcy5lbCk7XG4gICAgICBpZiAoJGVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgaWYgKFxuICAgICAgICBzd2lwZXIucGFyYW1zLnVuaXF1ZU5hdkVsZW1lbnRzXG4gICAgICAgICYmIHR5cGVvZiBwYXJhbXMuZWwgPT09ICdzdHJpbmcnXG4gICAgICAgICYmICRlbC5sZW5ndGggPiAxXG4gICAgICAgICYmIHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpLmxlbmd0aCA9PT0gMVxuICAgICAgKSB7XG4gICAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChwYXJhbXMuZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMuY2xpY2thYmxlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICAkZWwuYWRkQ2xhc3MocGFyYW1zLm1vZGlmaWVyQ2xhc3MgKyBwYXJhbXMudHlwZSk7XG5cbiAgICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnICYmIHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAkZWwuYWRkQ2xhc3MoKFwiXCIgKyAocGFyYW1zLm1vZGlmaWVyQ2xhc3MpICsgKHBhcmFtcy50eXBlKSArIFwiLWR5bmFtaWNcIikpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5keW5hbWljQnVsbGV0SW5kZXggPSAwO1xuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA8IDEpIHtcbiAgICAgICAgICBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAncHJvZ3Jlc3NiYXInICYmIHBhcmFtcy5wcm9ncmVzc2Jhck9wcG9zaXRlKSB7XG4gICAgICAgICRlbC5hZGRDbGFzcyhwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5jbGlja2FibGUpIHtcbiAgICAgICAgJGVsLm9uKCdjbGljaycsIChcIi5cIiArIChwYXJhbXMuYnVsbGV0Q2xhc3MpKSwgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHZhciBpbmRleCA9ICQodGhpcykuaW5kZXgoKSAqIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkgeyBpbmRleCArPSBzd2lwZXIubG9vcGVkU2xpZGVzOyB9XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYWdpbmF0aW9uLCB7XG4gICAgICAgICRlbDogJGVsLFxuICAgICAgICBlbDogJGVsWzBdLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgICAgaWYgKCFwYXJhbXMuZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIHZhciAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7XG5cbiAgICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMuaGlkZGVuQ2xhc3MpO1xuICAgICAgJGVsLnJlbW92ZUNsYXNzKHBhcmFtcy5tb2RpZmllckNsYXNzICsgcGFyYW1zLnR5cGUpO1xuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMpIHsgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5yZW1vdmVDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpOyB9XG4gICAgICBpZiAocGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgICAkZWwub2ZmKCdjbGljaycsIChcIi5cIiArIChwYXJhbXMuYnVsbGV0Q2xhc3MpKSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgUGFnaW5hdGlvbiQxID0ge1xuICAgIG5hbWU6ICdwYWdpbmF0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgZWw6IG51bGwsXG4gICAgICAgIGJ1bGxldEVsZW1lbnQ6ICdzcGFuJyxcbiAgICAgICAgY2xpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICByZW5kZXJCdWxsZXQ6IG51bGwsXG4gICAgICAgIHJlbmRlclByb2dyZXNzYmFyOiBudWxsLFxuICAgICAgICByZW5kZXJGcmFjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyQ3VzdG9tOiBudWxsLFxuICAgICAgICBwcm9ncmVzc2Jhck9wcG9zaXRlOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2J1bGxldHMnLCAvLyAnYnVsbGV0cycgb3IgJ3Byb2dyZXNzYmFyJyBvciAnZnJhY3Rpb24nIG9yICdjdXN0b20nXG4gICAgICAgIGR5bmFtaWNCdWxsZXRzOiBmYWxzZSxcbiAgICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgICBmb3JtYXRGcmFjdGlvbkN1cnJlbnQ6IGZ1bmN0aW9uIChudW1iZXIpIHsgcmV0dXJuIG51bWJlcjsgfSxcbiAgICAgICAgZm9ybWF0RnJhY3Rpb25Ub3RhbDogZnVuY3Rpb24gKG51bWJlcikgeyByZXR1cm4gbnVtYmVyOyB9LFxuICAgICAgICBidWxsZXRDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCcsXG4gICAgICAgIGJ1bGxldEFjdGl2ZUNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZScsXG4gICAgICAgIG1vZGlmaWVyQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi0nLCAvLyBORVdcbiAgICAgICAgY3VycmVudENsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tY3VycmVudCcsXG4gICAgICAgIHRvdGFsQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi10b3RhbCcsXG4gICAgICAgIGhpZGRlbkNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24taGlkZGVuJyxcbiAgICAgICAgcHJvZ3Jlc3NiYXJGaWxsQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1maWxsJyxcbiAgICAgICAgcHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzOiAnc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItb3Bwb3NpdGUnLFxuICAgICAgICBjbGlja2FibGVDbGFzczogJ3N3aXBlci1wYWdpbmF0aW9uLWNsaWNrYWJsZScsIC8vIE5FV1xuICAgICAgICBsb2NrQ2xhc3M6ICdzd2lwZXItcGFnaW5hdGlvbi1sb2NrJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgaW5pdDogUGFnaW5hdGlvbi5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICByZW5kZXI6IFBhZ2luYXRpb24ucmVuZGVyLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICB1cGRhdGU6IFBhZ2luYXRpb24udXBkYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkZXN0cm95OiBQYWdpbmF0aW9uLmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGR5bmFtaWNCdWxsZXRJbmRleDogMCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5pbml0KCk7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLnJlbmRlcigpO1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBhY3RpdmVJbmRleENoYW5nZTogZnVuY3Rpb24gYWN0aXZlSW5kZXhDaGFuZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN3aXBlci5zbmFwSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbmFwSW5kZXhDaGFuZ2U6IGZ1bmN0aW9uIHNuYXBJbmRleENoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzbGlkZXNMZW5ndGhDaGFuZ2U6IGZ1bmN0aW9uIHNsaWRlc0xlbmd0aENoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNuYXBHcmlkTGVuZ3RoQ2hhbmdlOiBmdW5jdGlvbiBzbmFwR3JpZExlbmd0aENoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24ucmVuZGVyKCk7XG4gICAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnBhZ2luYXRpb24uZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljayhlKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmVsXG4gICAgICAgICAgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGVPbkNsaWNrXG4gICAgICAgICAgJiYgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA+IDBcbiAgICAgICAgICAmJiAhJChlLnRhcmdldCkuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBzd2lwZXIucGFnaW5hdGlvbi4kZWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uU2hvdycsIHN3aXBlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdwYWdpbmF0aW9uSGlkZScsIHN3aXBlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLiRlbC50b2dnbGVDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uaGlkZGVuQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIFNjcm9sbGJhciA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gICAgICB2YXIgZHJhZ1NpemUgPSBzY3JvbGxiYXIuZHJhZ1NpemU7XG4gICAgICB2YXIgdHJhY2tTaXplID0gc2Nyb2xsYmFyLnRyYWNrU2l6ZTtcbiAgICAgIHZhciAkZHJhZ0VsID0gc2Nyb2xsYmFyLiRkcmFnRWw7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcblxuICAgICAgdmFyIG5ld1NpemUgPSBkcmFnU2l6ZTtcbiAgICAgIHZhciBuZXdQb3MgPSAodHJhY2tTaXplIC0gZHJhZ1NpemUpICogcHJvZ3Jlc3M7XG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIG5ld1BvcyA9IC1uZXdQb3M7XG4gICAgICAgIGlmIChuZXdQb3MgPiAwKSB7XG4gICAgICAgICAgbmV3U2l6ZSA9IGRyYWdTaXplIC0gbmV3UG9zO1xuICAgICAgICAgIG5ld1BvcyA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoLW5ld1BvcyArIGRyYWdTaXplID4gdHJhY2tTaXplKSB7XG4gICAgICAgICAgbmV3U2l6ZSA9IHRyYWNrU2l6ZSArIG5ld1BvcztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdQb3MgPCAwKSB7XG4gICAgICAgIG5ld1NpemUgPSBkcmFnU2l6ZSArIG5ld1BvcztcbiAgICAgICAgbmV3UG9zID0gMDtcbiAgICAgIH0gZWxzZSBpZiAobmV3UG9zICsgZHJhZ1NpemUgPiB0cmFja1NpemUpIHtcbiAgICAgICAgbmV3U2l6ZSA9IHRyYWNrU2l6ZSAtIG5ld1BvcztcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgaWYgKFN1cHBvcnQudHJhbnNmb3JtczNkKSB7XG4gICAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoXCIgKyBuZXdQb3MgKyBcInB4LCAwLCAwKVwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlWChcIiArIG5ld1BvcyArIFwicHgpXCIpKTtcbiAgICAgICAgfVxuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLndpZHRoID0gbmV3U2l6ZSArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChTdXBwb3J0LnRyYW5zZm9ybXMzZCkge1xuICAgICAgICAgICRkcmFnRWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDBweCwgXCIgKyBuZXdQb3MgKyBcInB4LCAwKVwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGRyYWdFbC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlWShcIiArIG5ld1BvcyArIFwicHgpXCIpKTtcbiAgICAgICAgfVxuICAgICAgICAkZHJhZ0VsWzBdLnN0eWxlLmhlaWdodCA9IG5ld1NpemUgKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIudGltZW91dCk7XG4gICAgICAgICRlbFswXS5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgICAgICRlbC50cmFuc2l0aW9uKDQwMCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsIHx8ICFzd2lwZXIuc2Nyb2xsYmFyLmVsKSB7IHJldHVybjsgfVxuICAgICAgc3dpcGVyLnNjcm9sbGJhci4kZHJhZ0VsLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgIH0sXG4gICAgdXBkYXRlU2l6ZTogZnVuY3Rpb24gdXBkYXRlU2l6ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgJGRyYWdFbCA9IHNjcm9sbGJhci4kZHJhZ0VsO1xuICAgICAgdmFyICRlbCA9IHNjcm9sbGJhci4kZWw7XG5cbiAgICAgICRkcmFnRWxbMF0uc3R5bGUud2lkdGggPSAnJztcbiAgICAgICRkcmFnRWxbMF0uc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICB2YXIgdHJhY2tTaXplID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJGVsWzBdLm9mZnNldFdpZHRoIDogJGVsWzBdLm9mZnNldEhlaWdodDtcblxuICAgICAgdmFyIGRpdmlkZXIgPSBzd2lwZXIuc2l6ZSAvIHN3aXBlci52aXJ0dWFsU2l6ZTtcbiAgICAgIHZhciBtb3ZlRGl2aWRlciA9IGRpdmlkZXIgKiAodHJhY2tTaXplIC8gc3dpcGVyLnNpemUpO1xuICAgICAgdmFyIGRyYWdTaXplO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdTaXplID09PSAnYXV0bycpIHtcbiAgICAgICAgZHJhZ1NpemUgPSB0cmFja1NpemUgKiBkaXZpZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ1NpemUgPSBwYXJzZUludChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnU2l6ZSwgMTApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICRkcmFnRWxbMF0uc3R5bGUud2lkdGggPSBkcmFnU2l6ZSArIFwicHhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRkcmFnRWxbMF0uc3R5bGUuaGVpZ2h0ID0gZHJhZ1NpemUgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXZpZGVyID49IDEpIHtcbiAgICAgICAgJGVsWzBdLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZWxbMF0uc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmhpZGUpIHtcbiAgICAgICAgJGVsWzBdLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgICAgfVxuICAgICAgVXRpbHMuZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgICB0cmFja1NpemU6IHRyYWNrU2l6ZSxcbiAgICAgICAgZGl2aWRlcjogZGl2aWRlcixcbiAgICAgICAgbW92ZURpdmlkZXI6IG1vdmVEaXZpZGVyLFxuICAgICAgICBkcmFnU2l6ZTogZHJhZ1NpemUsXG4gICAgICB9KTtcbiAgICAgIHNjcm9sbGJhci4kZWxbc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5sb2NrQ2xhc3MpO1xuICAgIH0sXG4gICAgZ2V0UG9pbnRlclBvc2l0aW9uOiBmdW5jdGlvbiBnZXRQb2ludGVyUG9zaXRpb24oZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHJldHVybiAoKGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGUudHlwZSA9PT0gJ3RvdWNobW92ZScpID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWCB8fCBlLmNsaWVudFgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgoZS50eXBlID09PSAndG91Y2hzdGFydCcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJykgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZIHx8IGUuY2xpZW50WSk7XG4gICAgfSxcbiAgICBzZXREcmFnUG9zaXRpb246IGZ1bmN0aW9uIHNldERyYWdQb3NpdGlvbihlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIHZhciBkcmFnU2l6ZSA9IHNjcm9sbGJhci5kcmFnU2l6ZTtcbiAgICAgIHZhciB0cmFja1NpemUgPSBzY3JvbGxiYXIudHJhY2tTaXplO1xuICAgICAgdmFyIGRyYWdTdGFydFBvcyA9IHNjcm9sbGJhci5kcmFnU3RhcnRQb3M7XG5cbiAgICAgIHZhciBwb3NpdGlvblJhdGlvO1xuICAgICAgcG9zaXRpb25SYXRpbyA9ICgoc2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbihlKSkgLSAkZWwub2Zmc2V0KClbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCddXG4gICAgICAgIC0gKGRyYWdTdGFydFBvcyAhPT0gbnVsbCA/IGRyYWdTdGFydFBvcyA6IGRyYWdTaXplIC8gMikpIC8gKHRyYWNrU2l6ZSAtIGRyYWdTaXplKTtcbiAgICAgIHBvc2l0aW9uUmF0aW8gPSBNYXRoLm1heChNYXRoLm1pbihwb3NpdGlvblJhdGlvLCAxKSwgMCk7XG4gICAgICBpZiAocnRsKSB7XG4gICAgICAgIHBvc2l0aW9uUmF0aW8gPSAxIC0gcG9zaXRpb25SYXRpbztcbiAgICAgIH1cblxuICAgICAgdmFyIHBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgKChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpICogcG9zaXRpb25SYXRpbyk7XG5cbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhwb3NpdGlvbik7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHBvc2l0aW9uKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9LFxuICAgIG9uRHJhZ1N0YXJ0OiBmdW5jdGlvbiBvbkRyYWdTdGFydChlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbDtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gdHJ1ZTtcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuZHJhZ1N0YXJ0UG9zID0gKGUudGFyZ2V0ID09PSAkZHJhZ0VsWzBdIHx8IGUudGFyZ2V0ID09PSAkZHJhZ0VsKVxuICAgICAgICA/IHNjcm9sbGJhci5nZXRQb2ludGVyUG9zaXRpb24oZSkgLSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJ10gOiBudWxsO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgJHdyYXBwZXJFbC50cmFuc2l0aW9uKDEwMCk7XG4gICAgICAkZHJhZ0VsLnRyYW5zaXRpb24oMTAwKTtcbiAgICAgIHNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24oZSk7XG5cbiAgICAgIGNsZWFyVGltZW91dChzd2lwZXIuc2Nyb2xsYmFyLmRyYWdUaW1lb3V0KTtcblxuICAgICAgJGVsLnRyYW5zaXRpb24oMCk7XG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgJGVsLmNzcygnb3BhY2l0eScsIDEpO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdTdGFydCcsIGUpO1xuICAgIH0sXG4gICAgb25EcmFnTW92ZTogZnVuY3Rpb24gb25EcmFnTW92ZShlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyICR3cmFwcGVyRWwgPSBzd2lwZXIuJHdyYXBwZXJFbDtcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyICRkcmFnRWwgPSBzY3JvbGxiYXIuJGRyYWdFbDtcblxuICAgICAgaWYgKCFzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgICAgZWxzZSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfVxuICAgICAgc2Nyb2xsYmFyLnNldERyYWdQb3NpdGlvbihlKTtcbiAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbigwKTtcbiAgICAgICRlbC50cmFuc2l0aW9uKDApO1xuICAgICAgJGRyYWdFbC50cmFuc2l0aW9uKDApO1xuICAgICAgc3dpcGVyLmVtaXQoJ3Njcm9sbGJhckRyYWdNb3ZlJywgZSk7XG4gICAgfSxcbiAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uIG9uRHJhZ0VuZChlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcblxuICAgICAgaWYgKCFzd2lwZXIuc2Nyb2xsYmFyLmlzVG91Y2hlZCkgeyByZXR1cm47IH1cbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5zY3JvbGxiYXIuZHJhZ1RpbWVvdXQpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLmRyYWdUaW1lb3V0ID0gVXRpbHMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICRlbC5jc3MoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgICAkZWwudHJhbnNpdGlvbig0MDApO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdzY3JvbGxiYXJEcmFnRW5kJywgZSk7XG4gICAgICBpZiAocGFyYW1zLnNuYXBPblJlbGVhc2UpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbmFibGVEcmFnZ2FibGU6IGZ1bmN0aW9uIGVuYWJsZURyYWdnYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzY3JvbGxiYXIgPSBzd2lwZXIuc2Nyb2xsYmFyO1xuICAgICAgdmFyIHRvdWNoRXZlbnRzVG91Y2ggPSBzd2lwZXIudG91Y2hFdmVudHNUb3VjaDtcbiAgICAgIHZhciB0b3VjaEV2ZW50c0Rlc2t0b3AgPSBzd2lwZXIudG91Y2hFdmVudHNEZXNrdG9wO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgJGVsID0gc2Nyb2xsYmFyLiRlbDtcbiAgICAgIHZhciB0YXJnZXQgPSAkZWxbMF07XG4gICAgICB2YXIgYWN0aXZlTGlzdGVuZXIgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBwYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgaWYgKCFTdXBwb3J0LnRvdWNoKSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5zdGFydCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c0Rlc2t0b3AubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5lbmQsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNUb3VjaC5zdGFydCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLm1vdmUsIHN3aXBlci5zY3JvbGxiYXIub25EcmFnTW92ZSwgYWN0aXZlTGlzdGVuZXIpO1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNhYmxlRHJhZ2dhYmxlOiBmdW5jdGlvbiBkaXNhYmxlRHJhZ2dhYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsKSB7IHJldHVybjsgfVxuICAgICAgdmFyIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgICB2YXIgdG91Y2hFdmVudHNUb3VjaCA9IHN3aXBlci50b3VjaEV2ZW50c1RvdWNoO1xuICAgICAgdmFyIHRvdWNoRXZlbnRzRGVza3RvcCA9IHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3A7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgICAgIHZhciAkZWwgPSBzY3JvbGxiYXIuJGVsO1xuICAgICAgdmFyIHRhcmdldCA9ICRlbFswXTtcbiAgICAgIHZhciBhY3RpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiBmYWxzZSwgY2FwdHVyZTogZmFsc2UgfSA6IGZhbHNlO1xuICAgICAgdmFyIHBhc3NpdmVMaXN0ZW5lciA9IFN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8geyBwYXNzaXZlOiB0cnVlLCBjYXB0dXJlOiBmYWxzZSB9IDogZmFsc2U7XG4gICAgICBpZiAoIVN1cHBvcnQudG91Y2gpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzRGVza3RvcC5tb3ZlLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ01vdmUsIGFjdGl2ZUxpc3RlbmVyKTtcbiAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIodG91Y2hFdmVudHNEZXNrdG9wLmVuZCwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0b3VjaEV2ZW50c1RvdWNoLnN0YXJ0LCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ1N0YXJ0LCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2gubW92ZSwgc3dpcGVyLnNjcm9sbGJhci5vbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHRvdWNoRXZlbnRzVG91Y2guZW5kLCBzd2lwZXIuc2Nyb2xsYmFyLm9uRHJhZ0VuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc2Nyb2xsYmFyID0gc3dpcGVyLnNjcm9sbGJhcjtcbiAgICAgIHZhciAkc3dpcGVyRWwgPSBzd2lwZXIuJGVsO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuXG4gICAgICB2YXIgJGVsID0gJChwYXJhbXMuZWwpO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgJGVsLmxlbmd0aCA+IDEgJiYgJHN3aXBlckVsLmZpbmQocGFyYW1zLmVsKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgJGVsID0gJHN3aXBlckVsLmZpbmQocGFyYW1zLmVsKTtcbiAgICAgIH1cblxuICAgICAgdmFyICRkcmFnRWwgPSAkZWwuZmluZCgoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZHJhZ0NsYXNzKSkpO1xuICAgICAgaWYgKCRkcmFnRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICRkcmFnRWwgPSAkKChcIjxkaXYgY2xhc3M9XFxcIlwiICsgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdDbGFzcykgKyBcIlxcXCI+PC9kaXY+XCIpKTtcbiAgICAgICAgJGVsLmFwcGVuZCgkZHJhZ0VsKTtcbiAgICAgIH1cblxuICAgICAgVXRpbHMuZXh0ZW5kKHNjcm9sbGJhciwge1xuICAgICAgICAkZWw6ICRlbCxcbiAgICAgICAgZWw6ICRlbFswXSxcbiAgICAgICAgJGRyYWdFbDogJGRyYWdFbCxcbiAgICAgICAgZHJhZ0VsOiAkZHJhZ0VsWzBdLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwYXJhbXMuZHJhZ2dhYmxlKSB7XG4gICAgICAgIHNjcm9sbGJhci5lbmFibGVEcmFnZ2FibGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGlzYWJsZURyYWdnYWJsZSgpO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIFNjcm9sbGJhciQxID0ge1xuICAgIG5hbWU6ICdzY3JvbGxiYXInLFxuICAgIHBhcmFtczoge1xuICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgIGVsOiBudWxsLFxuICAgICAgICBkcmFnU2l6ZTogJ2F1dG8nLFxuICAgICAgICBoaWRlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgc25hcE9uUmVsZWFzZTogdHJ1ZSxcbiAgICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLXNjcm9sbGJhci1sb2NrJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnc3dpcGVyLXNjcm9sbGJhci1kcmFnJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICBpbml0OiBTY3JvbGxiYXIuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgZGVzdHJveTogU2Nyb2xsYmFyLmRlc3Ryb3kuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHVwZGF0ZVNpemU6IFNjcm9sbGJhci51cGRhdGVTaXplLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IFNjcm9sbGJhci5zZXRUcmFuc2xhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIHNldFRyYW5zaXRpb246IFNjcm9sbGJhci5zZXRUcmFuc2l0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBlbmFibGVEcmFnZ2FibGU6IFNjcm9sbGJhci5lbmFibGVEcmFnZ2FibGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGRpc2FibGVEcmFnZ2FibGU6IFNjcm9sbGJhci5kaXNhYmxlRHJhZ2dhYmxlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXREcmFnUG9zaXRpb246IFNjcm9sbGJhci5zZXREcmFnUG9zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICAgIGdldFBvaW50ZXJQb3NpdGlvbjogU2Nyb2xsYmFyLmdldFBvaW50ZXJQb3NpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25EcmFnU3RhcnQ6IFNjcm9sbGJhci5vbkRyYWdTdGFydC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgb25EcmFnTW92ZTogU2Nyb2xsYmFyLm9uRHJhZ01vdmUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIG9uRHJhZ0VuZDogU2Nyb2xsYmFyLm9uRHJhZ0VuZC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgICAgIGRyYWdUaW1lb3V0OiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuaW5pdCgpO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnVwZGF0ZVNpemUoKTtcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgb2JzZXJ2ZXJVcGRhdGU6IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgc3dpcGVyLnNjcm9sbGJhci51cGRhdGVTaXplKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBzd2lwZXIuc2Nyb2xsYmFyLnNldFRyYW5zbGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci5zY3JvbGxiYXIuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBQYXJhbGxheCA9IHtcbiAgICBzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uIHNldFRyYW5zZm9ybShlbCwgcHJvZ3Jlc3MpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGw7XG5cbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcbiAgICAgIHZhciBydGxGYWN0b3IgPSBydGwgPyAtMSA6IDE7XG5cbiAgICAgIHZhciBwID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4JykgfHwgJzAnO1xuICAgICAgdmFyIHggPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteCcpO1xuICAgICAgdmFyIHkgPSAkZWwuYXR0cignZGF0YS1zd2lwZXItcGFyYWxsYXgteScpO1xuICAgICAgdmFyIHNjYWxlID0gJGVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlJyk7XG4gICAgICB2YXIgb3BhY2l0eSA9ICRlbC5hdHRyKCdkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5Jyk7XG5cbiAgICAgIGlmICh4IHx8IHkpIHtcbiAgICAgICAgeCA9IHggfHwgJzAnO1xuICAgICAgICB5ID0geSB8fCAnMCc7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB4ID0gcDtcbiAgICAgICAgeSA9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkgPSBwO1xuICAgICAgICB4ID0gJzAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHgpLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICAgIHggPSAocGFyc2VJbnQoeCwgMTApICogcHJvZ3Jlc3MgKiBydGxGYWN0b3IpICsgXCIlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4ID0gKHggKiBwcm9ncmVzcyAqIHJ0bEZhY3RvcikgKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBpZiAoKHkpLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgICAgIHkgPSAocGFyc2VJbnQoeSwgMTApICogcHJvZ3Jlc3MpICsgXCIlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5ID0gKHkgKiBwcm9ncmVzcykgKyBcInB4XCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3BhY2l0eSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BhY2l0eSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3VycmVudE9wYWNpdHkgPSBvcGFjaXR5IC0gKChvcGFjaXR5IC0gMSkgKiAoMSAtIE1hdGguYWJzKHByb2dyZXNzKSkpO1xuICAgICAgICAkZWxbMF0uc3R5bGUub3BhY2l0eSA9IGN1cnJlbnRPcGFjaXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBzY2FsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2NhbGUgPT09IG51bGwpIHtcbiAgICAgICAgJGVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIsIDBweClcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTY2FsZSA9IHNjYWxlIC0gKChzY2FsZSAtIDEpICogKDEgLSBNYXRoLmFicyhwcm9ncmVzcykpKTtcbiAgICAgICAgJGVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcIiwgXCIgKyB5ICsgXCIsIDBweCkgc2NhbGUoXCIgKyBjdXJyZW50U2NhbGUgKyBcIilcIikpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciAkZWwgPSBzd2lwZXIuJGVsO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgcHJvZ3Jlc3MgPSBzd2lwZXIucHJvZ3Jlc3M7XG4gICAgICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gICAgICAkZWwuY2hpbGRyZW4oJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKVxuICAgICAgICAuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsKSB7XG4gICAgICAgICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zZm9ybShlbCwgcHJvZ3Jlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIHNsaWRlcy5lYWNoKGZ1bmN0aW9uIChzbGlkZUluZGV4LCBzbGlkZUVsKSB7XG4gICAgICAgIHZhciBzbGlkZVByb2dyZXNzID0gc2xpZGVFbC5wcm9ncmVzcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxICYmIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nKSB7XG4gICAgICAgICAgc2xpZGVQcm9ncmVzcyArPSBNYXRoLmNlaWwoc2xpZGVJbmRleCAvIDIpIC0gKHByb2dyZXNzICogKHNuYXBHcmlkLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBzbGlkZVByb2dyZXNzID0gTWF0aC5taW4oTWF0aC5tYXgoc2xpZGVQcm9ncmVzcywgLTEpLCAxKTtcbiAgICAgICAgJChzbGlkZUVsKS5maW5kKCdbZGF0YS1zd2lwZXItcGFyYWxsYXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC15XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LW9wYWNpdHldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtc2NhbGVdJylcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGVsKSB7XG4gICAgICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNmb3JtKGVsLCBzbGlkZVByb2dyZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgaWYgKCBkdXJhdGlvbiA9PT0gdm9pZCAwICkgZHVyYXRpb24gPSB0aGlzLnBhcmFtcy5zcGVlZDtcblxuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgICRlbC5maW5kKCdbZGF0YS1zd2lwZXItcGFyYWxsYXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC15XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LW9wYWNpdHldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtc2NhbGVdJylcbiAgICAgICAgLmVhY2goZnVuY3Rpb24gKGluZGV4LCBwYXJhbGxheEVsKSB7XG4gICAgICAgICAgdmFyICRwYXJhbGxheEVsID0gJChwYXJhbGxheEVsKTtcbiAgICAgICAgICB2YXIgcGFyYWxsYXhEdXJhdGlvbiA9IHBhcnNlSW50KCRwYXJhbGxheEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LWR1cmF0aW9uJyksIDEwKSB8fCBkdXJhdGlvbjtcbiAgICAgICAgICBpZiAoZHVyYXRpb24gPT09IDApIHsgcGFyYWxsYXhEdXJhdGlvbiA9IDA7IH1cbiAgICAgICAgICAkcGFyYWxsYXhFbC50cmFuc2l0aW9uKHBhcmFsbGF4RHVyYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIHZhciBQYXJhbGxheCQxID0ge1xuICAgIG5hbWU6ICdwYXJhbGxheCcsXG4gICAgcGFyYW1zOiB7XG4gICAgICBwYXJhbGxheDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBwYXJhbGxheDoge1xuICAgICAgICAgIHNldFRyYW5zZm9ybTogUGFyYWxsYXguc2V0VHJhbnNmb3JtLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IFBhcmFsbGF4LnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogUGFyYWxsYXguc2V0VHJhbnNpdGlvbi5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIHN3aXBlci5vcmlnaW5hbFBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIucGFyYWxsYXguc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5wYXJhbGxheC5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgWm9vbSA9IHtcbiAgICAvLyBDYWxjIFNjYWxlIEZyb20gTXVsdGktdG91Y2hlc1xuICAgIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXM6IGZ1bmN0aW9uIGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPCAyKSB7IHJldHVybiAxOyB9XG4gICAgICB2YXIgeDEgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICB2YXIgeTEgPSBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICB2YXIgeDIgPSBlLnRhcmdldFRvdWNoZXNbMV0ucGFnZVg7XG4gICAgICB2YXIgeTIgPSBlLnRhcmdldFRvdWNoZXNbMV0ucGFnZVk7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoKE1hdGgucG93KCAoeDIgLSB4MSksIDIgKSkgKyAoTWF0aC5wb3coICh5MiAtIHkxKSwgMiApKSk7XG4gICAgICByZXR1cm4gZGlzdGFuY2U7XG4gICAgfSxcbiAgICAvLyBFdmVudHNcbiAgICBvbkdlc3R1cmVTdGFydDogZnVuY3Rpb24gb25HZXN0dXJlU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICAgIHpvb20uZmFrZUdlc3R1cmVNb3ZlZCA9IGZhbHNlO1xuICAgICAgaWYgKCFTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIGlmIChlLnR5cGUgIT09ICd0b3VjaHN0YXJ0JyB8fCAoZS50eXBlID09PSAndG91Y2hzdGFydCcgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHpvb20uZmFrZUdlc3R1cmVUb3VjaGVkID0gdHJ1ZTtcbiAgICAgICAgZ2VzdHVyZS5zY2FsZVN0YXJ0ID0gWm9vbS5nZXREaXN0YW5jZUJldHdlZW5Ub3VjaGVzKGUpO1xuICAgICAgfVxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsIHx8ICFnZXN0dXJlLiRzbGlkZUVsLmxlbmd0aCkge1xuICAgICAgICBnZXN0dXJlLiRzbGlkZUVsID0gJChlLnRhcmdldCkuY2xvc2VzdCgnLnN3aXBlci1zbGlkZScpO1xuICAgICAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbC5sZW5ndGggPT09IDApIHsgZ2VzdHVyZS4kc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTsgfVxuICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gZ2VzdHVyZS4kc2xpZGVFbC5maW5kKCdpbWcsIHN2ZywgY2FudmFzJyk7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gZ2VzdHVyZS4kaW1hZ2VFbC5wYXJlbnQoKFwiLlwiICsgKHBhcmFtcy5jb250YWluZXJDbGFzcykpKTtcbiAgICAgICAgZ2VzdHVyZS5tYXhSYXRpbyA9IGdlc3R1cmUuJGltYWdlV3JhcEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXpvb20nKSB8fCBwYXJhbXMubWF4UmF0aW87XG4gICAgICAgIGlmIChnZXN0dXJlLiRpbWFnZVdyYXBFbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBnZXN0dXJlLiRpbWFnZUVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2VzdHVyZS4kaW1hZ2VFbC50cmFuc2l0aW9uKDApO1xuICAgICAgc3dpcGVyLnpvb20uaXNTY2FsaW5nID0gdHJ1ZTtcbiAgICB9LFxuICAgIG9uR2VzdHVyZUNoYW5nZTogZnVuY3Rpb24gb25HZXN0dXJlQ2hhbmdlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcbiAgICAgIGlmICghU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgICBpZiAoZS50eXBlICE9PSAndG91Y2htb3ZlJyB8fCAoZS50eXBlID09PSAndG91Y2htb3ZlJyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZU1vdmVkID0gdHJ1ZTtcbiAgICAgICAgZ2VzdHVyZS5zY2FsZU1vdmUgPSBab29tLmdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoZSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoU3VwcG9ydC5nZXN0dXJlcykge1xuICAgICAgICB6b29tLnNjYWxlID0gZS5zY2FsZSAqIHpvb20uY3VycmVudFNjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgem9vbS5zY2FsZSA9IChnZXN0dXJlLnNjYWxlTW92ZSAvIGdlc3R1cmUuc2NhbGVTdGFydCkgKiB6b29tLmN1cnJlbnRTY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmICh6b29tLnNjYWxlID4gZ2VzdHVyZS5tYXhSYXRpbykge1xuICAgICAgICB6b29tLnNjYWxlID0gKGdlc3R1cmUubWF4UmF0aW8gLSAxKSArIChNYXRoLnBvdyggKCh6b29tLnNjYWxlIC0gZ2VzdHVyZS5tYXhSYXRpbykgKyAxKSwgMC41ICkpO1xuICAgICAgfVxuICAgICAgaWYgKHpvb20uc2NhbGUgPCBwYXJhbXMubWluUmF0aW8pIHtcbiAgICAgICAgem9vbS5zY2FsZSA9IChwYXJhbXMubWluUmF0aW8gKyAxKSAtIChNYXRoLnBvdyggKChwYXJhbXMubWluUmF0aW8gLSB6b29tLnNjYWxlKSArIDEpLCAwLjUgKSk7XG4gICAgICB9XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyAoem9vbS5zY2FsZSkgKyBcIilcIikpO1xuICAgIH0sXG4gICAgb25HZXN0dXJlRW5kOiBmdW5jdGlvbiBvbkdlc3R1cmVFbmQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgaWYgKCFTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIGlmICghem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgfHwgIXpvb20uZmFrZUdlc3R1cmVNb3ZlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS50eXBlICE9PSAndG91Y2hlbmQnIHx8IChlLnR5cGUgPT09ICd0b3VjaGVuZCcgJiYgZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPCAyICYmICFEZXZpY2UuYW5kcm9pZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgem9vbS5mYWtlR2VzdHVyZU1vdmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICB6b29tLnNjYWxlID0gTWF0aC5tYXgoTWF0aC5taW4oem9vbS5zY2FsZSwgZ2VzdHVyZS5tYXhSYXRpbyksIHBhcmFtcy5taW5SYXRpbyk7XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCkudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZShcIiArICh6b29tLnNjYWxlKSArIFwiKVwiKSk7XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IHpvb20uc2NhbGU7XG4gICAgICB6b29tLmlzU2NhbGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHpvb20uc2NhbGUgPT09IDEpIHsgZ2VzdHVyZS4kc2xpZGVFbCA9IHVuZGVmaW5lZDsgfVxuICAgIH0sXG4gICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICB2YXIgaW1hZ2UgPSB6b29tLmltYWdlO1xuICAgICAgaWYgKCFnZXN0dXJlLiRpbWFnZUVsIHx8IGdlc3R1cmUuJGltYWdlRWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgaWYgKGltYWdlLmlzVG91Y2hlZCkgeyByZXR1cm47IH1cbiAgICAgIGlmIChEZXZpY2UuYW5kcm9pZCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICAgIGltYWdlLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgICBpbWFnZS50b3VjaGVzU3RhcnQueCA9IGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgIGltYWdlLnRvdWNoZXNTdGFydC55ID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICAgIH0sXG4gICAgb25Ub3VjaE1vdmU6IGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgdmFyIGltYWdlID0gem9vbS5pbWFnZTtcbiAgICAgIHZhciB2ZWxvY2l0eSA9IHpvb20udmVsb2NpdHk7XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgICAgaWYgKCFpbWFnZS5pc1RvdWNoZWQgfHwgIWdlc3R1cmUuJHNsaWRlRWwpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmICghaW1hZ2UuaXNNb3ZlZCkge1xuICAgICAgICBpbWFnZS53aWR0aCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGltYWdlLmhlaWdodCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBpbWFnZS5zdGFydFggPSBVdGlscy5nZXRUcmFuc2xhdGUoZ2VzdHVyZS4kaW1hZ2VXcmFwRWxbMF0sICd4JykgfHwgMDtcbiAgICAgICAgaW1hZ2Uuc3RhcnRZID0gVXRpbHMuZ2V0VHJhbnNsYXRlKGdlc3R1cmUuJGltYWdlV3JhcEVsWzBdLCAneScpIHx8IDA7XG4gICAgICAgIGdlc3R1cmUuc2xpZGVXaWR0aCA9IGdlc3R1cmUuJHNsaWRlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGdlc3R1cmUuc2xpZGVIZWlnaHQgPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigwKTtcbiAgICAgICAgaWYgKHN3aXBlci5ydGwpIHtcbiAgICAgICAgICBpbWFnZS5zdGFydFggPSAtaW1hZ2Uuc3RhcnRYO1xuICAgICAgICAgIGltYWdlLnN0YXJ0WSA9IC1pbWFnZS5zdGFydFk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIERlZmluZSBpZiB3ZSBuZWVkIGltYWdlIGRyYWdcbiAgICAgIHZhciBzY2FsZWRXaWR0aCA9IGltYWdlLndpZHRoICogem9vbS5zY2FsZTtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQgPSBpbWFnZS5oZWlnaHQgKiB6b29tLnNjYWxlO1xuXG4gICAgICBpZiAoc2NhbGVkV2lkdGggPCBnZXN0dXJlLnNsaWRlV2lkdGggJiYgc2NhbGVkSGVpZ2h0IDwgZ2VzdHVyZS5zbGlkZUhlaWdodCkgeyByZXR1cm47IH1cblxuICAgICAgaW1hZ2UubWluWCA9IE1hdGgubWluKCgoZ2VzdHVyZS5zbGlkZVdpZHRoIC8gMikgLSAoc2NhbGVkV2lkdGggLyAyKSksIDApO1xuICAgICAgaW1hZ2UubWF4WCA9IC1pbWFnZS5taW5YO1xuICAgICAgaW1hZ2UubWluWSA9IE1hdGgubWluKCgoZ2VzdHVyZS5zbGlkZUhlaWdodCAvIDIpIC0gKHNjYWxlZEhlaWdodCAvIDIpKSwgMCk7XG4gICAgICBpbWFnZS5tYXhZID0gLWltYWdlLm1pblk7XG5cbiAgICAgIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICAgIGltYWdlLnRvdWNoZXNDdXJyZW50LnkgPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnID8gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZIDogZS5wYWdlWTtcblxuICAgICAgaWYgKCFpbWFnZS5pc01vdmVkICYmICF6b29tLmlzU2NhbGluZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3dpcGVyLmlzSG9yaXpvbnRhbCgpXG4gICAgICAgICAgJiYgKFxuICAgICAgICAgICAgKE1hdGguZmxvb3IoaW1hZ2UubWluWCkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRYKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC54IDwgaW1hZ2UudG91Y2hlc1N0YXJ0LngpXG4gICAgICAgICAgICB8fCAoTWF0aC5mbG9vcihpbWFnZS5tYXhYKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFgpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPiBpbWFnZS50b3VjaGVzU3RhcnQueClcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBpZiAoXG4gICAgICAgICAgIXN3aXBlci5pc0hvcml6b250YWwoKVxuICAgICAgICAgICYmIChcbiAgICAgICAgICAgIChNYXRoLmZsb29yKGltYWdlLm1pblkpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WSkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA8IGltYWdlLnRvdWNoZXNTdGFydC55KVxuICAgICAgICAgICAgfHwgKE1hdGguZmxvb3IoaW1hZ2UubWF4WSkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRZKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC55ID4gaW1hZ2UudG91Y2hlc1N0YXJ0LnkpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpbWFnZS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGltYWdlLmlzTW92ZWQgPSB0cnVlO1xuICAgICAgaW1hZ2UuY3VycmVudFggPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIGltYWdlLnRvdWNoZXNTdGFydC54KSArIGltYWdlLnN0YXJ0WDtcbiAgICAgIGltYWdlLmN1cnJlbnRZID0gKGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSBpbWFnZS50b3VjaGVzU3RhcnQueSkgKyBpbWFnZS5zdGFydFk7XG5cbiAgICAgIGlmIChpbWFnZS5jdXJyZW50WCA8IGltYWdlLm1pblgpIHtcbiAgICAgICAgaW1hZ2UuY3VycmVudFggPSAoaW1hZ2UubWluWCArIDEpIC0gKE1hdGgucG93KCAoKGltYWdlLm1pblggLSBpbWFnZS5jdXJyZW50WCkgKyAxKSwgMC44ICkpO1xuICAgICAgfVxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRYID4gaW1hZ2UubWF4WCkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WCA9IChpbWFnZS5tYXhYIC0gMSkgKyAoTWF0aC5wb3coICgoaW1hZ2UuY3VycmVudFggLSBpbWFnZS5tYXhYKSArIDEpLCAwLjggKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZS5jdXJyZW50WSA8IGltYWdlLm1pblkpIHtcbiAgICAgICAgaW1hZ2UuY3VycmVudFkgPSAoaW1hZ2UubWluWSArIDEpIC0gKE1hdGgucG93KCAoKGltYWdlLm1pblkgLSBpbWFnZS5jdXJyZW50WSkgKyAxKSwgMC44ICkpO1xuICAgICAgfVxuICAgICAgaWYgKGltYWdlLmN1cnJlbnRZID4gaW1hZ2UubWF4WSkge1xuICAgICAgICBpbWFnZS5jdXJyZW50WSA9IChpbWFnZS5tYXhZIC0gMSkgKyAoTWF0aC5wb3coICgoaW1hZ2UuY3VycmVudFkgLSBpbWFnZS5tYXhZKSArIDEpLCAwLjggKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZlbG9jaXR5XG4gICAgICBpZiAoIXZlbG9jaXR5LnByZXZQb3NpdGlvblgpIHsgdmVsb2NpdHkucHJldlBvc2l0aW9uWCA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lng7IH1cbiAgICAgIGlmICghdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgeyB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueTsgfVxuICAgICAgaWYgKCF2ZWxvY2l0eS5wcmV2VGltZSkgeyB2ZWxvY2l0eS5wcmV2VGltZSA9IERhdGUubm93KCk7IH1cbiAgICAgIHZlbG9jaXR5LnggPSAoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIC8gKERhdGUubm93KCkgLSB2ZWxvY2l0eS5wcmV2VGltZSkgLyAyO1xuICAgICAgdmVsb2NpdHkueSA9IChpbWFnZS50b3VjaGVzQ3VycmVudC55IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgLyAoRGF0ZS5ub3coKSAtIHZlbG9jaXR5LnByZXZUaW1lKSAvIDI7XG4gICAgICBpZiAoTWF0aC5hYnMoaW1hZ2UudG91Y2hlc0N1cnJlbnQueCAtIHZlbG9jaXR5LnByZXZQb3NpdGlvblgpIDwgMikgeyB2ZWxvY2l0eS54ID0gMDsgfVxuICAgICAgaWYgKE1hdGguYWJzKGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZKSA8IDIpIHsgdmVsb2NpdHkueSA9IDA7IH1cbiAgICAgIHZlbG9jaXR5LnByZXZQb3NpdGlvblggPSBpbWFnZS50b3VjaGVzQ3VycmVudC54O1xuICAgICAgdmVsb2NpdHkucHJldlBvc2l0aW9uWSA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lnk7XG4gICAgICB2ZWxvY2l0eS5wcmV2VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIChpbWFnZS5jdXJyZW50WCkgKyBcInB4LCBcIiArIChpbWFnZS5jdXJyZW50WSkgKyBcInB4LDApXCIpKTtcbiAgICB9LFxuICAgIG9uVG91Y2hFbmQ6IGZ1bmN0aW9uIG9uVG91Y2hFbmQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcbiAgICAgIHZhciBpbWFnZSA9IHpvb20uaW1hZ2U7XG4gICAgICB2YXIgdmVsb2NpdHkgPSB6b29tLnZlbG9jaXR5O1xuICAgICAgaWYgKCFnZXN0dXJlLiRpbWFnZUVsIHx8IGdlc3R1cmUuJGltYWdlRWwubGVuZ3RoID09PSAwKSB7IHJldHVybjsgfVxuICAgICAgaWYgKCFpbWFnZS5pc1RvdWNoZWQgfHwgIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICBpbWFnZS5pc01vdmVkID0gZmFsc2U7XG4gICAgICB2YXIgbW9tZW50dW1EdXJhdGlvblggPSAzMDA7XG4gICAgICB2YXIgbW9tZW50dW1EdXJhdGlvblkgPSAzMDA7XG4gICAgICB2YXIgbW9tZW50dW1EaXN0YW5jZVggPSB2ZWxvY2l0eS54ICogbW9tZW50dW1EdXJhdGlvblg7XG4gICAgICB2YXIgbmV3UG9zaXRpb25YID0gaW1hZ2UuY3VycmVudFggKyBtb21lbnR1bURpc3RhbmNlWDtcbiAgICAgIHZhciBtb21lbnR1bURpc3RhbmNlWSA9IHZlbG9jaXR5LnkgKiBtb21lbnR1bUR1cmF0aW9uWTtcbiAgICAgIHZhciBuZXdQb3NpdGlvblkgPSBpbWFnZS5jdXJyZW50WSArIG1vbWVudHVtRGlzdGFuY2VZO1xuXG4gICAgICAvLyBGaXggZHVyYXRpb25cbiAgICAgIGlmICh2ZWxvY2l0eS54ICE9PSAwKSB7IG1vbWVudHVtRHVyYXRpb25YID0gTWF0aC5hYnMoKG5ld1Bvc2l0aW9uWCAtIGltYWdlLmN1cnJlbnRYKSAvIHZlbG9jaXR5LngpOyB9XG4gICAgICBpZiAodmVsb2NpdHkueSAhPT0gMCkgeyBtb21lbnR1bUR1cmF0aW9uWSA9IE1hdGguYWJzKChuZXdQb3NpdGlvblkgLSBpbWFnZS5jdXJyZW50WSkgLyB2ZWxvY2l0eS55KTsgfVxuICAgICAgdmFyIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLm1heChtb21lbnR1bUR1cmF0aW9uWCwgbW9tZW50dW1EdXJhdGlvblkpO1xuXG4gICAgICBpbWFnZS5jdXJyZW50WCA9IG5ld1Bvc2l0aW9uWDtcbiAgICAgIGltYWdlLmN1cnJlbnRZID0gbmV3UG9zaXRpb25ZO1xuXG4gICAgICAvLyBEZWZpbmUgaWYgd2UgbmVlZCBpbWFnZSBkcmFnXG4gICAgICB2YXIgc2NhbGVkV2lkdGggPSBpbWFnZS53aWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICB2YXIgc2NhbGVkSGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogem9vbS5zY2FsZTtcbiAgICAgIGltYWdlLm1pblggPSBNYXRoLm1pbigoKGdlc3R1cmUuc2xpZGVXaWR0aCAvIDIpIC0gKHNjYWxlZFdpZHRoIC8gMikpLCAwKTtcbiAgICAgIGltYWdlLm1heFggPSAtaW1hZ2UubWluWDtcbiAgICAgIGltYWdlLm1pblkgPSBNYXRoLm1pbigoKGdlc3R1cmUuc2xpZGVIZWlnaHQgLyAyKSAtIChzY2FsZWRIZWlnaHQgLyAyKSksIDApO1xuICAgICAgaW1hZ2UubWF4WSA9IC1pbWFnZS5taW5ZO1xuICAgICAgaW1hZ2UuY3VycmVudFggPSBNYXRoLm1heChNYXRoLm1pbihpbWFnZS5jdXJyZW50WCwgaW1hZ2UubWF4WCksIGltYWdlLm1pblgpO1xuICAgICAgaW1hZ2UuY3VycmVudFkgPSBNYXRoLm1heChNYXRoLm1pbihpbWFnZS5jdXJyZW50WSwgaW1hZ2UubWF4WSksIGltYWdlLm1pblkpO1xuXG4gICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbC50cmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIChpbWFnZS5jdXJyZW50WCkgKyBcInB4LCBcIiArIChpbWFnZS5jdXJyZW50WSkgKyBcInB4LDApXCIpKTtcbiAgICB9LFxuICAgIG9uVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIGdlc3R1cmUgPSB6b29tLmdlc3R1cmU7XG4gICAgICBpZiAoZ2VzdHVyZS4kc2xpZGVFbCAmJiBzd2lwZXIucHJldmlvdXNJbmRleCAhPT0gc3dpcGVyLmFjdGl2ZUluZGV4KSB7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoMSknKTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgwLDAsMCknKTtcblxuICAgICAgICB6b29tLnNjYWxlID0gMTtcbiAgICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSAxO1xuXG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlRWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIGdlc3R1cmUuJGltYWdlV3JhcEVsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gVG9nZ2xlIFpvb21cbiAgICB0b2dnbGU6IGZ1bmN0aW9uIHRvZ2dsZShlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciB6b29tID0gc3dpcGVyLnpvb207XG5cbiAgICAgIGlmICh6b29tLnNjYWxlICYmIHpvb20uc2NhbGUgIT09IDEpIHtcbiAgICAgICAgLy8gWm9vbSBPdXRcbiAgICAgICAgem9vbS5vdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFpvb20gSW5cbiAgICAgICAgem9vbS5pbihlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluOiBmdW5jdGlvbiBpbiQxKGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuXG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICAgIHZhciBnZXN0dXJlID0gem9vbS5nZXN0dXJlO1xuICAgICAgdmFyIGltYWdlID0gem9vbS5pbWFnZTtcblxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsKSB7XG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuY2xpY2tlZFNsaWRlID8gJChzd2lwZXIuY2xpY2tlZFNsaWRlKSA6IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IGdlc3R1cmUuJHNsaWRlRWwuZmluZCgnaW1nLCBzdmcsIGNhbnZhcycpO1xuICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbCA9IGdlc3R1cmUuJGltYWdlRWwucGFyZW50KChcIi5cIiArIChwYXJhbXMuY29udGFpbmVyQ2xhc3MpKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgIGdlc3R1cmUuJHNsaWRlRWwuYWRkQ2xhc3MoKFwiXCIgKyAocGFyYW1zLnpvb21lZFNsaWRlQ2xhc3MpKSk7XG5cbiAgICAgIHZhciB0b3VjaFg7XG4gICAgICB2YXIgdG91Y2hZO1xuICAgICAgdmFyIG9mZnNldFg7XG4gICAgICB2YXIgb2Zmc2V0WTtcbiAgICAgIHZhciBkaWZmWDtcbiAgICAgIHZhciBkaWZmWTtcbiAgICAgIHZhciB0cmFuc2xhdGVYO1xuICAgICAgdmFyIHRyYW5zbGF0ZVk7XG4gICAgICB2YXIgaW1hZ2VXaWR0aDtcbiAgICAgIHZhciBpbWFnZUhlaWdodDtcbiAgICAgIHZhciBzY2FsZWRXaWR0aDtcbiAgICAgIHZhciBzY2FsZWRIZWlnaHQ7XG4gICAgICB2YXIgdHJhbnNsYXRlTWluWDtcbiAgICAgIHZhciB0cmFuc2xhdGVNaW5ZO1xuICAgICAgdmFyIHRyYW5zbGF0ZU1heFg7XG4gICAgICB2YXIgdHJhbnNsYXRlTWF4WTtcbiAgICAgIHZhciBzbGlkZVdpZHRoO1xuICAgICAgdmFyIHNsaWRlSGVpZ2h0O1xuXG4gICAgICBpZiAodHlwZW9mIGltYWdlLnRvdWNoZXNTdGFydC54ID09PSAndW5kZWZpbmVkJyAmJiBlKSB7XG4gICAgICAgIHRvdWNoWCA9IGUudHlwZSA9PT0gJ3RvdWNoZW5kJyA/IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICAgICAgICB0b3VjaFkgPSBlLnR5cGUgPT09ICd0b3VjaGVuZCcgPyBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZIDogZS5wYWdlWTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvdWNoWCA9IGltYWdlLnRvdWNoZXNTdGFydC54O1xuICAgICAgICB0b3VjaFkgPSBpbWFnZS50b3VjaGVzU3RhcnQueTtcbiAgICAgIH1cblxuICAgICAgem9vbS5zY2FsZSA9IGdlc3R1cmUuJGltYWdlV3JhcEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXpvb20nKSB8fCBwYXJhbXMubWF4UmF0aW87XG4gICAgICB6b29tLmN1cnJlbnRTY2FsZSA9IGdlc3R1cmUuJGltYWdlV3JhcEVsLmF0dHIoJ2RhdGEtc3dpcGVyLXpvb20nKSB8fCBwYXJhbXMubWF4UmF0aW87XG4gICAgICBpZiAoZSkge1xuICAgICAgICBzbGlkZVdpZHRoID0gZ2VzdHVyZS4kc2xpZGVFbFswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgc2xpZGVIZWlnaHQgPSBnZXN0dXJlLiRzbGlkZUVsWzBdLm9mZnNldEhlaWdodDtcbiAgICAgICAgb2Zmc2V0WCA9IGdlc3R1cmUuJHNsaWRlRWwub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgb2Zmc2V0WSA9IGdlc3R1cmUuJHNsaWRlRWwub2Zmc2V0KCkudG9wO1xuICAgICAgICBkaWZmWCA9IChvZmZzZXRYICsgKHNsaWRlV2lkdGggLyAyKSkgLSB0b3VjaFg7XG4gICAgICAgIGRpZmZZID0gKG9mZnNldFkgKyAoc2xpZGVIZWlnaHQgLyAyKSkgLSB0b3VjaFk7XG5cbiAgICAgICAgaW1hZ2VXaWR0aCA9IGdlc3R1cmUuJGltYWdlRWxbMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGltYWdlSGVpZ2h0ID0gZ2VzdHVyZS4kaW1hZ2VFbFswXS5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIHNjYWxlZFdpZHRoID0gaW1hZ2VXaWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICAgIHNjYWxlZEhlaWdodCA9IGltYWdlSGVpZ2h0ICogem9vbS5zY2FsZTtcblxuICAgICAgICB0cmFuc2xhdGVNaW5YID0gTWF0aC5taW4oKChzbGlkZVdpZHRoIC8gMikgLSAoc2NhbGVkV2lkdGggLyAyKSksIDApO1xuICAgICAgICB0cmFuc2xhdGVNaW5ZID0gTWF0aC5taW4oKChzbGlkZUhlaWdodCAvIDIpIC0gKHNjYWxlZEhlaWdodCAvIDIpKSwgMCk7XG4gICAgICAgIHRyYW5zbGF0ZU1heFggPSAtdHJhbnNsYXRlTWluWDtcbiAgICAgICAgdHJhbnNsYXRlTWF4WSA9IC10cmFuc2xhdGVNaW5ZO1xuXG4gICAgICAgIHRyYW5zbGF0ZVggPSBkaWZmWCAqIHpvb20uc2NhbGU7XG4gICAgICAgIHRyYW5zbGF0ZVkgPSBkaWZmWSAqIHpvb20uc2NhbGU7XG5cbiAgICAgICAgaWYgKHRyYW5zbGF0ZVggPCB0cmFuc2xhdGVNaW5YKSB7XG4gICAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1pblg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYW5zbGF0ZVggPiB0cmFuc2xhdGVNYXhYKSB7XG4gICAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1heFg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhbnNsYXRlWSA8IHRyYW5zbGF0ZU1pblkpIHtcbiAgICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWluWTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhbnNsYXRlWSA+IHRyYW5zbGF0ZU1heFkpIHtcbiAgICAgICAgICB0cmFuc2xhdGVZID0gdHJhbnNsYXRlTWF4WTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IDA7XG4gICAgICAgIHRyYW5zbGF0ZVkgPSAwO1xuICAgICAgfVxuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZChcIiArIHRyYW5zbGF0ZVggKyBcInB4LCBcIiArIHRyYW5zbGF0ZVkgKyBcInB4LDApXCIpKTtcbiAgICAgIGdlc3R1cmUuJGltYWdlRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoXCIgKyAoem9vbS5zY2FsZSkgKyBcIilcIikpO1xuICAgIH0sXG4gICAgb3V0OiBmdW5jdGlvbiBvdXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgICB2YXIgZ2VzdHVyZSA9IHpvb20uZ2VzdHVyZTtcblxuICAgICAgaWYgKCFnZXN0dXJlLiRzbGlkZUVsKSB7XG4gICAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSBzd2lwZXIuY2xpY2tlZFNsaWRlID8gJChzd2lwZXIuY2xpY2tlZFNsaWRlKSA6IHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgICAgZ2VzdHVyZS4kaW1hZ2VFbCA9IGdlc3R1cmUuJHNsaWRlRWwuZmluZCgnaW1nLCBzdmcsIGNhbnZhcycpO1xuICAgICAgICBnZXN0dXJlLiRpbWFnZVdyYXBFbCA9IGdlc3R1cmUuJGltYWdlRWwucGFyZW50KChcIi5cIiArIChwYXJhbXMuY29udGFpbmVyQ2xhc3MpKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuJGltYWdlRWwgfHwgZ2VzdHVyZS4kaW1hZ2VFbC5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgIHpvb20uc2NhbGUgPSAxO1xuICAgICAgem9vbS5jdXJyZW50U2NhbGUgPSAxO1xuICAgICAgZ2VzdHVyZS4kaW1hZ2VXcmFwRWwudHJhbnNpdGlvbigzMDApLnRyYW5zZm9ybSgndHJhbnNsYXRlM2QoMCwwLDApJyk7XG4gICAgICBnZXN0dXJlLiRpbWFnZUVsLnRyYW5zaXRpb24oMzAwKS50cmFuc2Zvcm0oJ3RyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgxKScpO1xuICAgICAgZ2VzdHVyZS4kc2xpZGVFbC5yZW1vdmVDbGFzcygoXCJcIiArIChwYXJhbXMuem9vbWVkU2xpZGVDbGFzcykpKTtcbiAgICAgIGdlc3R1cmUuJHNsaWRlRWwgPSB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICAvLyBBdHRhY2gvRGV0YWNoIEV2ZW50c1xuICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHN3aXBlci56b29tO1xuICAgICAgaWYgKHpvb20uZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgIHpvb20uZW5hYmxlZCA9IHRydWU7XG5cbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBzd2lwZXIucGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcblxuICAgICAgLy8gU2NhbGUgaW1hZ2VcbiAgICAgIGlmIChTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKCdnZXN0dXJlc3RhcnQnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKCdnZXN0dXJlY2hhbmdlJywgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZUNoYW5nZSwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oJ2dlc3R1cmVlbmQnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIGlmIChzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vbihzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub24oc3dpcGVyLnRvdWNoRXZlbnRzLm1vdmUsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVDaGFuZ2UsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgaW1hZ2VcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9uKHN3aXBlci50b3VjaEV2ZW50cy5tb3ZlLCAoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy56b29tLmNvbnRhaW5lckNsYXNzKSksIHpvb20ub25Ub3VjaE1vdmUpO1xuICAgIH0sXG4gICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICAgIGlmICghem9vbS5lbmFibGVkKSB7IHJldHVybjsgfVxuXG4gICAgICBzd2lwZXIuem9vbS5lbmFibGVkID0gZmFsc2U7XG5cbiAgICAgIHZhciBwYXNzaXZlTGlzdGVuZXIgPSBzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0JyAmJiBTdXBwb3J0LnBhc3NpdmVMaXN0ZW5lciAmJiBzd2lwZXIucGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IGZhbHNlIH0gOiBmYWxzZTtcblxuICAgICAgLy8gU2NhbGUgaW1hZ2VcbiAgICAgIGlmIChTdXBwb3J0Lmdlc3R1cmVzKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZignZ2VzdHVyZXN0YXJ0JywgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZVN0YXJ0LCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoJ2dlc3R1cmVjaGFuZ2UnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlQ2hhbmdlLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoJ2dlc3R1cmVlbmQnLCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIGlmIChzd2lwZXIudG91Y2hFdmVudHMuc3RhcnQgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbC5vZmYoc3dpcGVyLnRvdWNoRXZlbnRzLnN0YXJ0LCAnLnN3aXBlci1zbGlkZScsIHpvb20ub25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgJy5zd2lwZXItc2xpZGUnLCB6b29tLm9uR2VzdHVyZUNoYW5nZSwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWwub2ZmKHN3aXBlci50b3VjaEV2ZW50cy5lbmQsICcuc3dpcGVyLXNsaWRlJywgem9vbS5vbkdlc3R1cmVFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIE1vdmUgaW1hZ2VcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsLm9mZihzd2lwZXIudG91Y2hFdmVudHMubW92ZSwgKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuem9vbS5jb250YWluZXJDbGFzcykpLCB6b29tLm9uVG91Y2hNb3ZlKTtcbiAgICB9LFxuICB9O1xuXG4gIHZhciBab29tJDEgPSB7XG4gICAgbmFtZTogJ3pvb20nLFxuICAgIHBhcmFtczoge1xuICAgICAgem9vbToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWF4UmF0aW86IDMsXG4gICAgICAgIG1pblJhdGlvOiAxLFxuICAgICAgICB0b2dnbGU6IHRydWUsXG4gICAgICAgIGNvbnRhaW5lckNsYXNzOiAnc3dpcGVyLXpvb20tY29udGFpbmVyJyxcbiAgICAgICAgem9vbWVkU2xpZGVDbGFzczogJ3N3aXBlci1zbGlkZS16b29tZWQnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgem9vbSA9IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBjdXJyZW50U2NhbGU6IDEsXG4gICAgICAgIGlzU2NhbGluZzogZmFsc2UsXG4gICAgICAgIGdlc3R1cmU6IHtcbiAgICAgICAgICAkc2xpZGVFbDogdW5kZWZpbmVkLFxuICAgICAgICAgIHNsaWRlV2lkdGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzbGlkZUhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgICAgICRpbWFnZUVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgJGltYWdlV3JhcEVsOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWF4UmF0aW86IDMsXG4gICAgICAgIH0sXG4gICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgaXNUb3VjaGVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNNb3ZlZDogdW5kZWZpbmVkLFxuICAgICAgICAgIGN1cnJlbnRYOiB1bmRlZmluZWQsXG4gICAgICAgICAgY3VycmVudFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtaW5YOiB1bmRlZmluZWQsXG4gICAgICAgICAgbWluWTogdW5kZWZpbmVkLFxuICAgICAgICAgIG1heFg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYXhZOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydFg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFydFk6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3VjaGVzU3RhcnQ6IHt9LFxuICAgICAgICAgIHRvdWNoZXNDdXJyZW50OiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgdmVsb2NpdHk6IHtcbiAgICAgICAgICB4OiB1bmRlZmluZWQsXG4gICAgICAgICAgeTogdW5kZWZpbmVkLFxuICAgICAgICAgIHByZXZQb3NpdGlvblg6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmV2UG9zaXRpb25ZOiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJldlRpbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgICgnb25HZXN0dXJlU3RhcnQgb25HZXN0dXJlQ2hhbmdlIG9uR2VzdHVyZUVuZCBvblRvdWNoU3RhcnQgb25Ub3VjaE1vdmUgb25Ub3VjaEVuZCBvblRyYW5zaXRpb25FbmQgdG9nZ2xlIGVuYWJsZSBkaXNhYmxlIGluIG91dCcpLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgICAgICB6b29tW21ldGhvZE5hbWVdID0gWm9vbVttZXRob2ROYW1lXS5iaW5kKHN3aXBlcik7XG4gICAgICB9KTtcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgem9vbTogem9vbSxcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2NhbGUgPSAxO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN3aXBlci56b29tLCAnc2NhbGUnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBzY2FsZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgICBpZiAoc2NhbGUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaW1hZ2VFbCA9IHN3aXBlci56b29tLmdlc3R1cmUuJGltYWdlRWwgPyBzd2lwZXIuem9vbS5nZXN0dXJlLiRpbWFnZUVsWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIHNsaWRlRWwgPSBzd2lwZXIuem9vbS5nZXN0dXJlLiRzbGlkZUVsID8gc3dpcGVyLnpvb20uZ2VzdHVyZS4kc2xpZGVFbFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCd6b29tQ2hhbmdlJywgdmFsdWUsIGltYWdlRWwsIHNsaWRlRWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2FsZSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci56b29tLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHN3aXBlci56b29tLmRpc2FibGUoKTtcbiAgICAgIH0sXG4gICAgICB0b3VjaFN0YXJ0OiBmdW5jdGlvbiB0b3VjaFN0YXJ0KGUpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnpvb20uZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnpvb20ub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgfSxcbiAgICAgIHRvdWNoRW5kOiBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci56b29tLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci56b29tLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9LFxuICAgICAgZG91YmxlVGFwOiBmdW5jdGlvbiBkb3VibGVUYXAoZSkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuem9vbS5lbmFibGVkICYmIHN3aXBlci56b29tLmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy56b29tLnRvZ2dsZSkge1xuICAgICAgICAgIHN3aXBlci56b29tLnRvZ2dsZShlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci56b29tLm9uVHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIExhenkgPSB7XG4gICAgbG9hZEluU2xpZGU6IGZ1bmN0aW9uIGxvYWRJblNsaWRlKGluZGV4LCBsb2FkSW5EdXBsaWNhdGUpIHtcbiAgICAgIGlmICggbG9hZEluRHVwbGljYXRlID09PSB2b2lkIDAgKSBsb2FkSW5EdXBsaWNhdGUgPSB0cnVlO1xuXG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmxhenk7XG4gICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcblxuICAgICAgdmFyICRzbGlkZUVsID0gaXNWaXJ0dWFsXG4gICAgICAgID8gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBpbmRleCArIFwiXFxcIl1cIikpXG4gICAgICAgIDogc3dpcGVyLnNsaWRlcy5lcShpbmRleCk7XG5cbiAgICAgIHZhciAkaW1hZ2VzID0gJHNsaWRlRWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLmVsZW1lbnRDbGFzcykgKyBcIjpub3QoLlwiICsgKHBhcmFtcy5sb2FkZWRDbGFzcykgKyBcIik6bm90KC5cIiArIChwYXJhbXMubG9hZGluZ0NsYXNzKSArIFwiKVwiKSk7XG4gICAgICBpZiAoJHNsaWRlRWwuaGFzQ2xhc3MocGFyYW1zLmVsZW1lbnRDbGFzcykgJiYgISRzbGlkZUVsLmhhc0NsYXNzKHBhcmFtcy5sb2FkZWRDbGFzcykgJiYgISRzbGlkZUVsLmhhc0NsYXNzKHBhcmFtcy5sb2FkaW5nQ2xhc3MpKSB7XG4gICAgICAgICRpbWFnZXMgPSAkaW1hZ2VzLmFkZCgkc2xpZGVFbFswXSk7XG4gICAgICB9XG4gICAgICBpZiAoJGltYWdlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgICAgICRpbWFnZXMuZWFjaChmdW5jdGlvbiAoaW1hZ2VJbmRleCwgaW1hZ2VFbCkge1xuICAgICAgICB2YXIgJGltYWdlRWwgPSAkKGltYWdlRWwpO1xuICAgICAgICAkaW1hZ2VFbC5hZGRDbGFzcyhwYXJhbXMubG9hZGluZ0NsYXNzKTtcblxuICAgICAgICB2YXIgYmFja2dyb3VuZCA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtYmFja2dyb3VuZCcpO1xuICAgICAgICB2YXIgc3JjID0gJGltYWdlRWwuYXR0cignZGF0YS1zcmMnKTtcbiAgICAgICAgdmFyIHNyY3NldCA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICAgIHZhciBzaXplcyA9ICRpbWFnZUVsLmF0dHIoJ2RhdGEtc2l6ZXMnKTtcblxuICAgICAgICBzd2lwZXIubG9hZEltYWdlKCRpbWFnZUVsWzBdLCAoc3JjIHx8IGJhY2tncm91bmQpLCBzcmNzZXQsIHNpemVzLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3dpcGVyID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIgPT09IG51bGwgfHwgIXN3aXBlciB8fCAoc3dpcGVyICYmICFzd2lwZXIucGFyYW1zKSB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICAkaW1hZ2VFbC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAoXCJ1cmwoXFxcIlwiICsgYmFja2dyb3VuZCArIFwiXFxcIilcIikpO1xuICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgICAgICAgJGltYWdlRWwuYXR0cignc3Jjc2V0Jywgc3Jjc2V0KTtcbiAgICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zcmNzZXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaXplcykge1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5hdHRyKCdzaXplcycsIHNpemVzKTtcbiAgICAgICAgICAgICAgJGltYWdlRWwucmVtb3ZlQXR0cignZGF0YS1zaXplcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgICAgICAgICAkaW1hZ2VFbC5yZW1vdmVBdHRyKCdkYXRhLXNyYycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICRpbWFnZUVsLmFkZENsYXNzKHBhcmFtcy5sb2FkZWRDbGFzcykucmVtb3ZlQ2xhc3MocGFyYW1zLmxvYWRpbmdDbGFzcyk7XG4gICAgICAgICAgJHNsaWRlRWwuZmluZCgoXCIuXCIgKyAocGFyYW1zLnByZWxvYWRlckNsYXNzKSkpLnJlbW92ZSgpO1xuICAgICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3AgJiYgbG9hZEluRHVwbGljYXRlKSB7XG4gICAgICAgICAgICB2YXIgc2xpZGVPcmlnaW5hbEluZGV4ID0gJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgICAgIGlmICgkc2xpZGVFbC5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICAgIHZhciBvcmlnaW5hbFNsaWRlID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHNsaWRlT3JpZ2luYWxJbmRleCArIFwiXFxcIl06bm90KC5cIiArIChzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpICsgXCIpXCIpKTtcbiAgICAgICAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUob3JpZ2luYWxTbGlkZS5pbmRleCgpLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgZHVwbGljYXRlZFNsaWRlID0gc3dpcGVyLiR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykgKyBcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIgKyBzbGlkZU9yaWdpbmFsSW5kZXggKyBcIlxcXCJdXCIpKTtcbiAgICAgICAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoZHVwbGljYXRlZFNsaWRlLmluZGV4KCksIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZVJlYWR5JywgJHNsaWRlRWxbMF0sICRpbWFnZUVsWzBdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3dpcGVyLmVtaXQoJ2xhenlJbWFnZUxvYWQnLCAkc2xpZGVFbFswXSwgJGltYWdlRWxbMF0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBsb2FkOiBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyIHN3aXBlclBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXJQYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlclBhcmFtcy5sYXp5O1xuXG4gICAgICB2YXIgc2xpZGVzUGVyVmlldyA9IHN3aXBlclBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgaWYgKHNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgICBzbGlkZXNQZXJWaWV3ID0gMDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2xpZGVFeGlzdChpbmRleCkge1xuICAgICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgaWYgKCR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlclBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIGluZGV4ICsgXCJcXFwiXVwiKSkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2xpZGVzW2luZGV4XSkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzbGlkZUluZGV4KHNsaWRlRWwpIHtcbiAgICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICAgIHJldHVybiAkKHNsaWRlRWwpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICQoc2xpZGVFbCkuaW5kZXgoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzd2lwZXIubGF6eS5pbml0aWFsSW1hZ2VMb2FkZWQpIHsgc3dpcGVyLmxhenkuaW5pdGlhbEltYWdlTG9hZGVkID0gdHJ1ZTsgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNWaXNpYmlsaXR5KSB7XG4gICAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oKFwiLlwiICsgKHN3aXBlclBhcmFtcy5zbGlkZVZpc2libGVDbGFzcykpKS5lYWNoKGZ1bmN0aW9uIChlbEluZGV4LCBzbGlkZUVsKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gaXNWaXJ0dWFsID8gJChzbGlkZUVsKS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpIDogJChzbGlkZUVsKS5pbmRleCgpO1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHNsaWRlc1BlclZpZXcgPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBhY3RpdmVJbmRleDsgaSA8IGFjdGl2ZUluZGV4ICsgc2xpZGVzUGVyVmlldzsgaSArPSAxKSB7XG4gICAgICAgICAgaWYgKHNsaWRlRXhpc3QoaSkpIHsgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoaSk7IH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLmxhenkubG9hZEluU2xpZGUoYWN0aXZlSW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5sb2FkUHJldk5leHQpIHtcbiAgICAgICAgaWYgKHNsaWRlc1BlclZpZXcgPiAxIHx8IChwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50ICYmIHBhcmFtcy5sb2FkUHJldk5leHRBbW91bnQgPiAxKSkge1xuICAgICAgICAgIHZhciBhbW91bnQgPSBwYXJhbXMubG9hZFByZXZOZXh0QW1vdW50O1xuICAgICAgICAgIHZhciBzcHYgPSBzbGlkZXNQZXJWaWV3O1xuICAgICAgICAgIHZhciBtYXhJbmRleCA9IE1hdGgubWluKGFjdGl2ZUluZGV4ICsgc3B2ICsgTWF0aC5tYXgoYW1vdW50LCBzcHYpLCBzbGlkZXMubGVuZ3RoKTtcbiAgICAgICAgICB2YXIgbWluSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCAtIE1hdGgubWF4KHNwdiwgYW1vdW50KSwgMCk7XG4gICAgICAgICAgLy8gTmV4dCBTbGlkZXNcbiAgICAgICAgICBmb3IgKHZhciBpJDEgPSBhY3RpdmVJbmRleCArIHNsaWRlc1BlclZpZXc7IGkkMSA8IG1heEluZGV4OyBpJDEgKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNsaWRlRXhpc3QoaSQxKSkgeyBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpJDEpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFByZXYgU2xpZGVzXG4gICAgICAgICAgZm9yICh2YXIgaSQyID0gbWluSW5kZXg7IGkkMiA8IGFjdGl2ZUluZGV4OyBpJDIgKz0gMSkge1xuICAgICAgICAgICAgaWYgKHNsaWRlRXhpc3QoaSQyKSkgeyBzd2lwZXIubGF6eS5sb2FkSW5TbGlkZShpJDIpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBuZXh0U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXJQYXJhbXMuc2xpZGVOZXh0Q2xhc3MpKSk7XG4gICAgICAgICAgaWYgKG5leHRTbGlkZS5sZW5ndGggPiAwKSB7IHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKHNsaWRlSW5kZXgobmV4dFNsaWRlKSk7IH1cblxuICAgICAgICAgIHZhciBwcmV2U2xpZGUgPSAkd3JhcHBlckVsLmNoaWxkcmVuKChcIi5cIiArIChzd2lwZXJQYXJhbXMuc2xpZGVQcmV2Q2xhc3MpKSk7XG4gICAgICAgICAgaWYgKHByZXZTbGlkZS5sZW5ndGggPiAwKSB7IHN3aXBlci5sYXp5LmxvYWRJblNsaWRlKHNsaWRlSW5kZXgocHJldlNsaWRlKSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIExhenkkMSA9IHtcbiAgICBuYW1lOiAnbGF6eScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBsYXp5OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBsb2FkUHJldk5leHQ6IGZhbHNlLFxuICAgICAgICBsb2FkUHJldk5leHRBbW91bnQ6IDEsXG4gICAgICAgIGxvYWRPblRyYW5zaXRpb25TdGFydDogZmFsc2UsXG5cbiAgICAgICAgZWxlbWVudENsYXNzOiAnc3dpcGVyLWxhenknLFxuICAgICAgICBsb2FkaW5nQ2xhc3M6ICdzd2lwZXItbGF6eS1sb2FkaW5nJyxcbiAgICAgICAgbG9hZGVkQ2xhc3M6ICdzd2lwZXItbGF6eS1sb2FkZWQnLFxuICAgICAgICBwcmVsb2FkZXJDbGFzczogJ3N3aXBlci1sYXp5LXByZWxvYWRlcicsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgbGF6eToge1xuICAgICAgICAgIGluaXRpYWxJbWFnZUxvYWRlZDogZmFsc2UsXG4gICAgICAgICAgbG9hZDogTGF6eS5sb2FkLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBsb2FkSW5TbGlkZTogTGF6eS5sb2FkSW5TbGlkZS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMucHJlbG9hZEltYWdlcykge1xuICAgICAgICAgIHN3aXBlci5wYXJhbXMucHJlbG9hZEltYWdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxhenkuZW5hYmxlZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmIHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlID09PSAwKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2Nyb2xsOiBmdW5jdGlvbiBzY3JvbGwoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiAhc3dpcGVyLnBhcmFtcy5mcmVlTW9kZVN0aWNreSkge1xuICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2Nyb2xsYmFyRHJhZ01vdmU6IGZ1bmN0aW9uIHNjcm9sbGJhckRyYWdNb3ZlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvblN0YXJ0OiBmdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmVuYWJsZWQpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sYXp5LmxvYWRPblRyYW5zaXRpb25TdGFydCB8fCAoIXN3aXBlci5wYXJhbXMubGF6eS5sb2FkT25UcmFuc2l0aW9uU3RhcnQgJiYgIXN3aXBlci5sYXp5LmluaXRpYWxJbWFnZUxvYWRlZCkpIHtcbiAgICAgICAgICAgIHN3aXBlci5sYXp5LmxvYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cmFuc2l0aW9uRW5kOiBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubGF6eS5lbmFibGVkICYmICFzd2lwZXIucGFyYW1zLmxhenkubG9hZE9uVHJhbnNpdGlvblN0YXJ0KSB7XG4gICAgICAgICAgc3dpcGVyLmxhenkubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLyogZXNsaW50IG5vLWJpdHdpc2U6IFtcImVycm9yXCIsIHsgXCJhbGxvd1wiOiBbXCI+PlwiXSB9XSAqL1xuXG4gIHZhciBDb250cm9sbGVyID0ge1xuICAgIExpbmVhclNwbGluZTogZnVuY3Rpb24gTGluZWFyU3BsaW5lKHgsIHkpIHtcbiAgICAgIHZhciBiaW5hcnlTZWFyY2ggPSAoZnVuY3Rpb24gc2VhcmNoKCkge1xuICAgICAgICB2YXIgbWF4SW5kZXg7XG4gICAgICAgIHZhciBtaW5JbmRleDtcbiAgICAgICAgdmFyIGd1ZXNzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFycmF5LCB2YWwpIHtcbiAgICAgICAgICBtaW5JbmRleCA9IC0xO1xuICAgICAgICAgIG1heEluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChtYXhJbmRleCAtIG1pbkluZGV4ID4gMSkge1xuICAgICAgICAgICAgZ3Vlc3MgPSBtYXhJbmRleCArIG1pbkluZGV4ID4+IDE7XG4gICAgICAgICAgICBpZiAoYXJyYXlbZ3Vlc3NdIDw9IHZhbCkge1xuICAgICAgICAgICAgICBtaW5JbmRleCA9IGd1ZXNzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWF4SW5kZXggPSBndWVzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1heEluZGV4O1xuICAgICAgICB9O1xuICAgICAgfSgpKTtcbiAgICAgIHRoaXMueCA9IHg7XG4gICAgICB0aGlzLnkgPSB5O1xuICAgICAgdGhpcy5sYXN0SW5kZXggPSB4Lmxlbmd0aCAtIDE7XG4gICAgICAvLyBHaXZlbiBhbiB4IHZhbHVlICh4MiksIHJldHVybiB0aGUgZXhwZWN0ZWQgeTIgdmFsdWU6XG4gICAgICAvLyAoeDEseTEpIGlzIHRoZSBrbm93biBwb2ludCBiZWZvcmUgZ2l2ZW4gdmFsdWUsXG4gICAgICAvLyAoeDMseTMpIGlzIHRoZSBrbm93biBwb2ludCBhZnRlciBnaXZlbiB2YWx1ZS5cbiAgICAgIHZhciBpMTtcbiAgICAgIHZhciBpMztcblxuICAgICAgdGhpcy5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIGludGVycG9sYXRlKHgyKSB7XG4gICAgICAgIGlmICgheDIpIHsgcmV0dXJuIDA7IH1cblxuICAgICAgICAvLyBHZXQgdGhlIGluZGV4ZXMgb2YgeDEgYW5kIHgzICh0aGUgYXJyYXkgaW5kZXhlcyBiZWZvcmUgYW5kIGFmdGVyIGdpdmVuIHgyKTpcbiAgICAgICAgaTMgPSBiaW5hcnlTZWFyY2godGhpcy54LCB4Mik7XG4gICAgICAgIGkxID0gaTMgLSAxO1xuXG4gICAgICAgIC8vIFdlIGhhdmUgb3VyIGluZGV4ZXMgaTEgJiBpMywgc28gd2UgY2FuIGNhbGN1bGF0ZSBhbHJlYWR5OlxuICAgICAgICAvLyB5MiA6PSAoKHgy4oiSeDEpIMOXICh5M+KIknkxKSkgw7cgKHgz4oiSeDEpICsgeTFcbiAgICAgICAgcmV0dXJuICgoKHgyIC0gdGhpcy54W2kxXSkgKiAodGhpcy55W2kzXSAtIHRoaXMueVtpMV0pKSAvICh0aGlzLnhbaTNdIC0gdGhpcy54W2kxXSkpICsgdGhpcy55W2kxXTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8vIHh4eDogZm9yIG5vdyBpIHdpbGwganVzdCBzYXZlIG9uZSBzcGxpbmUgZnVuY3Rpb24gdG8gdG9cbiAgICBnZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uOiBmdW5jdGlvbiBnZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uKGMpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gc3dpcGVyLnBhcmFtcy5sb29wXG4gICAgICAgICAgPyBuZXcgQ29udHJvbGxlci5MaW5lYXJTcGxpbmUoc3dpcGVyLnNsaWRlc0dyaWQsIGMuc2xpZGVzR3JpZClcbiAgICAgICAgICA6IG5ldyBDb250cm9sbGVyLkxpbmVhclNwbGluZShzd2lwZXIuc25hcEdyaWQsIGMuc25hcEdyaWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoc2V0VHJhbnNsYXRlJDEsIGJ5Q29udHJvbGxlcikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgY29udHJvbGxlZCA9IHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2w7XG4gICAgICB2YXIgbXVsdGlwbGllcjtcbiAgICAgIHZhciBjb250cm9sbGVkVHJhbnNsYXRlO1xuICAgICAgZnVuY3Rpb24gc2V0Q29udHJvbGxlZFRyYW5zbGF0ZShjKSB7XG4gICAgICAgIC8vIHRoaXMgd2lsbCBjcmVhdGUgYW4gSW50ZXJwb2xhdGUgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHNuYXBHcmlkc1xuICAgICAgICAvLyB4IGlzIHRoZSBHcmlkIG9mIHRoZSBzY3JvbGxlZCBzY3JvbGxlciBhbmQgeSB3aWxsIGJlIHRoZSBjb250cm9sbGVkIHNjcm9sbGVyXG4gICAgICAgIC8vIGl0IG1ha2VzIHNlbnNlIHRvIGNyZWF0ZSB0aGlzIG9ubHkgb25jZSBhbmQgcmVjYWxsIGl0IGZvciB0aGUgaW50ZXJwb2xhdGlvblxuICAgICAgICAvLyB0aGUgZnVuY3Rpb24gZG9lcyBhIGxvdCBvZiB2YWx1ZSBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICB2YXIgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgIHN3aXBlci5jb250cm9sbGVyLmdldEludGVycG9sYXRlRnVuY3Rpb24oYyk7XG4gICAgICAgICAgLy8gaSBhbSBub3Qgc3VyZSB3aHkgdGhlIHZhbHVlcyBoYXZlIHRvIGJlIG11bHRpcGxpY2F0ZWQgdGhpcyB3YXksIHRyaWVkIHRvIGludmVydCB0aGUgc25hcEdyaWRcbiAgICAgICAgICAvLyBidXQgaXQgZGlkIG5vdCB3b3JrIG91dFxuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAtc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lLmludGVycG9sYXRlKC10cmFuc2xhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVkVHJhbnNsYXRlIHx8IHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgICAgICBtdWx0aXBsaWVyID0gKGMubWF4VHJhbnNsYXRlKCkgLSBjLm1pblRyYW5zbGF0ZSgpKSAvIChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgICAgIGNvbnRyb2xsZWRUcmFuc2xhdGUgPSAoKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgKiBtdWx0aXBsaWVyKSArIGMubWluVHJhbnNsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmludmVyc2UpIHtcbiAgICAgICAgICBjb250cm9sbGVkVHJhbnNsYXRlID0gYy5tYXhUcmFuc2xhdGUoKSAtIGNvbnRyb2xsZWRUcmFuc2xhdGU7XG4gICAgICAgIH1cbiAgICAgICAgYy51cGRhdGVQcm9ncmVzcyhjb250cm9sbGVkVHJhbnNsYXRlKTtcbiAgICAgICAgYy5zZXRUcmFuc2xhdGUoY29udHJvbGxlZFRyYW5zbGF0ZSwgc3dpcGVyKTtcbiAgICAgICAgYy51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBjLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xsZWQpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udHJvbGxlZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChjb250cm9sbGVkW2ldICE9PSBieUNvbnRyb2xsZXIgJiYgY29udHJvbGxlZFtpXSBpbnN0YW5jZW9mIFN3aXBlcikge1xuICAgICAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zbGF0ZShjb250cm9sbGVkW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbGxlZCBpbnN0YW5jZW9mIFN3aXBlciAmJiBieUNvbnRyb2xsZXIgIT09IGNvbnRyb2xsZWQpIHtcbiAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zbGF0ZShjb250cm9sbGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgY29udHJvbGxlZCA9IHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2w7XG4gICAgICB2YXIgaTtcbiAgICAgIGZ1bmN0aW9uIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGMpIHtcbiAgICAgICAgYy5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBzd2lwZXIpO1xuICAgICAgICBpZiAoZHVyYXRpb24gIT09IDApIHtcbiAgICAgICAgICBjLnRyYW5zaXRpb25TdGFydCgpO1xuICAgICAgICAgIGlmIChjLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICAgICBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGMudXBkYXRlQXV0b0hlaWdodCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGMuJHdyYXBwZXJFbC50cmFuc2l0aW9uRW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghY29udHJvbGxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIGlmIChjLnBhcmFtcy5sb29wICYmIHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5ieSA9PT0gJ3NsaWRlJykge1xuICAgICAgICAgICAgICBjLmxvb3BGaXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGMudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sbGVkKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29udHJvbGxlZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGlmIChjb250cm9sbGVkW2ldICE9PSBieUNvbnRyb2xsZXIgJiYgY29udHJvbGxlZFtpXSBpbnN0YW5jZW9mIFN3aXBlcikge1xuICAgICAgICAgICAgc2V0Q29udHJvbGxlZFRyYW5zaXRpb24oY29udHJvbGxlZFtpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZWQgaW5zdGFuY2VvZiBTd2lwZXIgJiYgYnlDb250cm9sbGVyICE9PSBjb250cm9sbGVkKSB7XG4gICAgICAgIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGNvbnRyb2xsZWQpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG4gIHZhciBDb250cm9sbGVyJDEgPSB7XG4gICAgbmFtZTogJ2NvbnRyb2xsZXInLFxuICAgIHBhcmFtczoge1xuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgICAgIGludmVyc2U6IGZhbHNlLFxuICAgICAgICBieTogJ3NsaWRlJywgLy8gb3IgJ2NvbnRhaW5lcidcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgICAgY29udHJvbDogc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2wsXG4gICAgICAgICAgZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbjogQ29udHJvbGxlci5nZXRJbnRlcnBvbGF0ZUZ1bmN0aW9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IENvbnRyb2xsZXIuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBDb250cm9sbGVyLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSB7IHJldHVybjsgfVxuICAgICAgICBpZiAoc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lKSB7XG4gICAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIuY29udHJvbGxlci5zcGxpbmU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvYnNlcnZlclVwZGF0ZTogZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChzd2lwZXIuY29udHJvbGxlci5zcGxpbmUpIHtcbiAgICAgICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5jb250cm9sbGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIGExMXkgPSB7XG4gICAgbWFrZUVsRm9jdXNhYmxlOiBmdW5jdGlvbiBtYWtlRWxGb2N1c2FibGUoJGVsKSB7XG4gICAgICAkZWwuYXR0cigndGFiSW5kZXgnLCAnMCcpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGFkZEVsUm9sZTogZnVuY3Rpb24gYWRkRWxSb2xlKCRlbCwgcm9sZSkge1xuICAgICAgJGVsLmF0dHIoJ3JvbGUnLCByb2xlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBhZGRFbExhYmVsOiBmdW5jdGlvbiBhZGRFbExhYmVsKCRlbCwgbGFiZWwpIHtcbiAgICAgICRlbC5hdHRyKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICAgICAgcmV0dXJuICRlbDtcbiAgICB9LFxuICAgIGRpc2FibGVFbDogZnVuY3Rpb24gZGlzYWJsZUVsKCRlbCkge1xuICAgICAgJGVsLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBlbmFibGVFbDogZnVuY3Rpb24gZW5hYmxlRWwoJGVsKSB7XG4gICAgICAkZWwuYXR0cignYXJpYS1kaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiAkZWw7XG4gICAgfSxcbiAgICBvbkVudGVyS2V5OiBmdW5jdGlvbiBvbkVudGVyS2V5KGUpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICAgIGlmIChlLmtleUNvZGUgIT09IDEzKSB7IHJldHVybjsgfVxuICAgICAgdmFyICR0YXJnZXRFbCA9ICQoZS50YXJnZXQpO1xuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpKSB7XG4gICAgICAgIGlmICghKHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkubm90aWZ5KHBhcmFtcy5sYXN0U2xpZGVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCAmJiAkdGFyZ2V0RWwuaXMoc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkpIHtcbiAgICAgICAgaWYgKCEoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3ApKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLmZpcnN0U2xpZGVNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5ub3RpZnkocGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgJHRhcmdldEVsLmlzKChcIi5cIiArIChzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0Q2xhc3MpKSkpIHtcbiAgICAgICAgJHRhcmdldEVsWzBdLmNsaWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeShtZXNzYWdlKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBub3RpZmljYXRpb24gPSBzd2lwZXIuYTExeS5saXZlUmVnaW9uO1xuICAgICAgaWYgKG5vdGlmaWNhdGlvbi5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICBub3RpZmljYXRpb24uaHRtbCgnJyk7XG4gICAgICBub3RpZmljYXRpb24uaHRtbChtZXNzYWdlKTtcbiAgICB9LFxuICAgIHVwZGF0ZU5hdmlnYXRpb246IGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb24oKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkgeyByZXR1cm47IH1cbiAgICAgIHZhciByZWYgPSBzd2lwZXIubmF2aWdhdGlvbjtcbiAgICAgIHZhciAkbmV4dEVsID0gcmVmLiRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbCA9IHJlZi4kcHJldkVsO1xuXG4gICAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmRpc2FibGVFbCgkcHJldkVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5lbmFibGVFbCgkcHJldkVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5kaXNhYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLmExMXkuZW5hYmxlRWwoJG5leHRFbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVBhZ2luYXRpb246IGZ1bmN0aW9uIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMuZWFjaChmdW5jdGlvbiAoYnVsbGV0SW5kZXgsIGJ1bGxldEVsKSB7XG4gICAgICAgICAgdmFyICRidWxsZXRFbCA9ICQoYnVsbGV0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkYnVsbGV0RWwpO1xuICAgICAgICAgIHN3aXBlci5hMTF5LmFkZEVsUm9sZSgkYnVsbGV0RWwsICdidXR0b24nKTtcbiAgICAgICAgICBzd2lwZXIuYTExeS5hZGRFbExhYmVsKCRidWxsZXRFbCwgcGFyYW1zLnBhZ2luYXRpb25CdWxsZXRNZXNzYWdlLnJlcGxhY2UoL3t7aW5kZXh9fS8sICRidWxsZXRFbC5pbmRleCgpICsgMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcblxuICAgICAgc3dpcGVyLiRlbC5hcHBlbmQoc3dpcGVyLmExMXkubGl2ZVJlZ2lvbik7XG5cbiAgICAgIC8vIE5hdmlnYXRpb25cbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgICB2YXIgJG5leHRFbDtcbiAgICAgIHZhciAkcHJldkVsO1xuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpIHtcbiAgICAgICAgJG5leHRFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWw7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkge1xuICAgICAgICAkcHJldkVsID0gc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbDtcbiAgICAgIH1cbiAgICAgIGlmICgkbmV4dEVsKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkbmV4dEVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRuZXh0RWwsICdidXR0b24nKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkbmV4dEVsLCBwYXJhbXMubmV4dFNsaWRlTWVzc2FnZSk7XG4gICAgICAgICRuZXh0RWwub24oJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cbiAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgIHN3aXBlci5hMTF5Lm1ha2VFbEZvY3VzYWJsZSgkcHJldkVsKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxSb2xlKCRwcmV2RWwsICdidXR0b24nKTtcbiAgICAgICAgc3dpcGVyLmExMXkuYWRkRWxMYWJlbCgkcHJldkVsLCBwYXJhbXMucHJldlNsaWRlTWVzc2FnZSk7XG4gICAgICAgICRwcmV2RWwub24oJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFnaW5hdGlvblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub24oJ2tleWRvd24nLCAoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSksIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5hMTF5LmxpdmVSZWdpb24gJiYgc3dpcGVyLmExMXkubGl2ZVJlZ2lvbi5sZW5ndGggPiAwKSB7IHN3aXBlci5hMTF5LmxpdmVSZWdpb24ucmVtb3ZlKCk7IH1cblxuICAgICAgdmFyICRuZXh0RWw7XG4gICAgICB2YXIgJHByZXZFbDtcbiAgICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAgICRuZXh0RWwgPSBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWw7XG4gICAgICB9XG4gICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICAkbmV4dEVsLm9mZigna2V5ZG93bicsIHN3aXBlci5hMTF5Lm9uRW50ZXJLZXkpO1xuICAgICAgfVxuICAgICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICAgJHByZXZFbC5vZmYoJ2tleWRvd24nLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFnaW5hdGlvblxuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5jbGlja2FibGUgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub2ZmKCdrZXlkb3duJywgKFwiLlwiICsgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcykpLCBzd2lwZXIuYTExeS5vbkVudGVyS2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuICB2YXIgQTExeSA9IHtcbiAgICBuYW1lOiAnYTExeScsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhMTF5OiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG5vdGlmaWNhdGlvbkNsYXNzOiAnc3dpcGVyLW5vdGlmaWNhdGlvbicsXG4gICAgICAgIHByZXZTbGlkZU1lc3NhZ2U6ICdQcmV2aW91cyBzbGlkZScsXG4gICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6ICdOZXh0IHNsaWRlJyxcbiAgICAgICAgZmlyc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBmaXJzdCBzbGlkZScsXG4gICAgICAgIGxhc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBsYXN0IHNsaWRlJyxcbiAgICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6ICdHbyB0byBzbGlkZSB7e2luZGV4fX0nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGExMXk6IHtcbiAgICAgICAgICBsaXZlUmVnaW9uOiAkKChcIjxzcGFuIGNsYXNzPVxcXCJcIiArIChzd2lwZXIucGFyYW1zLmExMXkubm90aWZpY2F0aW9uQ2xhc3MpICsgXCJcXFwiIGFyaWEtbGl2ZT1cXFwiYXNzZXJ0aXZlXFxcIiBhcmlhLWF0b21pYz1cXFwidHJ1ZVxcXCI+PC9zcGFuPlwiKSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKGExMXkpLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgc3dpcGVyLmExMXlbbWV0aG9kTmFtZV0gPSBhMTF5W21ldGhvZE5hbWVdLmJpbmQoc3dpcGVyKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb246IHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuYTExeS5pbml0KCk7XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB0b0VkZ2U6IGZ1bmN0aW9uIHRvRWRnZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZU5hdmlnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBmcm9tRWRnZTogZnVuY3Rpb24gZnJvbUVkZ2UoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuYTExeS51cGRhdGVOYXZpZ2F0aW9uKCk7XG4gICAgICB9LFxuICAgICAgcGFnaW5hdGlvblVwZGF0ZTogZnVuY3Rpb24gcGFnaW5hdGlvblVwZGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5hMTF5LnVwZGF0ZVBhZ2luYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmExMXkuZGVzdHJveSgpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBIaXN0b3J5ID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5KSB7IHJldHVybjsgfVxuICAgICAgaWYgKCF3aW4uaGlzdG9yeSB8fCAhd2luLmhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgICAgIHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24uZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBoaXN0b3J5ID0gc3dpcGVyLmhpc3Rvcnk7XG4gICAgICBoaXN0b3J5LmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGhpc3RvcnkucGF0aHMgPSBIaXN0b3J5LmdldFBhdGhWYWx1ZXMoKTtcbiAgICAgIGlmICghaGlzdG9yeS5wYXRocy5rZXkgJiYgIWhpc3RvcnkucGF0aHMudmFsdWUpIHsgcmV0dXJuOyB9XG4gICAgICBoaXN0b3J5LnNjcm9sbFRvU2xpZGUoMCwgaGlzdG9yeS5wYXRocy52YWx1ZSwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgICAgaWYgKCFzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHN3aXBlci5oaXN0b3J5LnNldEhpc3RvcnlQb3BTdGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgd2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc3dpcGVyLmhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEhpc3RvcnlQb3BTdGF0ZTogZnVuY3Rpb24gc2V0SGlzdG9yeVBvcFN0YXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBzd2lwZXIuaGlzdG9yeS5wYXRocyA9IEhpc3RvcnkuZ2V0UGF0aFZhbHVlcygpO1xuICAgICAgc3dpcGVyLmhpc3Rvcnkuc2Nyb2xsVG9TbGlkZShzd2lwZXIucGFyYW1zLnNwZWVkLCBzd2lwZXIuaGlzdG9yeS5wYXRocy52YWx1ZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgZ2V0UGF0aFZhbHVlczogZnVuY3Rpb24gZ2V0UGF0aFZhbHVlcygpIHtcbiAgICAgIHZhciBwYXRoQXJyYXkgPSB3aW4ubG9jYXRpb24ucGF0aG5hbWUuc2xpY2UoMSkuc3BsaXQoJy8nKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHsgcmV0dXJuIHBhcnQgIT09ICcnOyB9KTtcbiAgICAgIHZhciB0b3RhbCA9IHBhdGhBcnJheS5sZW5ndGg7XG4gICAgICB2YXIga2V5ID0gcGF0aEFycmF5W3RvdGFsIC0gMl07XG4gICAgICB2YXIgdmFsdWUgPSBwYXRoQXJyYXlbdG90YWwgLSAxXTtcbiAgICAgIHJldHVybiB7IGtleToga2V5LCB2YWx1ZTogdmFsdWUgfTtcbiAgICB9LFxuICAgIHNldEhpc3Rvcnk6IGZ1bmN0aW9uIHNldEhpc3Rvcnkoa2V5LCBpbmRleCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5oaXN0b3J5LmluaXRpYWxpemVkIHx8ICFzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkgeyByZXR1cm47IH1cbiAgICAgIHZhciBzbGlkZSA9IHN3aXBlci5zbGlkZXMuZXEoaW5kZXgpO1xuICAgICAgdmFyIHZhbHVlID0gSGlzdG9yeS5zbHVnaWZ5KHNsaWRlLmF0dHIoJ2RhdGEtaGlzdG9yeScpKTtcbiAgICAgIGlmICghd2luLmxvY2F0aW9uLnBhdGhuYW1lLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSBrZXkgKyBcIi9cIiArIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHdpbi5oaXN0b3J5LnN0YXRlO1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAmJiBjdXJyZW50U3RhdGUudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IHZhbHVlOiB2YWx1ZSB9LCBudWxsLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW4uaGlzdG9yeS5wdXNoU3RhdGUoeyB2YWx1ZTogdmFsdWUgfSwgbnVsbCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2x1Z2lmeTogZnVuY3Rpb24gc2x1Z2lmeSh0ZXh0KSB7XG4gICAgICByZXR1cm4gdGV4dC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL1teXFx3LV0rL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvLS0rL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL14tKy8sICcnKVxuICAgICAgICAucmVwbGFjZSgvLSskLywgJycpO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9TbGlkZTogZnVuY3Rpb24gc2Nyb2xsVG9TbGlkZShzcGVlZCwgdmFsdWUsIHJ1bkNhbGxiYWNrcykge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICB2YXIgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgICAgIHZhciBzbGlkZUhpc3RvcnkgPSBIaXN0b3J5LnNsdWdpZnkoc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5JykpO1xuICAgICAgICAgIGlmIChzbGlkZUhpc3RvcnkgPT09IHZhbHVlICYmICFzbGlkZS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBzbGlkZS5pbmRleCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHJ1bkNhbGxiYWNrcyk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgSGlzdG9yeSQxID0ge1xuICAgIG5hbWU6ICdoaXN0b3J5JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGhpc3Rvcnk6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHJlcGxhY2VTdGF0ZTogZmFsc2UsXG4gICAgICAgIGtleTogJ3NsaWRlcycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgaGlzdG9yeToge1xuICAgICAgICAgIGluaXQ6IEhpc3RvcnkuaW5pdC5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0SGlzdG9yeTogSGlzdG9yeS5zZXRIaXN0b3J5LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRIaXN0b3J5UG9wU3RhdGU6IEhpc3Rvcnkuc2V0SGlzdG9yeVBvcFN0YXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzY3JvbGxUb1NsaWRlOiBIaXN0b3J5LnNjcm9sbFRvU2xpZGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIGRlc3Ryb3k6IEhpc3RvcnkuZGVzdHJveS5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICAgICAgc3dpcGVyLmhpc3RvcnkuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5oaXN0b3J5LmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmhpc3RvcnkuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGlzdG9yeS5zZXRIaXN0b3J5KHN3aXBlci5wYXJhbXMuaGlzdG9yeS5rZXksIHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgSGFzaE5hdmlnYXRpb24gPSB7XG4gICAgb25IYXNoQ2FuZ2U6IGZ1bmN0aW9uIG9uSGFzaENhbmdlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgbmV3SGFzaCA9IGRvYy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgICB2YXIgYWN0aXZlU2xpZGVIYXNoID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpLmF0dHIoJ2RhdGEtaGFzaCcpO1xuICAgICAgaWYgKG5ld0hhc2ggIT09IGFjdGl2ZVNsaWRlSGFzaCkge1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBzd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbigoXCIuXCIgKyAoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSArIFwiW2RhdGEtaGFzaD1cXFwiXCIgKyBuZXdIYXNoICsgXCJcXFwiXVwiKSkuaW5kZXgoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0luZGV4KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEhhc2g6IGZ1bmN0aW9uIHNldEhhc2goKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkIHx8ICFzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHsgcmV0dXJuOyB9XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5yZXBsYWNlU3RhdGUgJiYgd2luLmhpc3RvcnkgJiYgd2luLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICAgIHdpbi5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAoKFwiI1wiICsgKHN3aXBlci5zbGlkZXMuZXEoc3dpcGVyLmFjdGl2ZUluZGV4KS5hdHRyKCdkYXRhLWhhc2gnKSkpIHx8ICcnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc2xpZGUgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICAgIHZhciBoYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICAgIGRvYy5sb2NhdGlvbi5oYXNoID0gaGFzaCB8fCAnJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkIHx8IChzd2lwZXIucGFyYW1zLmhpc3RvcnkgJiYgc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmVuYWJsZWQpKSB7IHJldHVybjsgfVxuICAgICAgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHZhciBoYXNoID0gZG9jLmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIycsICcnKTtcbiAgICAgIGlmIChoYXNoKSB7XG4gICAgICAgIHZhciBzcGVlZCA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIHNsaWRlID0gc3dpcGVyLnNsaWRlcy5lcShpKTtcbiAgICAgICAgICB2YXIgc2xpZGVIYXNoID0gc2xpZGUuYXR0cignZGF0YS1oYXNoJykgfHwgc2xpZGUuYXR0cignZGF0YS1oaXN0b3J5Jyk7XG4gICAgICAgICAgaWYgKHNsaWRlSGFzaCA9PT0gaGFzaCAmJiAhc2xpZGUuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gc2xpZGUuaW5kZXgoKTtcbiAgICAgICAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ud2F0Y2hTdGF0ZSkge1xuICAgICAgICAkKHdpbikub24oJ2hhc2hjaGFuZ2UnLCBzd2lwZXIuaGFzaE5hdmlnYXRpb24ub25IYXNoQ2FuZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ud2F0Y2hTdGF0ZSkge1xuICAgICAgICAkKHdpbikub2ZmKCdoYXNoY2hhbmdlJywgc3dpcGVyLmhhc2hOYXZpZ2F0aW9uLm9uSGFzaENhbmdlKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuICB2YXIgSGFzaE5hdmlnYXRpb24kMSA9IHtcbiAgICBuYW1lOiAnaGFzaC1uYXZpZ2F0aW9uJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGhhc2hOYXZpZ2F0aW9uOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByZXBsYWNlU3RhdGU6IGZhbHNlLFxuICAgICAgICB3YXRjaFN0YXRlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlciwge1xuICAgICAgICBoYXNoTmF2aWdhdGlvbjoge1xuICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgICAgICBpbml0OiBIYXNoTmF2aWdhdGlvbi5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBkZXN0cm95OiBIYXNoTmF2aWdhdGlvbi5kZXN0cm95LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRIYXNoOiBIYXNoTmF2aWdhdGlvbi5zZXRIYXNoLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBvbkhhc2hDYW5nZTogSGFzaE5hdmlnYXRpb24ub25IYXNoQ2FuZ2UuYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJhbnNpdGlvbkVuZCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuaGFzaE5hdmlnYXRpb24uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBzd2lwZXIuaGFzaE5hdmlnYXRpb24uc2V0SGFzaCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLyogZXNsaW50IG5vLXVuZGVyc2NvcmUtZGFuZ2xlOiBcIm9mZlwiICovXG5cbiAgdmFyIEF1dG9wbGF5ID0ge1xuICAgIHJ1bjogZnVuY3Rpb24gcnVuKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGFjdGl2ZVNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICB2YXIgZGVsYXkgPSBzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRlbGF5O1xuICAgICAgaWYgKCRhY3RpdmVTbGlkZUVsLmF0dHIoJ2RhdGEtc3dpcGVyLWF1dG9wbGF5JykpIHtcbiAgICAgICAgZGVsYXkgPSAkYWN0aXZlU2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1hdXRvcGxheScpIHx8IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgPSBVdGlscy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnJldmVyc2VEaXJlY3Rpb24pIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICAgICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlUHJldihzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgICAgc3dpcGVyLnNsaWRlUHJldihzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHN3aXBlci5lbWl0KCdhdXRvcGxheScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuc3RvcE9uTGFzdFNsaWRlKSB7XG4gICAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlTmV4dChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlTmV4dChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5zdG9wT25MYXN0U2xpZGUpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbygwLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBzd2lwZXIuZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9LCBkZWxheSk7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2Ygc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcgPSB0cnVlO1xuICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5U3RhcnQnKTtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIGlmICh0eXBlb2Ygc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS50aW1lb3V0KTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucnVubmluZyA9IGZhbHNlO1xuICAgICAgc3dpcGVyLmVtaXQoJ2F1dG9wbGF5U3RvcCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBwYXVzZTogZnVuY3Rpb24gcGF1c2Uoc3BlZWQpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgeyByZXR1cm47IH1cbiAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7IHJldHVybjsgfVxuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheS50aW1lb3V0KSB7IGNsZWFyVGltZW91dChzd2lwZXIuYXV0b3BsYXkudGltZW91dCk7IH1cbiAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSB0cnVlO1xuICAgICAgaWYgKHNwZWVkID09PSAwIHx8ICFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LndhaXRGb3JUcmFuc2l0aW9uKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLmF1dG9wbGF5Lm9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgQXV0b3BsYXkkMSA9IHtcbiAgICBuYW1lOiAnYXV0b3BsYXknLFxuICAgIHBhcmFtczoge1xuICAgICAgYXV0b3BsYXk6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGRlbGF5OiAzMDAwLFxuICAgICAgICB3YWl0Rm9yVHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgZGlzYWJsZU9uSW50ZXJhY3Rpb246IHRydWUsXG4gICAgICAgIHN0b3BPbkxhc3RTbGlkZTogZmFsc2UsXG4gICAgICAgIHJldmVyc2VEaXJlY3Rpb246IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGF1dG9wbGF5OiB7XG4gICAgICAgICAgcnVubmluZzogZmFsc2UsXG4gICAgICAgICAgcGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBydW46IEF1dG9wbGF5LnJ1bi5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc3RhcnQ6IEF1dG9wbGF5LnN0YXJ0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzdG9wOiBBdXRvcGxheS5zdG9wLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBwYXVzZTogQXV0b3BsYXkucGF1c2UuYmluZChzd2lwZXIpLFxuICAgICAgICAgIG9uVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKGUpIHtcbiAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci4kd3JhcHBlckVsKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5hdXRvcGxheS5vblRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgICAgICBzd2lwZXIuYXV0b3BsYXkuc3RvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZW5hYmxlZCkge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmVmb3JlVHJhbnNpdGlvblN0YXJ0OiBmdW5jdGlvbiBiZWZvcmVUcmFuc2l0aW9uU3RhcnQoc3BlZWQsIGludGVybmFsKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBpZiAoaW50ZXJuYWwgfHwgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZShzcGVlZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2xpZGVyRmlyc3RNb3ZlOiBmdW5jdGlvbiBzbGlkZXJGaXJzdE1vdmUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnN0b3AoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgICAgIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICB2YXIgRmFkZSA9IHtcbiAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gJHNsaWRlRWxbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICAgIHZhciB0eCA9IC1vZmZzZXQ7XG4gICAgICAgIGlmICghc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7IHR4IC09IHN3aXBlci50cmFuc2xhdGU7IH1cbiAgICAgICAgdmFyIHR5ID0gMDtcbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2xpZGVPcGFjaXR5ID0gc3dpcGVyLnBhcmFtcy5mYWRlRWZmZWN0LmNyb3NzRmFkZVxuICAgICAgICAgID8gTWF0aC5tYXgoMSAtIE1hdGguYWJzKCRzbGlkZUVsWzBdLnByb2dyZXNzKSwgMClcbiAgICAgICAgICA6IDEgKyBNYXRoLm1pbihNYXRoLm1heCgkc2xpZGVFbFswXS5wcm9ncmVzcywgLTEpLCAwKTtcbiAgICAgICAgJHNsaWRlRWxcbiAgICAgICAgICAuY3NzKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IHNsaWRlT3BhY2l0eSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoXCIgKyB0eCArIFwicHgsIFwiICsgdHkgKyBcInB4LCAwcHgpXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSAmJiBkdXJhdGlvbiAhPT0gMCkge1xuICAgICAgICB2YXIgZXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgc2xpZGVzLnRyYW5zaXRpb25FbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChldmVudFRyaWdnZXJlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIGV2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdmFyIHRyaWdnZXJFdmVudHMgPSBbJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAndHJhbnNpdGlvbmVuZCddO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJpZ2dlckV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgJHdyYXBwZXJFbC50cmlnZ2VyKHRyaWdnZXJFdmVudHNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICB2YXIgRWZmZWN0RmFkZSA9IHtcbiAgICBuYW1lOiAnZWZmZWN0LWZhZGUnLFxuICAgIHBhcmFtczoge1xuICAgICAgZmFkZUVmZmVjdDoge1xuICAgICAgICBjcm9zc0ZhZGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGZhZGVFZmZlY3Q6IHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IEZhZGUuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBGYWRlLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZhZGUnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiZmFkZVwiKSk7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmYWRlJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmZhZGVFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmFkZScpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5mYWRlRWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBDdWJlID0ge1xuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgIHZhciAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgICAgIHZhciBzd2lwZXJXaWR0aCA9IHN3aXBlci53aWR0aDtcbiAgICAgIHZhciBzd2lwZXJIZWlnaHQgPSBzd2lwZXIuaGVpZ2h0O1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICB2YXIgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuY3ViZUVmZmVjdDtcbiAgICAgIHZhciBpc0hvcml6b250YWwgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgICB2YXIgd3JhcHBlclJvdGF0ZSA9IDA7XG4gICAgICB2YXIgJGN1YmVTaGFkb3dFbDtcbiAgICAgIGlmIChwYXJhbXMuc2hhZG93KSB7XG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAkY3ViZVNoYWRvd0VsID0gJHdyYXBwZXJFbC5maW5kKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG4gICAgICAgICAgaWYgKCRjdWJlU2hhZG93RWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAkY3ViZVNoYWRvd0VsID0gJCgnPGRpdiBjbGFzcz1cInN3aXBlci1jdWJlLXNoYWRvd1wiPjwvZGl2PicpO1xuICAgICAgICAgICAgJHdyYXBwZXJFbC5hcHBlbmQoJGN1YmVTaGFkb3dFbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRjdWJlU2hhZG93RWwuY3NzKHsgaGVpZ2h0OiAoc3dpcGVyV2lkdGggKyBcInB4XCIpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRjdWJlU2hhZG93RWwgPSAkZWwuZmluZCgnLnN3aXBlci1jdWJlLXNoYWRvdycpO1xuICAgICAgICAgIGlmICgkY3ViZVNoYWRvd0VsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgJGN1YmVTaGFkb3dFbCA9ICQoJzxkaXYgY2xhc3M9XCJzd2lwZXItY3ViZS1zaGFkb3dcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgICRlbC5hcHBlbmQoJGN1YmVTaGFkb3dFbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBzbGlkZUluZGV4ID0gaTtcbiAgICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBwYXJzZUludCgkc2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNsaWRlQW5nbGUgPSBzbGlkZUluZGV4ICogOTA7XG4gICAgICAgIHZhciByb3VuZCA9IE1hdGguZmxvb3Ioc2xpZGVBbmdsZSAvIDM2MCk7XG4gICAgICAgIGlmIChydGwpIHtcbiAgICAgICAgICBzbGlkZUFuZ2xlID0gLXNsaWRlQW5nbGU7XG4gICAgICAgICAgcm91bmQgPSBNYXRoLmZsb29yKC1zbGlkZUFuZ2xlIC8gMzYwKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigkc2xpZGVFbFswXS5wcm9ncmVzcywgMSksIC0xKTtcbiAgICAgICAgdmFyIHR4ID0gMDtcbiAgICAgICAgdmFyIHR5ID0gMDtcbiAgICAgICAgdmFyIHR6ID0gMDtcbiAgICAgICAgaWYgKHNsaWRlSW5kZXggJSA0ID09PSAwKSB7XG4gICAgICAgICAgdHggPSAtcm91bmQgKiA0ICogc3dpcGVyU2l6ZTtcbiAgICAgICAgICB0eiA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAxKSAlIDQgPT09IDApIHtcbiAgICAgICAgICB0eCA9IDA7XG4gICAgICAgICAgdHogPSAtcm91bmQgKiA0ICogc3dpcGVyU2l6ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoc2xpZGVJbmRleCAtIDIpICUgNCA9PT0gMCkge1xuICAgICAgICAgIHR4ID0gc3dpcGVyU2l6ZSArIChyb3VuZCAqIDQgKiBzd2lwZXJTaXplKTtcbiAgICAgICAgICB0eiA9IHN3aXBlclNpemU7XG4gICAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAzKSAlIDQgPT09IDApIHtcbiAgICAgICAgICB0eCA9IC1zd2lwZXJTaXplO1xuICAgICAgICAgIHR6ID0gKDMgKiBzd2lwZXJTaXplKSArIChzd2lwZXJTaXplICogNCAqIHJvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnRsKSB7XG4gICAgICAgICAgdHggPSAtdHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgIHR5ID0gdHg7XG4gICAgICAgICAgdHggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IFwicm90YXRlWChcIiArIChpc0hvcml6b250YWwgPyAwIDogLXNsaWRlQW5nbGUpICsgXCJkZWcpIHJvdGF0ZVkoXCIgKyAoaXNIb3Jpem9udGFsID8gc2xpZGVBbmdsZSA6IDApICsgXCJkZWcpIHRyYW5zbGF0ZTNkKFwiICsgdHggKyBcInB4LCBcIiArIHR5ICsgXCJweCwgXCIgKyB0eiArIFwicHgpXCI7XG4gICAgICAgIGlmIChwcm9ncmVzcyA8PSAxICYmIHByb2dyZXNzID4gLTEpIHtcbiAgICAgICAgICB3cmFwcGVyUm90YXRlID0gKHNsaWRlSW5kZXggKiA5MCkgKyAocHJvZ3Jlc3MgKiA5MCk7XG4gICAgICAgICAgaWYgKHJ0bCkgeyB3cmFwcGVyUm90YXRlID0gKC1zbGlkZUluZGV4ICogOTApIC0gKHByb2dyZXNzICogOTApOyB9XG4gICAgICAgIH1cbiAgICAgICAgJHNsaWRlRWwudHJhbnNmb3JtKHRyYW5zZm9ybSk7XG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2YXIgc2hhZG93QmVmb3JlID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyIHNoYWRvd0FmdGVyID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuICAgICAgICAgIGlmIChzaGFkb3dCZWZvcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzaGFkb3dCZWZvcmUgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ2xlZnQnIDogJ3RvcCcpICsgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QmVmb3JlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2hhZG93QWZ0ZXIgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ3JpZ2h0JyA6ICdib3R0b20nKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKHNoYWRvd0FmdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNoYWRvd0JlZm9yZS5sZW5ndGgpIHsgc2hhZG93QmVmb3JlWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heCgtcHJvZ3Jlc3MsIDApOyB9XG4gICAgICAgICAgaWYgKHNoYWRvd0FmdGVyLmxlbmd0aCkgeyBzaGFkb3dBZnRlclswXS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5tYXgocHJvZ3Jlc3MsIDApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICR3cmFwcGVyRWwuY3NzKHtcbiAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbic6IChcIjUwJSA1MCUgLVwiICsgKHN3aXBlclNpemUgLyAyKSArIFwicHhcIiksXG4gICAgICAgICctbW96LXRyYW5zZm9ybS1vcmlnaW4nOiAoXCI1MCUgNTAlIC1cIiArIChzd2lwZXJTaXplIC8gMikgKyBcInB4XCIpLFxuICAgICAgICAnLW1zLXRyYW5zZm9ybS1vcmlnaW4nOiAoXCI1MCUgNTAlIC1cIiArIChzd2lwZXJTaXplIC8gMikgKyBcInB4XCIpLFxuICAgICAgICAndHJhbnNmb3JtLW9yaWdpbic6IChcIjUwJSA1MCUgLVwiICsgKHN3aXBlclNpemUgLyAyKSArIFwicHhcIiksXG4gICAgICB9KTtcblxuICAgICAgaWYgKHBhcmFtcy5zaGFkb3cpIHtcbiAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKChcInRyYW5zbGF0ZTNkKDBweCwgXCIgKyAoKHN3aXBlcldpZHRoIC8gMikgKyBwYXJhbXMuc2hhZG93T2Zmc2V0KSArIFwicHgsIFwiICsgKC1zd2lwZXJXaWR0aCAvIDIpICsgXCJweCkgcm90YXRlWCg5MGRlZykgcm90YXRlWigwZGVnKSBzY2FsZShcIiArIChwYXJhbXMuc2hhZG93U2NhbGUpICsgXCIpXCIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc2hhZG93QW5nbGUgPSBNYXRoLmFicyh3cmFwcGVyUm90YXRlKSAtIChNYXRoLmZsb29yKE1hdGguYWJzKHdyYXBwZXJSb3RhdGUpIC8gOTApICogOTApO1xuICAgICAgICAgIHZhciBtdWx0aXBsaWVyID0gMS41IC0gKFxuICAgICAgICAgICAgKE1hdGguc2luKChzaGFkb3dBbmdsZSAqIDIgKiBNYXRoLlBJKSAvIDM2MCkgLyAyKVxuICAgICAgICAgICAgKyAoTWF0aC5jb3MoKHNoYWRvd0FuZ2xlICogMiAqIE1hdGguUEkpIC8gMzYwKSAvIDIpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2YXIgc2NhbGUxID0gcGFyYW1zLnNoYWRvd1NjYWxlO1xuICAgICAgICAgIHZhciBzY2FsZTIgPSBwYXJhbXMuc2hhZG93U2NhbGUgLyBtdWx0aXBsaWVyO1xuICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMuc2hhZG93T2Zmc2V0O1xuICAgICAgICAgICRjdWJlU2hhZG93RWwudHJhbnNmb3JtKChcInNjYWxlM2QoXCIgKyBzY2FsZTEgKyBcIiwgMSwgXCIgKyBzY2FsZTIgKyBcIikgdHJhbnNsYXRlM2QoMHB4LCBcIiArICgoc3dpcGVySGVpZ2h0IC8gMikgKyBvZmZzZXQpICsgXCJweCwgXCIgKyAoLXN3aXBlckhlaWdodCAvIDIgLyBzY2FsZTIpICsgXCJweCkgcm90YXRlWCgtOTBkZWcpXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHpGYWN0b3IgPSAoQnJvd3Nlci5pc1NhZmFyaSB8fCBCcm93c2VyLmlzVWlXZWJWaWV3KSA/ICgtc3dpcGVyU2l6ZSAvIDIpIDogMDtcbiAgICAgICR3cmFwcGVyRWxcbiAgICAgICAgLnRyYW5zZm9ybSgoXCJ0cmFuc2xhdGUzZCgwcHgsMCxcIiArIHpGYWN0b3IgKyBcInB4KSByb3RhdGVYKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IDAgOiB3cmFwcGVyUm90YXRlKSArIFwiZGVnKSByb3RhdGVZKFwiICsgKHN3aXBlci5pc0hvcml6b250YWwoKSA/IC13cmFwcGVyUm90YXRlIDogMCkgKyBcImRlZylcIikpO1xuICAgIH0sXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgJGVsID0gc3dpcGVyLiRlbDtcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgc2xpZGVzXG4gICAgICAgIC50cmFuc2l0aW9uKGR1cmF0aW9uKVxuICAgICAgICAuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JylcbiAgICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY3ViZUVmZmVjdC5zaGFkb3cgJiYgIXN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAkZWwuZmluZCgnLnN3aXBlci1jdWJlLXNoYWRvdycpLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEVmZmVjdEN1YmUgPSB7XG4gICAgbmFtZTogJ2VmZmVjdC1jdWJlJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGN1YmVFZmZlY3Q6IHtcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlLFxuICAgICAgICBzaGFkb3c6IHRydWUsXG4gICAgICAgIHNoYWRvd09mZnNldDogMjAsXG4gICAgICAgIHNoYWRvd1NjYWxlOiAwLjk0LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGN1YmVFZmZlY3Q6IHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IEN1YmUuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBDdWJlLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2N1YmUnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiY3ViZVwiKSk7XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goKChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCIzZFwiKSk7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICByZXNpc3RhbmNlUmF0aW86IDAsXG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICAgICAgICB2aXJ0dWFsVHJhbnNsYXRlOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5vcmlnaW5hbFBhcmFtcywgb3ZlcndyaXRlUGFyYW1zKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2xhdGU6IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2N1YmUnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY3ViZUVmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjdWJlJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmN1YmVFZmZlY3Quc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEZsaXAgPSB7XG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGU7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgJHNsaWRlRWwgPSBzbGlkZXMuZXEoaSk7XG4gICAgICAgIHZhciBwcm9ncmVzcyA9ICRzbGlkZUVsWzBdLnByb2dyZXNzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mbGlwRWZmZWN0LmxpbWl0Um90YXRpb24pIHtcbiAgICAgICAgICBwcm9ncmVzcyA9IE1hdGgubWF4KE1hdGgubWluKCRzbGlkZUVsWzBdLnByb2dyZXNzLCAxKSwgLTEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIHJvdGF0ZSA9IC0xODAgKiBwcm9ncmVzcztcbiAgICAgICAgdmFyIHJvdGF0ZVkgPSByb3RhdGU7XG4gICAgICAgIHZhciByb3RhdGVYID0gMDtcbiAgICAgICAgdmFyIHR4ID0gLW9mZnNldDtcbiAgICAgICAgdmFyIHR5ID0gMDtcbiAgICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgICB0eSA9IHR4O1xuICAgICAgICAgIHR4ID0gMDtcbiAgICAgICAgICByb3RhdGVYID0gLXJvdGF0ZVk7XG4gICAgICAgICAgcm90YXRlWSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAocnRsKSB7XG4gICAgICAgICAgcm90YXRlWSA9IC1yb3RhdGVZO1xuICAgICAgICB9XG5cbiAgICAgICAgJHNsaWRlRWxbMF0uc3R5bGUuekluZGV4ID0gLU1hdGguYWJzKE1hdGgucm91bmQocHJvZ3Jlc3MpKSArIHNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgICAvLyBTZXQgc2hhZG93c1xuICAgICAgICAgIHZhciBzaGFkb3dCZWZvcmUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykgOiAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AnKTtcbiAgICAgICAgICB2YXIgc2hhZG93QWZ0ZXIgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tJyk7XG4gICAgICAgICAgaWYgKHNoYWRvd0JlZm9yZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNoYWRvd0JlZm9yZSA9ICQoKFwiPGRpdiBjbGFzcz1cXFwic3dpcGVyLXNsaWRlLXNoYWRvdy1cIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJykgKyBcIlxcXCI+PC9kaXY+XCIpKTtcbiAgICAgICAgICAgICRzbGlkZUVsLmFwcGVuZChzaGFkb3dCZWZvcmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzaGFkb3dBZnRlciA9ICQoKFwiPGRpdiBjbGFzcz1cXFwic3dpcGVyLXNsaWRlLXNoYWRvdy1cIiArIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAncmlnaHQnIDogJ2JvdHRvbScpICsgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoc2hhZG93QWZ0ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hhZG93QmVmb3JlLmxlbmd0aCkgeyBzaGFkb3dCZWZvcmVbMF0uc3R5bGUub3BhY2l0eSA9IE1hdGgubWF4KC1wcm9ncmVzcywgMCk7IH1cbiAgICAgICAgICBpZiAoc2hhZG93QWZ0ZXIubGVuZ3RoKSB7IHNoYWRvd0FmdGVyWzBdLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heChwcm9ncmVzcywgMCk7IH1cbiAgICAgICAgfVxuICAgICAgICAkc2xpZGVFbFxuICAgICAgICAgIC50cmFuc2Zvcm0oKFwidHJhbnNsYXRlM2QoXCIgKyB0eCArIFwicHgsIFwiICsgdHkgKyBcInB4LCAwcHgpIHJvdGF0ZVgoXCIgKyByb3RhdGVYICsgXCJkZWcpIHJvdGF0ZVkoXCIgKyByb3RhdGVZICsgXCJkZWcpXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgc2xpZGVzXG4gICAgICAgIC50cmFuc2l0aW9uKGR1cmF0aW9uKVxuICAgICAgICAuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tLCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JylcbiAgICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSAmJiBkdXJhdGlvbiAhPT0gMCkge1xuICAgICAgICB2YXIgZXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHNsaWRlcy5lcShhY3RpdmVJbmRleCkudHJhbnNpdGlvbkVuZChmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoKSB7XG4gICAgICAgICAgaWYgKGV2ZW50VHJpZ2dlcmVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgLy8gaWYgKCEkKHRoaXMpLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzcykpIHJldHVybjtcbiAgICAgICAgICBldmVudFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHZhciB0cmlnZ2VyRXZlbnRzID0gWyd3ZWJraXRUcmFuc2l0aW9uRW5kJywgJ3RyYW5zaXRpb25lbmQnXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWdnZXJFdmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICR3cmFwcGVyRWwudHJpZ2dlcih0cmlnZ2VyRXZlbnRzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgdmFyIEVmZmVjdEZsaXAgPSB7XG4gICAgbmFtZTogJ2VmZmVjdC1mbGlwJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGZsaXBFZmZlY3Q6IHtcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlLFxuICAgICAgICBsaW1pdFJvdGF0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGZsaXBFZmZlY3Q6IHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGU6IEZsaXAuc2V0VHJhbnNsYXRlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBGbGlwLnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2ZsaXAnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY2xhc3NOYW1lcy5wdXNoKCgoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSArIFwiZmxpcFwiKSk7XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goKChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCIzZFwiKSk7XG4gICAgICAgIHZhciBvdmVyd3JpdGVQYXJhbXMgPSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgICBzbGlkZXNQZXJDb2x1bW46IDEsXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICAgICAgdmlydHVhbFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci5wYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIub3JpZ2luYWxQYXJhbXMsIG92ZXJ3cml0ZVBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdmbGlwJykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmZsaXBFZmZlY3Quc2V0VHJhbnNsYXRlKCk7XG4gICAgICB9LFxuICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnZmxpcCcpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci5mbGlwRWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBDb3ZlcmZsb3cgPSB7XG4gICAgc2V0VHJhbnNsYXRlOiBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBzd2lwZXJXaWR0aCA9IHN3aXBlci53aWR0aDtcbiAgICAgIHZhciBzd2lwZXJIZWlnaHQgPSBzd2lwZXIuaGVpZ2h0O1xuICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXM7XG4gICAgICB2YXIgJHdyYXBwZXJFbCA9IHN3aXBlci4kd3JhcHBlckVsO1xuICAgICAgdmFyIHNsaWRlc1NpemVzR3JpZCA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWQ7XG4gICAgICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5jb3ZlcmZsb3dFZmZlY3Q7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuICAgICAgdmFyIHRyYW5zZm9ybSA9IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICB2YXIgY2VudGVyID0gaXNIb3Jpem9udGFsID8gLXRyYW5zZm9ybSArIChzd2lwZXJXaWR0aCAvIDIpIDogLXRyYW5zZm9ybSArIChzd2lwZXJIZWlnaHQgLyAyKTtcbiAgICAgIHZhciByb3RhdGUgPSBpc0hvcml6b250YWwgPyBwYXJhbXMucm90YXRlIDogLXBhcmFtcy5yb3RhdGU7XG4gICAgICB2YXIgdHJhbnNsYXRlID0gcGFyYW1zLmRlcHRoO1xuICAgICAgLy8gRWFjaCBzbGlkZSBvZmZzZXQgZnJvbSBjZW50ZXJcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyICRzbGlkZUVsID0gc2xpZGVzLmVxKGkpO1xuICAgICAgICB2YXIgc2xpZGVTaXplID0gc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgICAgICB2YXIgc2xpZGVPZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgICAgdmFyIG9mZnNldE11bHRpcGxpZXIgPSAoKGNlbnRlciAtIHNsaWRlT2Zmc2V0IC0gKHNsaWRlU2l6ZSAvIDIpKSAvIHNsaWRlU2l6ZSkgKiBwYXJhbXMubW9kaWZpZXI7XG5cbiAgICAgICAgdmFyIHJvdGF0ZVkgPSBpc0hvcml6b250YWwgPyByb3RhdGUgKiBvZmZzZXRNdWx0aXBsaWVyIDogMDtcbiAgICAgICAgdmFyIHJvdGF0ZVggPSBpc0hvcml6b250YWwgPyAwIDogcm90YXRlICogb2Zmc2V0TXVsdGlwbGllcjtcbiAgICAgICAgLy8gdmFyIHJvdGF0ZVogPSAwXG4gICAgICAgIHZhciB0cmFuc2xhdGVaID0gLXRyYW5zbGF0ZSAqIE1hdGguYWJzKG9mZnNldE11bHRpcGxpZXIpO1xuXG4gICAgICAgIHZhciB0cmFuc2xhdGVZID0gaXNIb3Jpem9udGFsID8gMCA6IHBhcmFtcy5zdHJldGNoICogKG9mZnNldE11bHRpcGxpZXIpO1xuICAgICAgICB2YXIgdHJhbnNsYXRlWCA9IGlzSG9yaXpvbnRhbCA/IHBhcmFtcy5zdHJldGNoICogKG9mZnNldE11bHRpcGxpZXIpIDogMDtcblxuICAgICAgICAvLyBGaXggZm9yIHVsdHJhIHNtYWxsIHZhbHVlc1xuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWCkgPCAwLjAwMSkgeyB0cmFuc2xhdGVYID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWSkgPCAwLjAwMSkgeyB0cmFuc2xhdGVZID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnModHJhbnNsYXRlWikgPCAwLjAwMSkgeyB0cmFuc2xhdGVaID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnMocm90YXRlWSkgPCAwLjAwMSkgeyByb3RhdGVZID0gMDsgfVxuICAgICAgICBpZiAoTWF0aC5hYnMocm90YXRlWCkgPCAwLjAwMSkgeyByb3RhdGVYID0gMDsgfVxuXG4gICAgICAgIHZhciBzbGlkZVRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoXCIgKyB0cmFuc2xhdGVYICsgXCJweCxcIiArIHRyYW5zbGF0ZVkgKyBcInB4LFwiICsgdHJhbnNsYXRlWiArIFwicHgpICByb3RhdGVYKFwiICsgcm90YXRlWCArIFwiZGVnKSByb3RhdGVZKFwiICsgcm90YXRlWSArIFwiZGVnKVwiO1xuXG4gICAgICAgICRzbGlkZUVsLnRyYW5zZm9ybShzbGlkZVRyYW5zZm9ybSk7XG4gICAgICAgICRzbGlkZUVsWzBdLnN0eWxlLnpJbmRleCA9IC1NYXRoLmFicyhNYXRoLnJvdW5kKG9mZnNldE11bHRpcGxpZXIpKSArIDE7XG4gICAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgICB2YXIgJHNoYWRvd0JlZm9yZUVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpIDogJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgICAgICAgdmFyICRzaGFkb3dBZnRlckVsID0gaXNIb3Jpem9udGFsID8gJHNsaWRlRWwuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6ICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbScpO1xuICAgICAgICAgIGlmICgkc2hhZG93QmVmb3JlRWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAkc2hhZG93QmVmb3JlRWwgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ2xlZnQnIDogJ3RvcCcpICsgXCJcXFwiPjwvZGl2PlwiKSk7XG4gICAgICAgICAgICAkc2xpZGVFbC5hcHBlbmQoJHNoYWRvd0JlZm9yZUVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRzaGFkb3dBZnRlckVsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgJHNoYWRvd0FmdGVyRWwgPSAkKChcIjxkaXYgY2xhc3M9XFxcInN3aXBlci1zbGlkZS1zaGFkb3ctXCIgKyAoaXNIb3Jpem9udGFsID8gJ3JpZ2h0JyA6ICdib3R0b20nKSArIFwiXFxcIj48L2Rpdj5cIikpO1xuICAgICAgICAgICAgJHNsaWRlRWwuYXBwZW5kKCRzaGFkb3dBZnRlckVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRzaGFkb3dCZWZvcmVFbC5sZW5ndGgpIHsgJHNoYWRvd0JlZm9yZUVsWzBdLnN0eWxlLm9wYWNpdHkgPSBvZmZzZXRNdWx0aXBsaWVyID4gMCA/IG9mZnNldE11bHRpcGxpZXIgOiAwOyB9XG4gICAgICAgICAgaWYgKCRzaGFkb3dBZnRlckVsLmxlbmd0aCkgeyAkc2hhZG93QWZ0ZXJFbFswXS5zdHlsZS5vcGFjaXR5ID0gKC1vZmZzZXRNdWx0aXBsaWVyKSA+IDAgPyAtb2Zmc2V0TXVsdGlwbGllciA6IDA7IH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgY29ycmVjdCBwZXJzcGVjdGl2ZSBmb3IgSUUxMFxuICAgICAgaWYgKFN1cHBvcnQucG9pbnRlckV2ZW50cyB8fCBTdXBwb3J0LnByZWZpeGVkUG9pbnRlckV2ZW50cykge1xuICAgICAgICB2YXIgd3MgPSAkd3JhcHBlckVsWzBdLnN0eWxlO1xuICAgICAgICB3cy5wZXJzcGVjdGl2ZU9yaWdpbiA9IGNlbnRlciArIFwicHggNTAlXCI7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIHN3aXBlci5zbGlkZXNcbiAgICAgICAgLnRyYW5zaXRpb24oZHVyYXRpb24pXG4gICAgICAgIC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKVxuICAgICAgICAudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgfSxcbiAgfTtcblxuICB2YXIgRWZmZWN0Q292ZXJmbG93ID0ge1xuICAgIG5hbWU6ICdlZmZlY3QtY292ZXJmbG93JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGNvdmVyZmxvd0VmZmVjdDoge1xuICAgICAgICByb3RhdGU6IDUwLFxuICAgICAgICBzdHJldGNoOiAwLFxuICAgICAgICBkZXB0aDogMTAwLFxuICAgICAgICBtb2RpZmllcjogMSxcbiAgICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBVdGlscy5leHRlbmQoc3dpcGVyLCB7XG4gICAgICAgIGNvdmVyZmxvd0VmZmVjdDoge1xuICAgICAgICAgIHNldFRyYW5zbGF0ZTogQ292ZXJmbG93LnNldFRyYW5zbGF0ZS5iaW5kKHN3aXBlciksXG4gICAgICAgICAgc2V0VHJhbnNpdGlvbjogQ292ZXJmbG93LnNldFRyYW5zaXRpb24uYmluZChzd2lwZXIpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgYmVmb3JlSW5pdDogZnVuY3Rpb24gYmVmb3JlSW5pdCgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gJ2NvdmVyZmxvdycpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaCgoKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgKyBcImNvdmVyZmxvd1wiKSk7XG4gICAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goKChzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpICsgXCIzZFwiKSk7XG5cbiAgICAgICAgc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24gc2V0VHJhbnNsYXRlKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSAnY292ZXJmbG93JykgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLmNvdmVyZmxvd0VmZmVjdC5zZXRUcmFuc2xhdGUoKTtcbiAgICAgIH0sXG4gICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09ICdjb3ZlcmZsb3cnKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIuY292ZXJmbG93RWZmZWN0LnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHZhciBUaHVtYnMgPSB7XG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHJlZiA9IHN3aXBlci5wYXJhbXM7XG4gICAgICB2YXIgdGh1bWJzUGFyYW1zID0gcmVmLnRodW1icztcbiAgICAgIHZhciBTd2lwZXJDbGFzcyA9IHN3aXBlci5jb25zdHJ1Y3RvcjtcbiAgICAgIGlmICh0aHVtYnNQYXJhbXMuc3dpcGVyIGluc3RhbmNlb2YgU3dpcGVyQ2xhc3MpIHtcbiAgICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXIgPSB0aHVtYnNQYXJhbXMuc3dpcGVyO1xuICAgICAgICBVdGlscy5leHRlbmQoc3dpcGVyLnRodW1icy5zd2lwZXIub3JpZ2luYWxQYXJhbXMsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgVXRpbHMuZXh0ZW5kKHN3aXBlci50aHVtYnMuc3dpcGVyLnBhcmFtcywge1xuICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChVdGlscy5pc09iamVjdCh0aHVtYnNQYXJhbXMuc3dpcGVyKSkge1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlciA9IG5ldyBTd2lwZXJDbGFzcyhVdGlscy5leHRlbmQoe30sIHRodW1ic1BhcmFtcy5zd2lwZXIsIHtcbiAgICAgICAgICB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IHRydWUsXG4gICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgICAgICBzd2lwZXIudGh1bWJzLnN3aXBlckNyZWF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXIuJGVsLmFkZENsYXNzKHN3aXBlci5wYXJhbXMudGh1bWJzLnRodW1ic0NvbnRhaW5lckNsYXNzKTtcbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyLm9uKCd0YXAnLCBzd2lwZXIudGh1bWJzLm9uVGh1bWJDbGljayk7XG4gICAgfSxcbiAgICBvblRodW1iQ2xpY2s6IGZ1bmN0aW9uIG9uVGh1bWJDbGljaygpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgY2xpY2tlZEluZGV4ID0gdGh1bWJzU3dpcGVyLmNsaWNrZWRJbmRleDtcbiAgICAgIHZhciBjbGlja2VkU2xpZGUgPSB0aHVtYnNTd2lwZXIuY2xpY2tlZFNsaWRlO1xuICAgICAgaWYgKGNsaWNrZWRTbGlkZSAmJiAkKGNsaWNrZWRTbGlkZSkuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy50aHVtYnMuc2xpZGVUaHVtYkFjdGl2ZUNsYXNzKSkgeyByZXR1cm47IH1cbiAgICAgIGlmICh0eXBlb2YgY2xpY2tlZEluZGV4ID09PSAndW5kZWZpbmVkJyB8fCBjbGlja2VkSW5kZXggPT09IG51bGwpIHsgcmV0dXJuOyB9XG4gICAgICB2YXIgc2xpZGVUb0luZGV4O1xuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBzbGlkZVRvSW5kZXggPSBwYXJzZUludCgkKHRodW1ic1N3aXBlci5jbGlja2VkU2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsaWRlVG9JbmRleCA9IGNsaWNrZWRJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgaWYgKHN3aXBlci5zbGlkZXMuZXEoY3VycmVudEluZGV4KS5oYXNDbGFzcyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKSB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldkluZGV4ID0gc3dpcGVyLnNsaWRlcy5lcShjdXJyZW50SW5kZXgpLnByZXZBbGwoKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIHNsaWRlVG9JbmRleCArIFwiXFxcIl1cIikpLmVxKDApLmluZGV4KCk7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSBzd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRJbmRleCkubmV4dEFsbCgoXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgc2xpZGVUb0luZGV4ICsgXCJcXFwiXVwiKSkuZXEoMCkuaW5kZXgoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBwcmV2SW5kZXggPT09ICd1bmRlZmluZWQnKSB7IHNsaWRlVG9JbmRleCA9IG5leHRJbmRleDsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbmV4dEluZGV4ID09PSAndW5kZWZpbmVkJykgeyBzbGlkZVRvSW5kZXggPSBwcmV2SW5kZXg7IH1cbiAgICAgICAgZWxzZSBpZiAobmV4dEluZGV4IC0gY3VycmVudEluZGV4IDwgY3VycmVudEluZGV4IC0gcHJldkluZGV4KSB7IHNsaWRlVG9JbmRleCA9IG5leHRJbmRleDsgfVxuICAgICAgICBlbHNlIHsgc2xpZGVUb0luZGV4ID0gcHJldkluZGV4OyB9XG4gICAgICB9XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoaW5pdGlhbCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2YXIgdGh1bWJzU3dpcGVyID0gc3dpcGVyLnRodW1icy5zd2lwZXI7XG4gICAgICBpZiAoIXRodW1ic1N3aXBlcikgeyByZXR1cm47IH1cblxuICAgICAgdmFyIHNsaWRlc1BlclZpZXcgPSB0aHVtYnNTd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJ1xuICAgICAgICA/IHRodW1ic1N3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpXG4gICAgICAgIDogdGh1bWJzU3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuXG4gICAgICBpZiAoc3dpcGVyLnJlYWxJbmRleCAhPT0gdGh1bWJzU3dpcGVyLnJlYWxJbmRleCkge1xuICAgICAgICB2YXIgY3VycmVudFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgICAgICB2YXIgbmV3VGh1bWJzSW5kZXg7XG4gICAgICAgIGlmICh0aHVtYnNTd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLmhhc0NsYXNzKHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICAgICAgIHRodW1ic1N3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRodW1ic1N3aXBlci5fY2xpZW50TGVmdCA9IHRodW1ic1N3aXBlci4kd3JhcHBlckVsWzBdLmNsaWVudExlZnQ7XG4gICAgICAgICAgICBjdXJyZW50VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEZpbmQgYWN0dWFsIHRodW1icyBpbmRleCB0byBzbGlkZSB0b1xuICAgICAgICAgIHZhciBwcmV2VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuc2xpZGVzLmVxKGN1cnJlbnRUaHVtYnNJbmRleCkucHJldkFsbCgoXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKHN3aXBlci5yZWFsSW5kZXgpICsgXCJcXFwiXVwiKSkuZXEoMCkuaW5kZXgoKTtcbiAgICAgICAgICB2YXIgbmV4dFRodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLnNsaWRlcy5lcShjdXJyZW50VGh1bWJzSW5kZXgpLm5leHRBbGwoKFwiW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVxcXCJcIiArIChzd2lwZXIucmVhbEluZGV4KSArIFwiXFxcIl1cIikpLmVxKDApLmluZGV4KCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwcmV2VGh1bWJzSW5kZXggPT09ICd1bmRlZmluZWQnKSB7IG5ld1RodW1ic0luZGV4ID0gbmV4dFRodW1ic0luZGV4OyB9XG4gICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG5leHRUaHVtYnNJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHsgbmV3VGh1bWJzSW5kZXggPSBwcmV2VGh1bWJzSW5kZXg7IH1cbiAgICAgICAgICBlbHNlIGlmIChuZXh0VGh1bWJzSW5kZXggLSBjdXJyZW50VGh1bWJzSW5kZXggPT09IGN1cnJlbnRUaHVtYnNJbmRleCAtIHByZXZUaHVtYnNJbmRleCkgeyBuZXdUaHVtYnNJbmRleCA9IGN1cnJlbnRUaHVtYnNJbmRleDsgfVxuICAgICAgICAgIGVsc2UgaWYgKG5leHRUaHVtYnNJbmRleCAtIGN1cnJlbnRUaHVtYnNJbmRleCA8IGN1cnJlbnRUaHVtYnNJbmRleCAtIHByZXZUaHVtYnNJbmRleCkgeyBuZXdUaHVtYnNJbmRleCA9IG5leHRUaHVtYnNJbmRleDsgfVxuICAgICAgICAgIGVsc2UgeyBuZXdUaHVtYnNJbmRleCA9IHByZXZUaHVtYnNJbmRleDsgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1RodW1ic0luZGV4ID0gc3dpcGVyLnJlYWxJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzICYmIHRodW1ic1N3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcy5pbmRleE9mKG5ld1RodW1ic0luZGV4KSA8IDApIHtcbiAgICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICAgICAgaWYgKG5ld1RodW1ic0luZGV4ID4gY3VycmVudFRodW1ic0luZGV4KSB7XG4gICAgICAgICAgICAgIG5ld1RodW1ic0luZGV4ID0gbmV3VGh1bWJzSW5kZXggLSBNYXRoLmZsb29yKHNsaWRlc1BlclZpZXcgLyAyKSArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdUaHVtYnNJbmRleCA9IG5ld1RodW1ic0luZGV4ICsgTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobmV3VGh1bWJzSW5kZXggPiBjdXJyZW50VGh1bWJzSW5kZXgpIHtcbiAgICAgICAgICAgIG5ld1RodW1ic0luZGV4ID0gbmV3VGh1bWJzSW5kZXggLSBzbGlkZXNQZXJWaWV3ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGh1bWJzU3dpcGVyLnNsaWRlVG8obmV3VGh1bWJzSW5kZXgsIGluaXRpYWwgPyAwIDogdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBY3RpdmF0ZSB0aHVtYnNcbiAgICAgIHZhciB0aHVtYnNUb0FjdGl2YXRlID0gMTtcbiAgICAgIHZhciB0aHVtYkFjdGl2ZUNsYXNzID0gc3dpcGVyLnBhcmFtcy50aHVtYnMuc2xpZGVUaHVtYkFjdGl2ZUNsYXNzO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICB0aHVtYnNUb0FjdGl2YXRlID0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgfVxuXG4gICAgICB0aHVtYnNTd2lwZXIuc2xpZGVzLnJlbW92ZUNsYXNzKHRodW1iQWN0aXZlQ2xhc3MpO1xuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCB8fCB0aHVtYnNTd2lwZXIucGFyYW1zLnZpcnR1YWwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aHVtYnNUb0FjdGl2YXRlOyBpICs9IDEpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuJHdyYXBwZXJFbC5jaGlsZHJlbigoXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiICsgKHN3aXBlci5yZWFsSW5kZXggKyBpKSArIFwiXFxcIl1cIikpLmFkZENsYXNzKHRodW1iQWN0aXZlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB0aHVtYnNUb0FjdGl2YXRlOyBpJDEgKz0gMSkge1xuICAgICAgICAgIHRodW1ic1N3aXBlci5zbGlkZXMuZXEoc3dpcGVyLnJlYWxJbmRleCArIGkkMSkuYWRkQ2xhc3ModGh1bWJBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9O1xuICB2YXIgVGh1bWJzJDEgPSB7XG4gICAgbmFtZTogJ3RodW1icycsXG4gICAgcGFyYW1zOiB7XG4gICAgICB0aHVtYnM6IHtcbiAgICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgICBzbGlkZVRodW1iQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdGh1bWItYWN0aXZlJyxcbiAgICAgICAgdGh1bWJzQ29udGFpbmVyQ2xhc3M6ICdzd2lwZXItY29udGFpbmVyLXRodW1icycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIFV0aWxzLmV4dGVuZChzd2lwZXIsIHtcbiAgICAgICAgdGh1bWJzOiB7XG4gICAgICAgICAgc3dpcGVyOiBudWxsLFxuICAgICAgICAgIGluaXQ6IFRodW1icy5pbml0LmJpbmQoc3dpcGVyKSxcbiAgICAgICAgICB1cGRhdGU6IFRodW1icy51cGRhdGUuYmluZChzd2lwZXIpLFxuICAgICAgICAgIG9uVGh1bWJDbGljazogVGh1bWJzLm9uVGh1bWJDbGljay5iaW5kKHN3aXBlciksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBiZWZvcmVJbml0OiBmdW5jdGlvbiBiZWZvcmVJbml0KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgdmFyIHJlZiA9IHN3aXBlci5wYXJhbXM7XG4gICAgICAgIHZhciB0aHVtYnMgPSByZWYudGh1bWJzO1xuICAgICAgICBpZiAoIXRodW1icyB8fCAhdGh1bWJzLnN3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnRodW1icy5pbml0KCk7XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiBzbGlkZUNoYW5nZSgpIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIGlmICghc3dpcGVyLnRodW1icy5zd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICAgIHN3aXBlci50aHVtYnMudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgaWYgKCFzd2lwZXIudGh1bWJzLnN3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgc3dpcGVyLnRodW1icy51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICBvYnNlcnZlclVwZGF0ZTogZnVuY3Rpb24gb2JzZXJ2ZXJVcGRhdGUoKSB7XG4gICAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgICBpZiAoIXN3aXBlci50aHVtYnMuc3dpcGVyKSB7IHJldHVybjsgfVxuICAgICAgICBzd2lwZXIudGh1bWJzLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uIHNldFRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICAgIHZhciB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICAgICAgaWYgKCF0aHVtYnNTd2lwZXIpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRodW1ic1N3aXBlci5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICAgIH0sXG4gICAgICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgICAgdmFyIHRodW1ic1N3aXBlciA9IHN3aXBlci50aHVtYnMuc3dpcGVyO1xuICAgICAgICBpZiAoIXRodW1ic1N3aXBlcikgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKHN3aXBlci50aHVtYnMuc3dpcGVyQ3JlYXRlZCAmJiB0aHVtYnNTd2lwZXIpIHtcbiAgICAgICAgICB0aHVtYnNTd2lwZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gU3dpcGVyIENsYXNzXG5cbiAgdmFyIGNvbXBvbmVudHMgPSBbXG4gICAgRGV2aWNlJDEsXG4gICAgU3VwcG9ydCQxLFxuICAgIEJyb3dzZXIkMSxcbiAgICBSZXNpemUsXG4gICAgT2JzZXJ2ZXIkMSxcbiAgICBWaXJ0dWFsJDEsXG4gICAgS2V5Ym9hcmQkMSxcbiAgICBNb3VzZXdoZWVsJDEsXG4gICAgTmF2aWdhdGlvbiQxLFxuICAgIFBhZ2luYXRpb24kMSxcbiAgICBTY3JvbGxiYXIkMSxcbiAgICBQYXJhbGxheCQxLFxuICAgIFpvb20kMSxcbiAgICBMYXp5JDEsXG4gICAgQ29udHJvbGxlciQxLFxuICAgIEExMXksXG4gICAgSGlzdG9yeSQxLFxuICAgIEhhc2hOYXZpZ2F0aW9uJDEsXG4gICAgQXV0b3BsYXkkMSxcbiAgICBFZmZlY3RGYWRlLFxuICAgIEVmZmVjdEN1YmUsXG4gICAgRWZmZWN0RmxpcCxcbiAgICBFZmZlY3RDb3ZlcmZsb3csXG4gICAgVGh1bWJzJDFcbiAgXTtcblxuICBpZiAodHlwZW9mIFN3aXBlci51c2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgU3dpcGVyLnVzZSA9IFN3aXBlci5DbGFzcy51c2U7XG4gICAgU3dpcGVyLmluc3RhbGxNb2R1bGUgPSBTd2lwZXIuQ2xhc3MuaW5zdGFsbE1vZHVsZTtcbiAgfVxuXG4gIFN3aXBlci51c2UoY29tcG9uZW50cyk7XG5cbiAgcmV0dXJuIFN3aXBlcjtcblxufSkpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js\n");
/***/ }),
/***/ "./node_modules/_ua-device@0.1.10@ua-device/index.js":
/*!***********************************************************!*\
!*** ./node_modules/_ua-device@0.1.10@ua-device/index.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__(/*! ./lib/ua-device.js */ \"./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL191YS1kZXZpY2VAMC4xLjEwQHVhLWRldmljZS9pbmRleC5qcz83MDkwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvdWEtZGV2aWNlLmpzJyk7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_ua-device@0.1.10@ua-device/index.js\n");
/***/ }),
/***/ "./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js":
/*!*******************************************************************!*\
!*** ./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var UA = __webpack_require__(/*! ./useragent-base */ \"./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js\");\nmodule.exports = function (ua) {\n var uaData = new UA(ua);\n var match;\n var tmpMatch;\n // handle mobile device\n if (uaData.device.type === 'mobile' || uaData.device.type === 'tablet') {\n\n // get manufacturer through the key words\n if (match = ua.match(/(ZTE|Samsung|Motorola|HTC|Coolpad|Huawei|Lenovo|LG|Sony Ericsson|Oppo|TCL|Vivo|Sony|Meizu|Nokia)/i)) {\n uaData.device.manufacturer = match[1];\n if (uaData.device.model && uaData.device.model.indexOf(match[1]) >= 0) {\n uaData.device.model = uaData.device.model.replace(match[1], '');\n }\n }\n // handle Apple\n // 苹果就这3种iPod iPad iPhone\n if (match = ua.match(/(iPod|iPad|iPhone)/i)) {\n uaData.device.manufacturer = 'Apple';\n uaData.device.model = match[1];\n }\n // handle Samsung\n // 特殊型号可能以xxx-开头 或者直接空格接型号 兼容build结尾或直接)结尾\n // Galaxy nexus才是三星 nexus是google手机\n // 三星手机类型:galaxy xxx|SM-xxx|GT-xxx|SCH-xxx|SGH-xxx|SPH-xxx|SHW-xxx 若这些均未匹配到,则启用在中关村在线爬取到的机型白名单进行判断\n else if (match = ua.match(/[-\\s](Galaxy[\\s-_]nexus|Galaxy[\\s-_]\\w*[\\s-_]\\w*|Galaxy[\\s-_]\\w*|SM-\\w*|GT-\\w*|s[cgp]h-\\w*|shw-\\w*|ATIV|i9070|omnia|s7568|A3000|A3009|A5000|A5009|A7000|A7009|A8000|C101|C1116|C1158|E400|E500F|E7000|E7009|G3139D|G3502|G3502i|G3508|G3508J|G3508i|G3509|G3509i|G3558|G3559|G3568V|G3586V|G3589W|G3606|G3608|G3609|G3812|G388F|G5108|G5108Q|G5109|G5306W|G5308W|G5309W|G550|G600|G7106|G7108|G7108V|G7109|G7200|G720NO|G7508Q|G7509|G8508S|G8509V|G9006V|G9006W|G9008V|G9008W|G9009D|G9009W|G9198|G9200|G9208|G9209|G9250|G9280|I535|I679|I739|I8190N|I8262|I879|I879E|I889|I9000|I9060|I9082|I9082C|I9082i|I9100|I9100G|I9108|I9128|I9128E|I9128i|I9152|I9152P|I9158|I9158P|I9158V|I9168|I9168i|I9190|I9192|I9195|I9195I|I9200|I9208|I9220|I9228|I9260|I9268|I9300|I9300i|I9305|I9308|I9308i|I939|I939D|I939i|I9500|I9502|I9505|I9507V|I9508|I9508V|I959|J100|J110|J5008|J7008|N7100|N7102|N7105|N7108|N7108D|N719|N750|N7505|N7506V|N7508V|N7509V|N900|N9002|N9005|N9006|N9008|N9008S|N9008V|N9009|N9100|N9106W|N9108V|N9109W|N9150|N916|N9200|P709|P709E|P729|S6358|S7278|S7278U|S7562C|S7562i|S7898i|b9388)[\\s\\)]/i)) {\n uaData.device.manufacturer = 'Samsung';\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z]+[0-9]+[A-Z]*, 例如 G9006 G9006V 其实应该是G9006 另外三星只保留3位\n uaData.device.model = match[1].replace(/Galaxy S VI/i, 'Galaxy S6')\n .replace(/Galaxy S V/i, 'Galaxy S5')\n .replace(/Galaxy S IV/i, 'Galaxy S4')\n .replace(/Galaxy s III/i, 'Galaxy S3')\n .replace(/Galaxy S II/i, 'Galaxy S2')\n .replace(/Galaxy S I/i, 'Galaxy S1')\n .replace(/([a-z]+[0-9]{3})[0-9]?[a-z]*/i, '$1');\n }\n // 针对三星已经匹配出的数据做处理\n else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'samsung' && uaData.device.model) {\n uaData.device.model = uaData.device.model.replace(/Galaxy S VI/i, 'Galaxy S6')\n .replace(/Galaxy S V/i, 'Galaxy S5')\n .replace(/Galaxy S IV/i, 'Galaxy S4')\n .replace(/Galaxy s III/i, 'Galaxy S3')\n .replace(/Galaxy S II/i, 'Galaxy S2')\n .replace(/Galaxy S I/i, 'Galaxy S1')\n .replace(/([a-z]+[0-9]{3})[0-9]?[a-z]*/i, '$1');\n }\n // handle Huawei\n // 兼容build结尾或直接)结尾\n // 华为机型特征:Huawei[\\s-_](\\w*[-_]?\\w*) 或者以 7D- ALE- CHE-等开头\n else if (match = ua.match(/(Huawei[\\s-_](\\w*[-_]?\\w*)|\\s(7D-\\w*|ALE-\\w*|ATH-\\w*|CHE-\\w*|CHM-\\w*|Che1-\\w*|Che2-\\w*|D2-\\w*|G616-\\w*|G620S-\\w*|G621-\\w*|G660-\\w*|G750-\\w*|GRA-\\w*|Hol-\\w*|MT2-\\w*|MT7-\\w*|PE-\\w*|PLK-\\w*|SC-\\w*|SCL-\\w*|H60-\\w*|H30-\\w*)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Huawei';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:xxx-[A-Z][0-9]+ 例如 H30-L01 H30-L00 H30-L20 都应该是 H30-L\n // h30-l h30-h h30-t 都是H30\n if (match = uaData.device.model.match(/(\\w*)[\\s-_]+[a-z0-9]+/i)) {\n uaData.device.model = match[1];\n }\n }\n // handle Xiaomi\n // 兼容build结尾或直接)结尾 以及特殊的HM处理方案(build/hm2013011)\n // xiaomi手机类型: mi m1 m2 m3 hm 开头\n // hongmi有特殊判断build/hm2015011\n else if (match = ua.match(/;\\s(mi|m1|m2|m3|m4|hm)(\\s*\\w*)[\\s\\)]/i)) {\n if (tmpMatch = ua.match(/(meitu|MediaPad)/i)) {\n // 美图手机名字冒充小米 比如 meitu m4 mizhi\n uaData.device.manufacturer = tmpMatch[1];\n uaData.device.model = '';\n }\n // 若匹配出的 match[2]没空格 会出现很多例如 mizi mizhi miha 但也会出现mi3 minote之类 特殊处理下\n else if (match[2].length > 0 && !((/\\s/).test(match[2]))) {\n if (tmpMatch = match[2].match(/(\\d)/i)) {\n uaData.device.model = match[1] + '-' + tmpMatch[1];\n }\n }\n else {\n uaData.device.manufacturer = 'Xiaomi';\n if (match[2] && match[2].length > 0) {\n match[2] = match[2].replace(/\\s/, '');\n uaData.device.model = (match[1].substr(match[1].length - 2) + '-' + match[2]).replace(/m(\\d)-/i, 'MI-$1');\n }\n else {\n uaData.device.model = (match[1].substr(match[1].length - 2)).replace(/m(\\d)/i, 'MI-$1');\n }\n\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:mi-3c,例如mi-4LTE mi-4 其实应该是 mi-4\n if (/(mi|hm)(-\\d)/i.test(uaData.device.model)) {\n // 看看是不是 MI-3S MI-4S....\n if (match = uaData.device.model.match(/(mi|hm)(-\\ds)/i)) {\n uaData.device.model = match[1] + match[2];\n }\n // 防止 MI-20150XX等滥竽充数成为MI-2\n else if (match = uaData.device.model.match(/(mi|hm)(-\\d{2})/i)) {\n uaData.device.model = match[1];\n }\n // 将mi-3c mi-3a mi-3w等合为mi-3\n else if (match = uaData.device.model.match(/(mi|hm)(-\\d)[A-Z]/i)) {\n uaData.device.model = match[1] + match[2];\n }\n }\n // 去除 mi-4g这样的东西\n if (match = uaData.device.model.match(/(mi|hm)(-\\dg)/i)) {\n uaData.device.model = match[1];\n }\n }\n }\n else if (/build\\/HM\\d{0,7}\\)/i.test(ua)) {\n uaData.device.manufacturer = 'Xiaomi';\n uaData.device.model = 'HM';\n }\n else if (match = ua.match(/redmi\\s?(\\d+)?/i)) {\n uaData.device.manufacturer = 'Xiaomi';\n uaData.device.model = 'HM-' + match[1];\n }\n else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'xiaomi' && uaData.device.model) {\n // 针对通过base库判断出数据时命名风格不同。特殊处理适配如下\n if (match = uaData.device.model.match(/mi-one/i)) {\n uaData.device.model = 'MI-1';\n }\n // mi 2\n else if (match = uaData.device.model.match(/mi-two/i)) {\n uaData.device.model = 'MI-2';\n }\n // 20150xxx2014501\n else if (match = uaData.device.model.match(/\\d{6}/i)) {\n uaData.device.model = '';\n }\n else if (match = uaData.device.model.match(/redmi/i)) {\n uaData.device.model = uaData.device.model.toUpperCase().replace(/redmi/i, 'HM');\n }\n // m1 m2 m3 写法不标准 另外判断是否是 m1-s\n else if (match = uaData.device.model.match(/(m\\d)[\\s-_](s?)/i)) {\n uaData.device.model = match[1].replace(/m/, 'MI-') + match[2];\n }\n // mi-2w mi-3w 等格式化为mi-2 mi-3\n else if (match = uaData.device.model.match(/(hm|mi)[\\s-_](\\d?)[a-rt-z]/i)) {\n if (tmpMatch = uaData.device.model.match(/(mi|hm)[\\s-_](note|pad)(\\d?s?)/i)) {\n uaData.device.model = tmpMatch[1] + '-' + tmpMatch[2] + tmpMatch[3];\n }\n else {\n uaData.device.model = match[2] ? match[1] + '-' + match[2] : match[1];\n }\n }\n // 处理hm\n else if (match = uaData.device.model.match(/hm/i)) {\n // 判断是不是 hm-201xxx充数\n if (match = uaData.device.model.match(/(hm)[\\s-_](\\d{2})/i)) {\n uaData.device.model = 'HM';\n }\n // 判断是不是 hm-2s hm-1s\n else if (match = uaData.device.model.match(/(hm)[\\s-_](\\ds)/i)) {\n uaData.device.model = 'HM-' + match[2];\n }\n else if (match = uaData.device.model.match(/(hm)[\\s-_](\\d)[a-z]/i)) {\n uaData.device.model = 'HM-' + match[2];\n }\n else {\n uaData.device.model = 'HM';\n }\n // 过滤类似 2g 3g等数据\n if (/hm-\\dg/.test(uaData.device.model)) {\n uaData.device.model = 'HM';\n }\n }\n }\n // handle Vivo\n // 兼容build结尾或直接)结尾\n // vivo机型特征: Vivo[\\s-_](\\w*) 或者以 E1 S11t S7t 等开头\n else if (match = ua.match(/(vivo[\\s-_](\\w*)|\\s(E1\\w?|E3\\w?|E5\\w?|V1\\w?|V2\\w?|S11\\w?|S12\\w?|S1\\w?|S3\\w?|S6\\w?|S7\\w?|S9\\w?|X1\\w?|X3\\w?|X520\\w?|X5\\w?|X5Max|X5Max+|X5Pro|X5SL|X710F|X710L|Xplay|Xshot|Xpaly3S|Y11\\w?|Y11i\\w?|Y11i\\w?|Y13\\w?|Y15\\w?|Y17\\w?|Y18\\w?|Y19\\w?|Y1\\w?|Y20\\w?|Y22\\w?|Y22i\\w?|Y23\\w?|Y27\\w?|Y28\\w?|Y29\\w?|Y33\\w?|Y37\\w?|Y3\\w?|Y613\\w?|Y622\\w?|Y627\\w?|Y913\\w?|Y923\\w?|Y927\\w?|Y928\\w?|Y929\\w?|Y937\\w?)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Vivo';\n uaData.device.model = match[1];\n // 首先剔除 viv- vivo- bbg- 等打头的内容\n uaData.device.model = uaData.device.model.replace(/(viv[\\s-_]|vivo[\\s-_]|bbg[\\s-_])/i, '');\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z][0-9]+[A-Z] 例如 X5F X5L X5M X5iL 都应该是 X5\n if (match = uaData.device.model.match(/([a-z]+[0-9]+)i?[a-z]?[\\s-_]?/i)) {\n uaData.device.model = match[1];\n }\n }\n // handle Oppo\n else if (match = ua.match(/(Oppo[\\s-_](\\w*)|\\s(1100|1105|1107|3000|3005|3007|6607|A100|A103|A105|A105K|A109|A109K|A11|A113|A115|A115K|A121|A125|A127|A129|A201|A203|A209|A31|A31c|A31t|A31u|A51kc|A520|A613|A615|A617|E21W|Find|Mirror|N5110|N5117|N5207|N5209|R2010|R2017|R6007|R7005|R7007|R7c|R7t|R8000|R8007|R801|R805|R807|R809T|R8107|R8109|R811|R811W|R813T|R815T|R815W|R817|R819T|R8200|R8205|R8207|R821T|R823T|R827T|R830|R830S|R831S|R831T|R833T|R850|Real|T703|U2S|U521|U525|U529|U539|U701|U701T|U705T|U705W|X9000|X9007|X903|X905|X9070|X9077|X909|Z101|R829T)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Oppo';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z][0-9]+[A-Z] 例如 A31c A31s 都应该是 A31\n // 对 Plus 做特殊处理\n if (match = uaData.device.model.match(/([a-z]+[0-9]+)-?(plus)/i)) {\n uaData.device.model = match[1] + '-' + match[2];\n }\n else if (match = uaData.device.model.match(/(\\w*-?[a-z]+[0-9]+)/i)) {\n uaData.device.model = match[1];\n }\n }\n else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'oppo' && uaData.device.model) {\n // 针对base库的数据做数据格式化处理\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z][0-9]+[A-Z] 例如 A31c A31s 都应该是 A31\n // 对 Plus 做特殊处理\n if (match = uaData.device.model.match(/([a-z]+[0-9]+)-?(plus)/i)) {\n uaData.device.model = match[1] + '-' + match[2];\n }\n else if (match = uaData.device.model.match(/(\\w*-?[a-z]+[0-9]+)/i)) {\n uaData.device.model = match[1];\n }\n }\n // handle Lenovo\n // 兼容build结尾或直接)结尾 兼容Lenovo-xxx/xxx以及Leveno xxx build等\n else if (match = ua.match(/(Lenovo[\\s-_](\\w*[-_]?\\w*)|\\s(A3580|A3860|A5500|A5600|A5860|A7600|A806|A800|A808T|A808T-I|A936|A938t|A788t|K30-E|K30-T|K30-W|K50-T3s|K50-T5|K80M|K910|K910e|K920|S90-e|S90-t|S90-u|S968T|X2-CU|X2-TO|Z90-3|Z90-7)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Lenovo';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z][0-9]+[A-Z] 例如 A360t A360 都应该是 A360\n if (match = uaData.device.model.match(/([a-z]+[0-9]+)/i)) {\n uaData.device.model = match[1];\n }\n }\n // handle coolpad\n else if (match = ua.match(/(Coolpad[\\s-_](\\w*)|\\s(7295C|7298A|7620L|8908|8085|8970L|9190L|Y80D)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Coolpad';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z][0-9]+[A-Z] 例如 8297-t01 8297-c01 8297w 都应该是 8297\n if (match = uaData.device.model.match(/([a-z]?[0-9]+)/i)) {\n uaData.device.model = match[1];\n }\n }\n else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'coolpad' && uaData.device.model) {\n // base 库适配\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z][0-9]+[A-Z] 例如 8297-t01 8297-c01 8297w 都应该是 8297\n if (match = uaData.device.model.match(/([a-z]?[0-9]+)/i)) {\n uaData.device.model = match[1];\n }\n }\n // handle meizu\n else if (match = ua.match(/\\s(mx\\d*\\w*|mz-(\\w*))\\s(\\w*)\\s*\\w*\\s*build/i)) {\n uaData.device.manufacturer = 'Meizu';\n var tmpModel = match[2] ? match[2] : match[1];\n if (match[3]) {\n uaData.device.model = tmpModel + '-' + match[3];\n }\n else {\n uaData.device.model = tmpModel + '';\n }\n }\n else if (match = ua.match(/M463C|M35\\d/i)) {\n uaData.device.manufacturer = 'Meizu';\n uaData.device.model = match[1];\n }\n // handle htc\n else if (match = ua.match(/(Htc[-_\\s](\\w*)|\\s(601e|606w|608t|609d|610t|6160|619d|620G|626d|626s|626t|626w|709d|801e|802d|802t|802w|809D|816d|816e|816t|816v|816w|826d|826s|826t|826w|828w|901e|919d|A310e|A50AML|A510e|A620d|A620e|A620t|A810e|A9191|Aero|C620d|C620e|C620t|D316d|D516d|D516t|D516w|D820mt|D820mu|D820t|D820ts|D820u|D820us|E9pt|E9pw|E9sw|E9t|HD7S|M8Et|M8Sd|M8St|M8Sw|M8d|M8e|M8s|M8si|M8t|M8w|M9W|M9ew|Phablet|S510b|S510e|S610d|S710d|S710e|S720e|S720t|T327t|T328d|T328t|T328w|T329d|T329t|T329w|T528d|T528t|T528w|T8698|WF5w|X315e|X710e|X715e|X720d|X920e|Z560e|Z710e|Z710t|Z715e)[\\s\\)])/)) {\n uaData.device.manufacturer = 'Htc';\n uaData.device.model = match[1];\n }\n // handle Gionee\n else if (match = ua.match(/(Gionee[\\s-_](\\w*)|\\s(GN\\d+\\w*)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Gionee';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n }\n // handle LG\n else if (match = ua.match(/(LG[-_](\\w*)|\\s(D728|D729|D802|D855|D856|D857|D858|D859|E985T|F100L|F460|H778|H818|H819|P895|VW820)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Lg';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n }\n // handle tcl\n else if (match = ua.match(/(Tcl[\\s-_](\\w*)|\\s(H916T|P588L|P618L|P620M|P728M)[\\s\\)])/)) {\n uaData.device.manufacturer = 'Tcl';\n uaData.device.model = match[1];\n }\n // ZTE\n else if (match = ua.match(/(V9180|N918)/i)) {\n uaData.device.manufacturer = 'Zte';\n uaData.device.model = match[1];\n }\n else if (uaData.device.manufacturer && uaData.device.manufacturer.toLowerCase() === 'zte' && uaData.device.model) {\n // base 库适配\n // 解决移动联通等不同发行版导致的机型不同问题\n // 特征:[A-Z][0-9]+[A-Z] 例如 Q505T Q505u 都应该是 Q505\n if (match = uaData.device.model.match(/([a-z]?[0-9]+)/i)) {\n uaData.device.model = match[1];\n }\n }\n // UIMI\n else if (match = ua.match(/(UIMI\\w*|umi\\w*)[\\s-_](\\w*)\\s*\\w*\\s*build/i)) {\n uaData.device.manufacturer = 'Uimi';\n if (match[2]) {\n uaData.device.model = match[1] + '-' + match[2];\n }\n else {\n uaData.device.model = match[1] + '';\n }\n }\n // eton\n else if (match = ua.match(/eton[\\s-_](\\w*)/i)) {\n uaData.device.manufacturer = 'Eton';\n uaData.device.model = match[1];\n }\n // Smartisan\n else if (match = ua.match(/(SM705|SM701|YQ601|YQ603)/i)) {\n uaData.device.manufacturer = 'Smartisan';\n uaData.device.model = ({\n SM705: 'T1',\n SM701: 'T1',\n YQ601: 'U1',\n YQ603: 'U1'\n })[match[1]] || match[1];\n }\n // handle Asus\n else if (match = ua.match(/(Asus[\\s-_](\\w*)|\\s(A500CG|A500KL|A501CG|A600CG|PF400CG|PF500KL|T001|X002|X003|ZC500TG|ZE550ML|ZE551ML)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Asus';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n }\n // handle nubia\n else if (match = ua.match(/(Nubia[-_\\s](\\w*)|(NX501|NX505J|NX506J|NX507J|NX503A|nx\\d+\\w*)[\\s\\)])/i)) {\n uaData.device.manufacturer = 'Nubia';\n if (match[2]) {\n uaData.device.model = match[2];\n }\n else if (match[3]) {\n uaData.device.model = match[3];\n }\n }\n // handle haier\n else if (match = ua.match(/(HT-\\w*)|Haier[\\s-_](\\w*-?\\w*)/i)) {\n uaData.device.manufacturer = 'Haier';\n if (match[1]) {\n uaData.device.model = match[1];\n }\n else if (match[2]) {\n uaData.device.model = match[2];\n }\n }\n // tianyu\n else if (match = ua.match(/K-Touch[\\s-_](tou\\s?ch\\s?(\\d)|\\w*)/i)) {\n uaData.device.manufacturer = 'K-Touch';\n if (match[2]) {\n uaData.device.model = 'Ktouch' + match[2];\n }\n else {\n uaData.device.model = match[1];\n }\n }\n\n // DOOV\n else if (match = ua.match(/Doov[\\s-_](\\w*)/i)) {\n uaData.device.manufacturer = 'Doov';\n uaData.device.model = match[1];\n }\n // coobee\n else if (/koobee/i.test(ua)) {\n uaData.device.manufacturer = 'koobee';\n }\n\n // sony\n else if (/C69/i.test(ua)) {\n uaData.device.manufacturer = 'Sony';\n }\n\n // haojixing\n else if (/N787|N818S/i.test(ua)) {\n uaData.device.manufacturer = 'Haojixing';\n }\n\n // haisense\n else if (match = ua.match(/(hs-|Hisense[\\s-_])(\\w*)/i)) {\n uaData.device.manufacturer = 'Hisense';\n uaData.device.model = match[2];\n }\n\n // format the style of manufacturer\n if (uaData.device.manufacturer) {\n uaData.device.manufacturer = uaData.device.manufacturer.substr(0, 1).toUpperCase() + uaData.device.manufacturer.substr(1).toLowerCase();\n }\n // format the style of model\n if (uaData.device.model) {\n uaData.device.model = uaData.device.model.toUpperCase().replace(/-+|_+|\\s+/g, ' ');\n uaData.device.model = uaData.device.model.match(/\\s*(\\w*\\s*\\w*)/)[1].replace(/\\s+/, '-');\n\n // 针对三星、华为做去重的特殊处理\n if (uaData.device.manufacturer === 'Samsung') {\n uaData.device.model = ({\n 'SCH-I95': 'GT-I950',\n 'SCH-I93': 'GT-I930',\n 'SCH-I86': 'GT-I855',\n 'SCH-N71': 'GT-N710',\n 'SCH-I73': 'GT-S789',\n 'SCH-P70': 'GT-I915'\n })[uaData.device.model] || uaData.device.model;\n }\n else if (uaData.device.manufacturer === 'Huawei') {\n uaData.device.model = ({\n CHE1: 'CHE',\n CHE2: 'CHE',\n G620S: 'G621',\n C8817D: 'G621'\n })[uaData.device.model] || uaData.device.model;\n }\n }\n\n // 针对xiaomi 的部分数据没有格式化成功,格式化1次\n if (uaData.device.manufacturer && uaData.device.manufacturer === 'Xiaomi') {\n if (match = uaData.device.model.match(/(hm|mi)-(note)/i)) {\n uaData.device.model = match[1] + '-' + match[2];\n }\n else if (match = uaData.device.model.match(/(hm|mi)-(\\ds?)/i)) {\n uaData.device.model = match[1] + '-' + match[2];\n }\n else if (match = uaData.device.model.match(/(hm|mi)-(\\d)[a-rt-z]/i)) {\n uaData.device.model = match[1] + '-' + match[2];\n }\n }\n }\n // handle browser\n // if (!uaData.browser.name) {\n // ua = ua.toLowerCase();\n if (uaData.device.type === 'desktop') {\n /*\n * 360 security Explorer\n */\n if (match = /360se(?:[ \\/]([\\w.]+))?/i.exec(ua)) {\n uaData.browser.name = '360 security Explorer';\n uaData.browser.version = {\n original: match[1]\n };\n }\n /**\n * the world\n */\n else if (match = /the world(?:[ \\/]([\\w.]+))?/i.exec(ua)) {\n uaData.browser.name = 'the world';\n uaData.browser.version = {\n original: match[1]\n };\n }\n /**\n * tencenttraveler\n */\n else if (match = /tencenttraveler ([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'tencenttraveler';\n uaData.browser.version = {\n original: match[1]\n };\n }\n /**\n * LBBROWSER\n */\n else if (match = /LBBROWSER/i.exec(ua)) {\n uaData.browser.name = 'LBBROWSER';\n }\n }\n else if (uaData.device.type === 'mobile' || uaData.device.type === 'tablet') {\n /**\n * BaiduHD\n */\n if (match = /BaiduHD\\s+([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'BaiduHD';\n uaData.browser.version = {\n original: match[1]\n };\n }\n /**\n * 360 Browser\n */\n else if (match = /360.s*aphone\\s*browser\\s*\\(version\\s*([\\w.]+)\\)/i.exec(ua)) {\n uaData.browser.name = '360 Browser';\n uaData.browser.version = {\n original: match[1]\n };\n }\n /**\n * Baidu Browser\n */\n else if (match = /flyflow\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'Baidu Browser';\n uaData.browser.version = {\n original: match[1]\n };\n }\n\n /**\n * Baidu HD\n */\n else if (match = /baiduhd ([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'Baidu HD';\n uaData.browser.version = {\n original: match[1]\n };\n }\n\n /**\n * baidubrowser\n */\n else if (match = /baidubrowser\\/([\\d\\.]+)\\s/i.exec(ua)) {\n uaData.browser.name = 'baidubrowser';\n uaData.browser.version = {\n original: match[1]\n };\n }\n\n /**\n * LieBaoFast\n */\n else if (match = /LieBaoFast\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'LieBao Fast';\n uaData.browser.version = {\n original: match[1]\n };\n }\n\n /**\n * LieBao\n */\n else if (match = /LieBao\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'LieBao';\n uaData.browser.version = {\n original: match[1]\n };\n }\n\n /**\n * SOUGOU\n */\n else if (match = /Sogou\\w+\\/([0-9\\.]+)/i.exec(ua)) {\n uaData.browser.name = 'SogouMobileBrowser';\n uaData.browser.version = {\n original: match[1]\n };\n }\n\n /**\n * 百度国际\n */\n else if (match = /bdbrowser\\w+\\/([0-9\\.]+)/i.exec(ua)) {\n uaData.browser.name = '百度国际';\n uaData.browser.version = {\n original: match[1]\n };\n }\n\n /**\n * Android Chrome Browser\n */\n else if (uaData.os.name === 'Android' && /safari/i.test(ua) && (match = /chrome\\/([0-9\\.]+)/i.exec(ua))) {\n if (tmpMatch = ua.match(/\\s+(\\w+Browser)\\/?([\\d\\.]*)/)) {\n uaData.browser.name = tmpMatch[1];\n if (tmpMatch[2]) {\n uaData.browser.version = {original: tmpMatch[2]};\n } else {\n uaData.browser.version = {original: match[1]};\n }\n } else {\n uaData.browser.name = 'Android Chrome';\n uaData.browser.version = {original: match[1]};\n }\n }\n\n /**\n * Android Google Browser\n */\n else if (uaData.os.name === 'Android' && /safari/i.test(ua) && (match = /version\\/([0-9\\.]+)/i.exec(ua))) {\n if (tmpMatch = ua.match(/\\s+(\\w+Browser)\\/?([\\d\\.]*)/)) {\n uaData.browser.name = tmpMatch[1];\n if (tmpMatch[2]) {\n uaData.browser.version = {original: tmpMatch[2]};\n } else {\n uaData.browser.version = {original: match[1]};\n }\n } else {\n uaData.browser.name = 'Android Browser';\n uaData.browser.version = {original: match[1]};\n }\n }\n\n /**\n * 'Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206' belongs to Safari\n */\n else if (/(ipad|iphone).* applewebkit\\/.* mobile/i.test(ua)) {\n uaData.browser.name = 'Safari';\n }\n }\n if (match = ua.match(/baiduboxapp\\/?([\\d\\.]*)/i)) {\n uaData.browser.name = '百度框';\n if (match[1]) {\n uaData.browser.version = {\n original: match[1]\n };\n }\n // uaData.browser.name = 'baidu box';\n }\n else if (/BaiduLightAppRuntime/i.test(ua)) {\n uaData.browser.name = '轻应用runtime';\n // uaData.browser.name = 'qing runtime';\n }\n else if (/Weibo/i.test(ua)) {\n uaData.browser.name = '微博';\n // uaData.browser.name = 'weibo';\n }\n else if (/MQQ/i.test(ua)) {\n uaData.browser.name = '手机QQ';\n // uaData.browser.name = 'mobile qq';\n }\n else if (/hao123/i.test(ua)) {\n uaData.browser.name = 'hao123';\n }\n // }\n if (match = /MicroMessenger\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = '微信';\n var tmpVersion = (match[1]).replace(/_/g, '.');\n tmpMatch = /(\\d+\\.\\d+\\.\\d+\\.\\d+)/.exec(tmpVersion);\n if(tmpMatch) {\n tmpVersion = tmpMatch[1];\n }\n uaData.browser.version = {\n original: tmpVersion\n };\n }\n if (match = /UCBrowser\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'UC Browser';\n uaData.browser.version = {\n original: match[1]\n };\n }\n if (match = /OPR\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'Opera';\n uaData.browser.version = {\n original: match[1]\n };\n } else if (match = /OPiOS\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'Opera';\n uaData.browser.version = {\n original: match[1]\n };\n }\n // IE 11\n else if (/Trident\\/7/i.test(ua) && /rv:11/i.test(ua)) {\n uaData.browser.name = 'Internet Explorer';\n uaData.browser.version = {\n major: '11',\n original: '11'\n };\n }\n // Microsoft Edge\n else if (/Edge\\/12/i.test(ua) && /Windows Phone|Windows NT/i.test(ua)) {\n uaData.browser.name = 'Microsoft Edge';\n uaData.browser.version = {\n major: '12',\n original: '12'\n };\n }\n // miui browser\n else if (match = /miuibrowser\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.name = 'miui browser';\n uaData.browser.version = {\n original: match[1]\n };\n }\n // Safari\n if (!uaData.browser.name) {\n if (match = /Safari\\/([\\w.]+)/i.exec(ua) && /Version/i.test(ua)) {\n uaData.browser.name = 'Safari';\n }\n }\n if (uaData.browser.name && !uaData.browser.version) {\n if (match = /Version\\/([\\w.]+)/i.exec(ua)) {\n uaData.browser.version = {\n original: match[1]\n };\n }\n }\n\n // if (uaData.os.name === 'Windows' && uaData.os.version) {\n // // Windows 8.1\n // if (uaData.os.version.alias === 'NT 6.3') {\n // uaData.os.version.alias = '8.1';\n // }\n // }\n // handle os\n if (uaData.os.name === 'Windows' || /Windows/i.test(ua)) {\n uaData.os.name = 'Windows';\n if (/NT 6.3/i.test(ua)) {\n uaData.os.version = {\n alias: '8.1',\n original: '8.1'\n };\n }\n else if (/NT 6.4/i.test(ua) || /NT 10.0/i.test(ua)) {\n uaData.os.version = {\n alias: '10',\n original: '10'\n };\n }\n }\n else if (uaData.os.name === 'Mac OS X') {\n uaData.os.name = 'Mac OS X';\n if (match = /Mac OS X[\\s\\_\\-\\/](\\d+[\\.\\-\\_]\\d+[\\.\\-\\_]?\\d*)/i.exec(ua)) {\n uaData.os.version = {\n alias: match[1].replace(/_/g, '.'),\n original: match[1].replace(/_/g, '.')\n };\n }\n else {\n uaData.os.version = {\n alias: '',\n original: ''\n };\n }\n }\n else if (/Android/i.test(uaData.os.name)) {\n if (match = ua.match(/Android[\\s\\_\\-\\/i686]?[\\s\\_\\-\\/](\\d+[\\.\\-\\_]\\d+[\\.\\-\\_]?\\d*)/i)) {\n uaData.os.version = {\n alias: match[1],\n original: match[1]\n };\n }\n }\n return uaData;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2xpYi91YS1kZXZpY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2xpYi91YS1kZXZpY2UuanM/Zjk2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgVUEgPSByZXF1aXJlKCcuL3VzZXJhZ2VudC1iYXNlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1YSkge1xuICAgIHZhciB1YURhdGEgPSBuZXcgVUEodWEpO1xuICAgIHZhciBtYXRjaDtcbiAgICB2YXIgdG1wTWF0Y2g7XG4gICAgLy8gaGFuZGxlIG1vYmlsZSBkZXZpY2VcbiAgICBpZiAodWFEYXRhLmRldmljZS50eXBlID09PSAnbW9iaWxlJyB8fCB1YURhdGEuZGV2aWNlLnR5cGUgPT09ICd0YWJsZXQnKSB7XG5cbiAgICAgICAgLy8gZ2V0IG1hbnVmYWN0dXJlciB0aHJvdWdoIHRoZSBrZXkgd29yZHNcbiAgICAgICAgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhaVEV8U2Ftc3VuZ3xNb3Rvcm9sYXxIVEN8Q29vbHBhZHxIdWF3ZWl8TGVub3ZvfExHfFNvbnkgRXJpY3Nzb258T3Bwb3xUQ0x8Vml2b3xTb255fE1laXp1fE5va2lhKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGlmICh1YURhdGEuZGV2aWNlLm1vZGVsICYmIHVhRGF0YS5kZXZpY2UubW9kZWwuaW5kZXhPZihtYXRjaFsxXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSB1YURhdGEuZGV2aWNlLm1vZGVsLnJlcGxhY2UobWF0Y2hbMV0sICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgQXBwbGVcbiAgICAgICAgLy8g6Iu55p6c5bCx6L+ZM+enjWlQb2QgaVBhZCBpUGhvbmVcbiAgICAgICAgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhpUG9kfGlQYWR8aVBob25lKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQXBwbGUnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBTYW1zdW5nXG4gICAgICAgIC8vIOeJueauiuWei+WPt+WPr+iDveS7pXh4eC3lvIDlpLQg5oiW6ICF55u05o6l56m65qC85o6l5Z6L5Y+3IOWFvOWuuWJ1aWxk57uT5bC+5oiW55u05o6lKee7k+WwvlxuICAgICAgICAvLyBHYWxheHkgbmV4dXPmiY3mmK/kuInmmJ8gbmV4dXPmmK9nb29nbGXmiYvmnLpcbiAgICAgICAgLy8g5LiJ5pif5omL5py657G75Z6L77yaZ2FsYXh5IHh4eHxTTS14eHh8R1QteHh4fFNDSC14eHh8U0dILXh4eHxTUEgteHh4fFNIVy14eHggIOiLpei/meS6m+Wdh+acquWMuemFjeWIsO+8jOWImeWQr+eUqOWcqOS4reWFs+adkeWcqOe6v+eIrOWPluWIsOeahOacuuWei+eZveWQjeWNlei/m+ihjOWIpOaWrVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC9bLVxcc10oR2FsYXh5W1xccy1fXW5leHVzfEdhbGF4eVtcXHMtX11cXHcqW1xccy1fXVxcdyp8R2FsYXh5W1xccy1fXVxcdyp8U00tXFx3KnxHVC1cXHcqfHNbY2dwXWgtXFx3KnxzaHctXFx3KnxBVElWfGk5MDcwfG9tbmlhfHM3NTY4fEEzMDAwfEEzMDA5fEE1MDAwfEE1MDA5fEE3MDAwfEE3MDA5fEE4MDAwfEMxMDF8QzExMTZ8QzExNTh8RTQwMHxFNTAwRnxFNzAwMHxFNzAwOXxHMzEzOUR8RzM1MDJ8RzM1MDJpfEczNTA4fEczNTA4SnxHMzUwOGl8RzM1MDl8RzM1MDlpfEczNTU4fEczNTU5fEczNTY4VnxHMzU4NlZ8RzM1ODlXfEczNjA2fEczNjA4fEczNjA5fEczODEyfEczODhGfEc1MTA4fEc1MTA4UXxHNTEwOXxHNTMwNld8RzUzMDhXfEc1MzA5V3xHNTUwfEc2MDB8RzcxMDZ8RzcxMDh8RzcxMDhWfEc3MTA5fEc3MjAwfEc3MjBOT3xHNzUwOFF8Rzc1MDl8Rzg1MDhTfEc4NTA5VnxHOTAwNlZ8RzkwMDZXfEc5MDA4VnxHOTAwOFd8RzkwMDlEfEc5MDA5V3xHOTE5OHxHOTIwMHxHOTIwOHxHOTIwOXxHOTI1MHxHOTI4MHxJNTM1fEk2Nzl8STczOXxJODE5ME58STgyNjJ8STg3OXxJODc5RXxJODg5fEk5MDAwfEk5MDYwfEk5MDgyfEk5MDgyQ3xJOTA4Mml8STkxMDB8STkxMDBHfEk5MTA4fEk5MTI4fEk5MTI4RXxJOTEyOGl8STkxNTJ8STkxNTJQfEk5MTU4fEk5MTU4UHxJOTE1OFZ8STkxNjh8STkxNjhpfEk5MTkwfEk5MTkyfEk5MTk1fEk5MTk1SXxJOTIwMHxJOTIwOHxJOTIyMHxJOTIyOHxJOTI2MHxJOTI2OHxJOTMwMHxJOTMwMGl8STkzMDV8STkzMDh8STkzMDhpfEk5Mzl8STkzOUR8STkzOWl8STk1MDB8STk1MDJ8STk1MDV8STk1MDdWfEk5NTA4fEk5NTA4VnxJOTU5fEoxMDB8SjExMHxKNTAwOHxKNzAwOHxONzEwMHxONzEwMnxONzEwNXxONzEwOHxONzEwOER8TjcxOXxONzUwfE43NTA1fE43NTA2VnxONzUwOFZ8Tjc1MDlWfE45MDB8TjkwMDJ8TjkwMDV8TjkwMDZ8TjkwMDh8TjkwMDhTfE45MDA4VnxOOTAwOXxOOTEwMHxOOTEwNld8TjkxMDhWfE45MTA5V3xOOTE1MHxOOTE2fE45MjAwfFA3MDl8UDcwOUV8UDcyOXxTNjM1OHxTNzI3OHxTNzI3OFV8Uzc1NjJDfFM3NTYyaXxTNzg5OGl8YjkzODgpW1xcc1xcKV0vaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1NhbXN1bmcnO1xuICAgICAgICAgICAgLy8g6Kej5Yaz56e75Yqo6IGU6YCa562J5LiN5ZCM5Y+R6KGM54mI5a+86Ie055qE5py65Z6L5LiN5ZCM6Zeu6aKYXG4gICAgICAgICAgICAvLyDnibnlvoHvvJpbQS1aXStbMC05XStbQS1aXSosIOS+i+WmgiBHOTAwNiBHOTAwNlYg5YW25a6e5bqU6K+l5pivRzkwMDYg5Y+m5aSW5LiJ5pif5Y+q5L+d55WZM+S9jVxuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdLnJlcGxhY2UoL0dhbGF4eSBTIFZJL2ksICdHYWxheHkgUzYnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBWL2ksICdHYWxheHkgUzUnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJVi9pLCAnR2FsYXh5IFM0JylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IHMgSUlJL2ksICdHYWxheHkgUzMnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJSS9pLCAnR2FsYXh5IFMyJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IFMgSS9pLCAnR2FsYXh5IFMxJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFthLXpdK1swLTldezN9KVswLTldP1thLXpdKi9pLCAnJDEnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDpkojlr7nkuInmmJ/lt7Lnu4/ljLnphY3lh7rnmoTmlbDmja7lgZrlpITnkIZcbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3NhbXN1bmcnICYmIHVhRGF0YS5kZXZpY2UubW9kZWwpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSB1YURhdGEuZGV2aWNlLm1vZGVsLnJlcGxhY2UoL0dhbGF4eSBTIFZJL2ksICdHYWxheHkgUzYnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBWL2ksICdHYWxheHkgUzUnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJVi9pLCAnR2FsYXh5IFM0JylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IHMgSUlJL2ksICdHYWxheHkgUzMnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9HYWxheHkgUyBJSS9pLCAnR2FsYXh5IFMyJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvR2FsYXh5IFMgSS9pLCAnR2FsYXh5IFMxJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvKFthLXpdK1swLTldezN9KVswLTldP1thLXpdKi9pLCAnJDEnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgSHVhd2VpXG4gICAgICAgIC8vIOWFvOWuuWJ1aWxk57uT5bC+5oiW55u05o6lKee7k+WwvlxuICAgICAgICAvLyDljY7kuLrmnLrlnovnibnlvoHvvJpIdWF3ZWlbXFxzLV9dKFxcdypbLV9dP1xcdyopICDmiJbogIXku6UgN0QtICBBTEUtICBDSEUt562J5byA5aS0XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhIdWF3ZWlbXFxzLV9dKFxcdypbLV9dP1xcdyopfFxccyg3RC1cXHcqfEFMRS1cXHcqfEFUSC1cXHcqfENIRS1cXHcqfENITS1cXHcqfENoZTEtXFx3KnxDaGUyLVxcdyp8RDItXFx3KnxHNjE2LVxcdyp8RzYyMFMtXFx3KnxHNjIxLVxcdyp8RzY2MC1cXHcqfEc3NTAtXFx3KnxHUkEtXFx3KnxIb2wtXFx3KnxNVDItXFx3KnxNVDctXFx3KnxQRS1cXHcqfFBMSy1cXHcqfFNDLVxcdyp8U0NMLVxcdyp8SDYwLVxcdyp8SDMwLVxcdyopW1xcc1xcKV0pL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdIdWF3ZWknO1xuICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDop6PlhrPnp7vliqjogZTpgJrnrYnkuI3lkIzlj5HooYzniYjlr7zoh7TnmoTmnLrlnovkuI3lkIzpl67pophcbiAgICAgICAgICAgIC8vIOeJueW+ge+8mnh4eC1bQS1aXVswLTldKyDkvovlpoIgIEgzMC1MMDEgIEgzMC1MMDAgIEgzMC1MMjAgIOmDveW6lOivpeaYryBIMzAtTFxuICAgICAgICAgICAgLy8gaDMwLWwgIGgzMC1oICBoMzAtdCDpg73mmK9IMzBcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhcXHcqKVtcXHMtX10rW2EtejAtOV0rL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBYaWFvbWlcbiAgICAgICAgLy8g5YW85a65YnVpbGTnu5PlsL7miJbnm7TmjqUp57uT5bC+IOS7peWPiueJueauiueahEhN5aSE55CG5pa55qGIKGJ1aWxkL2htMjAxMzAxMSlcbiAgICAgICAgLy8geGlhb21p5omL5py657G75Z6LOiBtaSBtMSBtMiBtMyBobSDlvIDlpLRcbiAgICAgICAgLy8gaG9uZ21p5pyJ54m55q6K5Yik5patYnVpbGQvaG0yMDE1MDExXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLztcXHMobWl8bTF8bTJ8bTN8bTR8aG0pKFxccypcXHcqKVtcXHNcXCldL2kpKSB7XG4gICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSB1YS5tYXRjaCgvKG1laXR1fE1lZGlhUGFkKS9pKSkge1xuICAgICAgICAgICAgICAgIC8vIOe+juWbvuaJi+acuuWQjeWtl+WGkuWFheWwj+exsyDmr5TlpoIgbWVpdHUgbTQgbWl6aGlcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9IHRtcE1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOiLpeWMuemFjeWHuueahCBtYXRjaFsyXeayoeepuuagvCDkvJrlh7rnjrDlvojlpJrkvovlpoIgbWl6aSBtaXpoaSBtaWhhIOS9huS5n+S8muWHuueOsG1pMyBtaW5vdGXkuYvnsbsg54m55q6K5aSE55CG5LiLXG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFsyXS5sZW5ndGggPiAwICYmICEoKC9cXHMvKS50ZXN0KG1hdGNoWzJdKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSBtYXRjaFsyXS5tYXRjaCgvKFxcZCkvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgJy0nICsgdG1wTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnWGlhb21pJztcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0gJiYgbWF0Y2hbMl0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzJdLnJlcGxhY2UoL1xccy8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IChtYXRjaFsxXS5zdWJzdHIobWF0Y2hbMV0ubGVuZ3RoIC0gMikgKyAnLScgKyBtYXRjaFsyXSkucmVwbGFjZSgvbShcXGQpLS9pLCAnTUktJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAobWF0Y2hbMV0uc3Vic3RyKG1hdGNoWzFdLmxlbmd0aCAtIDIpKS5yZXBsYWNlKC9tKFxcZCkvaSwgJ01JLSQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g6Kej5Yaz56e75Yqo6IGU6YCa562J5LiN5ZCM5Y+R6KGM54mI5a+86Ie055qE5py65Z6L5LiN5ZCM6Zeu6aKYXG4gICAgICAgICAgICAgICAgLy8g54m55b6B77yabWktM2Ms5L6L5aaCbWktNExURSBtaS00IOWFtuWunuW6lOivpeaYryBtaS00XG4gICAgICAgICAgICAgICAgaWYgKC8obWl8aG0pKC1cXGQpL2kudGVzdCh1YURhdGEuZGV2aWNlLm1vZGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnnIvnnIvmmK/kuI3mmK8gTUktM1MgIE1JLTRTLi4uLlxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8obWl8aG0pKC1cXGRzKS9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8g6Ziy5q2iIE1JLTIwMTUwWFjnrYnmu6Xnq73lhYXmlbDmiJDkuLpNSS0yXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKG1pfGhtKSgtXFxkezJ9KS9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIOWwhm1pLTNjIG1pLTNhIG1pLTN3562J5ZCI5Li6bWktM1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhtaXxobSkoLVxcZClbQS1aXS9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5Y676ZmkIG1pLTRn6L+Z5qC355qE5Lic6KW/XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKG1pfGhtKSgtXFxkZykvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgvYnVpbGRcXC9ITVxcZHswLDd9XFwpL2kudGVzdCh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1hpYW9taSc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gJ0hNJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC9yZWRtaVxccz8oXFxkKyk/L2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdYaWFvbWknO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdITS0nICsgbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3hpYW9taScgJiYgdWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgLy8g6ZKI5a+56YCa6L+HYmFzZeW6k+WIpOaWreWHuuaVsOaNruaXtuWRveWQjemjjuagvOS4jeWQjOOAgueJueauiuWkhOeQhumAgumFjeWmguS4i1xuICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvbWktb25lL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdNSS0xJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1pIDJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvbWktdHdvL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdNSS0yJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIDIwMTUweHh4MjAxNDUwMVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC9cXGR7Nn0vaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goL3JlZG1pL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IHVhRGF0YS5kZXZpY2UubW9kZWwudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9yZWRtaS9pLCAnSE0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG0xIG0yIG0zIOWGmeazleS4jeagh+WHhiDlj6blpJbliKTmlq3mmK/lkKbmmK8gbTEtc1xuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8obVxcZClbXFxzLV9dKHM/KS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXS5yZXBsYWNlKC9tLywgJ01JLScpICsgbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtaS0ydyAgbWktM3cg562J5qC85byP5YyW5Li6bWktMiAgbWktM1xuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG18bWkpW1xccy1fXShcXGQ/KVthLXJ0LXpdL2kpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRtcE1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKG1pfGhtKVtcXHMtX10obm90ZXxwYWQpKFxcZD9zPykvaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IHRtcE1hdGNoWzFdICsgJy0nICsgdG1wTWF0Y2hbMl0gKyB0bXBNYXRjaFszXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXSA/IG1hdGNoWzFdICsgJy0nICsgbWF0Y2hbMl0gOiBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDlpITnkIZobVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC9obS9pKSkge1xuICAgICAgICAgICAgICAgIC8vIOWIpOaWreaYr+S4jeaYryBobS0yMDF4eHjlhYXmlbBcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG0pW1xccy1fXShcXGR7Mn0pL2kpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnSE0nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDliKTmlq3mmK/kuI3mmK8gaG0tMnMgaG0tMXNcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhobSlbXFxzLV9dKFxcZHMpL2kpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnSE0tJyArIG1hdGNoWzJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhobSlbXFxzLV9dKFxcZClbYS16XS9pKSkge1xuICAgICAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gJ0hNLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnSE0nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDov4fmu6TnsbvkvLwgMmcgM2fnrYnmlbDmja5cbiAgICAgICAgICAgICAgICBpZiAoL2htLVxcZGcvLnRlc3QodWFEYXRhLmRldmljZS5tb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICdITSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBWaXZvXG4gICAgICAgIC8vIOWFvOWuuWJ1aWxk57uT5bC+5oiW55u05o6lKee7k+WwvlxuICAgICAgICAvLyB2aXZv5py65Z6L54m55b6BOiBWaXZvW1xccy1fXShcXHcqKSAg5oiW6ICF5LulIEUxICBTMTF0ICBTN3Qg562J5byA5aS0XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyh2aXZvW1xccy1fXShcXHcqKXxcXHMoRTFcXHc/fEUzXFx3P3xFNVxcdz98VjFcXHc/fFYyXFx3P3xTMTFcXHc/fFMxMlxcdz98UzFcXHc/fFMzXFx3P3xTNlxcdz98UzdcXHc/fFM5XFx3P3xYMVxcdz98WDNcXHc/fFg1MjBcXHc/fFg1XFx3P3xYNU1heHxYNU1heCt8WDVQcm98WDVTTHxYNzEwRnxYNzEwTHxYcGxheXxYc2hvdHxYcGFseTNTfFkxMVxcdz98WTExaVxcdz98WTExaVxcdz98WTEzXFx3P3xZMTVcXHc/fFkxN1xcdz98WTE4XFx3P3xZMTlcXHc/fFkxXFx3P3xZMjBcXHc/fFkyMlxcdz98WTIyaVxcdz98WTIzXFx3P3xZMjdcXHc/fFkyOFxcdz98WTI5XFx3P3xZMzNcXHc/fFkzN1xcdz98WTNcXHc/fFk2MTNcXHc/fFk2MjJcXHc/fFk2MjdcXHc/fFk5MTNcXHc/fFk5MjNcXHc/fFk5MjdcXHc/fFk5MjhcXHc/fFk5MjlcXHc/fFk5MzdcXHc/KVtcXHNcXCldKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVml2byc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAvLyDpppblhYjliZTpmaQgdml2LSAgdml2by0gIGJiZy0g562J5omT5aS055qE5YaF5a65XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gdWFEYXRhLmRldmljZS5tb2RlbC5yZXBsYWNlKC8odml2W1xccy1fXXx2aXZvW1xccy1fXXxiYmdbXFxzLV9dKS9pLCAnJyk7XG4gICAgICAgICAgICAvLyDop6PlhrPnp7vliqjogZTpgJrnrYnkuI3lkIzlj5HooYzniYjlr7zoh7TnmoTmnLrlnovkuI3lkIzpl67pophcbiAgICAgICAgICAgIC8vIOeJueW+ge+8mltBLVpdWzAtOV0rW0EtWl0g5L6L5aaCICBYNUYgWDVMIFg1TSBYNWlMIOmDveW6lOivpeaYryBYNVxuICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFthLXpdK1swLTldKylpP1thLXpdP1tcXHMtX10/L2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBPcHBvXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhPcHBvW1xccy1fXShcXHcqKXxcXHMoMTEwMHwxMTA1fDExMDd8MzAwMHwzMDA1fDMwMDd8NjYwN3xBMTAwfEExMDN8QTEwNXxBMTA1S3xBMTA5fEExMDlLfEExMXxBMTEzfEExMTV8QTExNUt8QTEyMXxBMTI1fEExMjd8QTEyOXxBMjAxfEEyMDN8QTIwOXxBMzF8QTMxY3xBMzF0fEEzMXV8QTUxa2N8QTUyMHxBNjEzfEE2MTV8QTYxN3xFMjFXfEZpbmR8TWlycm9yfE41MTEwfE41MTE3fE41MjA3fE41MjA5fFIyMDEwfFIyMDE3fFI2MDA3fFI3MDA1fFI3MDA3fFI3Y3xSN3R8UjgwMDB8UjgwMDd8UjgwMXxSODA1fFI4MDd8UjgwOVR8UjgxMDd8UjgxMDl8UjgxMXxSODExV3xSODEzVHxSODE1VHxSODE1V3xSODE3fFI4MTlUfFI4MjAwfFI4MjA1fFI4MjA3fFI4MjFUfFI4MjNUfFI4MjdUfFI4MzB8UjgzMFN8UjgzMVN8UjgzMVR8UjgzM1R8Ujg1MHxSZWFsfFQ3MDN8VTJTfFU1MjF8VTUyNXxVNTI5fFU1Mzl8VTcwMXxVNzAxVHxVNzA1VHxVNzA1V3xYOTAwMHxYOTAwN3xYOTAzfFg5MDV8WDkwNzB8WDkwNzd8WDkwOXxaMTAxfFI4MjlUKVtcXHNcXCldKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnT3Bwbyc7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIEEzMWMgQTMxcyDpg73lupTor6XmmK8gQTMxXG4gICAgICAgICAgICAvLyDlr7kgUGx1cyDlgZrnibnmrorlpITnkIZcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhbYS16XStbMC05XSspLT8ocGx1cykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFxcdyotP1thLXpdK1swLTldKykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ29wcG8nICYmIHVhRGF0YS5kZXZpY2UubW9kZWwpIHtcbiAgICAgICAgICAgIC8vIOmSiOWvuWJhc2XlupPnmoTmlbDmja7lgZrmlbDmja7moLzlvI/ljJblpITnkIZcbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIEEzMWMgQTMxcyDpg73lupTor6XmmK8gQTMxXG4gICAgICAgICAgICAvLyDlr7kgUGx1cyDlgZrnibnmrorlpITnkIZcbiAgICAgICAgICAgIGlmIChtYXRjaCA9IHVhRGF0YS5kZXZpY2UubW9kZWwubWF0Y2goLyhbYS16XStbMC05XSspLT8ocGx1cykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFxcdyotP1thLXpdK1swLTldKykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIExlbm92b1xuICAgICAgICAvLyDlhbzlrrlidWlsZOe7k+WwvuaIluebtOaOpSnnu5PlsL4g5YW85a65TGVub3ZvLXh4eC94eHjku6Xlj4pMZXZlbm8geHh4IGJ1aWxk562JXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhMZW5vdm9bXFxzLV9dKFxcdypbLV9dP1xcdyopfFxccyhBMzU4MHxBMzg2MHxBNTUwMHxBNTYwMHxBNTg2MHxBNzYwMHxBODA2fEE4MDB8QTgwOFR8QTgwOFQtSXxBOTM2fEE5Mzh0fEE3ODh0fEszMC1FfEszMC1UfEszMC1XfEs1MC1UM3N8SzUwLVQ1fEs4ME18SzkxMHxLOTEwZXxLOTIwfFM5MC1lfFM5MC10fFM5MC11fFM5NjhUfFgyLUNVfFgyLVRPfFo5MC0zfFo5MC03KVtcXHNcXCldKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTGVub3ZvJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g6Kej5Yaz56e75Yqo6IGU6YCa562J5LiN5ZCM5Y+R6KGM54mI5a+86Ie055qE5py65Z6L5LiN5ZCM6Zeu6aKYXG4gICAgICAgICAgICAvLyDnibnlvoHvvJpbQS1aXVswLTldK1tBLVpdIOS+i+WmgiAgQTM2MHQgQTM2MCDpg73lupTor6XmmK8gQTM2MFxuICAgICAgICAgICAgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKFthLXpdK1swLTldKykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIGNvb2xwYWRcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKENvb2xwYWRbXFxzLV9dKFxcdyopfFxccyg3Mjk1Q3w3Mjk4QXw3NjIwTHw4OTA4fDgwODV8ODk3MEx8OTE5MEx8WTgwRClbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0Nvb2xwYWQnO1xuICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbM107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIDgyOTctdDAxIDgyOTctYzAxIDgyOTd3IOmDveW6lOivpeaYryA4Mjk3XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oW2Etel0/WzAtOV0rKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciAmJiB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlci50b0xvd2VyQ2FzZSgpID09PSAnY29vbHBhZCcgJiYgdWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgLy8gYmFzZSDlupPpgILphY1cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIDgyOTctdDAxIDgyOTctYzAxIDgyOTd3IOmDveW6lOivpeaYryA4Mjk3XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oW2Etel0/WzAtOV0rKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgbWVpenVcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvXFxzKG14XFxkKlxcdyp8bXotKFxcdyopKVxccyhcXHcqKVxccypcXHcqXFxzKmJ1aWxkL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdNZWl6dSc7XG4gICAgICAgICAgICB2YXIgdG1wTW9kZWwgPSBtYXRjaFsyXSA/IG1hdGNoWzJdIDogbWF0Y2hbMV07XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gdG1wTW9kZWwgKyAnLScgKyBtYXRjaFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSB0bXBNb2RlbCArICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goL000NjNDfE0zNVxcZC9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTWVpenUnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBodGNcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKEh0Y1stX1xcc10oXFx3Kil8XFxzKDYwMWV8NjA2d3w2MDh0fDYwOWR8NjEwdHw2MTYwfDYxOWR8NjIwR3w2MjZkfDYyNnN8NjI2dHw2MjZ3fDcwOWR8ODAxZXw4MDJkfDgwMnR8ODAyd3w4MDlEfDgxNmR8ODE2ZXw4MTZ0fDgxNnZ8ODE2d3w4MjZkfDgyNnN8ODI2dHw4MjZ3fDgyOHd8OTAxZXw5MTlkfEEzMTBlfEE1MEFNTHxBNTEwZXxBNjIwZHxBNjIwZXxBNjIwdHxBODEwZXxBOTE5MXxBZXJvfEM2MjBkfEM2MjBlfEM2MjB0fEQzMTZkfEQ1MTZkfEQ1MTZ0fEQ1MTZ3fEQ4MjBtdHxEODIwbXV8RDgyMHR8RDgyMHRzfEQ4MjB1fEQ4MjB1c3xFOXB0fEU5cHd8RTlzd3xFOXR8SEQ3U3xNOEV0fE04U2R8TThTdHxNOFN3fE04ZHxNOGV8TThzfE04c2l8TTh0fE04d3xNOVd8TTlld3xQaGFibGV0fFM1MTBifFM1MTBlfFM2MTBkfFM3MTBkfFM3MTBlfFM3MjBlfFM3MjB0fFQzMjd0fFQzMjhkfFQzMjh0fFQzMjh3fFQzMjlkfFQzMjl0fFQzMjl3fFQ1MjhkfFQ1Mjh0fFQ1Mjh3fFQ4Njk4fFdGNXd8WDMxNWV8WDcxMGV8WDcxNWV8WDcyMGR8WDkyMGV8WjU2MGV8WjcxMGV8WjcxMHR8WjcxNWUpW1xcc1xcKV0pLykpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0h0Yyc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIEdpb25lZVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oR2lvbmVlW1xccy1fXShcXHcqKXxcXHMoR05cXGQrXFx3KilbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0dpb25lZSc7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgTEdcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKExHWy1fXShcXHcqKXxcXHMoRDcyOHxENzI5fEQ4MDJ8RDg1NXxEODU2fEQ4NTd8RDg1OHxEODU5fEU5ODVUfEYxMDBMfEY0NjB8SDc3OHxIODE4fEg4MTl8UDg5NXxWVzgyMClbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0xnJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSB0Y2xcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKFRjbFtcXHMtX10oXFx3Kil8XFxzKEg5MTZUfFA1ODhMfFA2MThMfFA2MjBNfFA3MjhNKVtcXHNcXCldKS8pKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdUY2wnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFpURVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oVjkxODB8TjkxOCkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1p0ZSc7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3p0ZScgJiYgdWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgLy8gYmFzZSDlupPpgILphY1cbiAgICAgICAgICAgIC8vIOino+WGs+enu+WKqOiBlOmAmuetieS4jeWQjOWPkeihjOeJiOWvvOiHtOeahOacuuWei+S4jeWQjOmXrumimFxuICAgICAgICAgICAgLy8g54m55b6B77yaW0EtWl1bMC05XStbQS1aXSDkvovlpoIgIFE1MDVUIFE1MDV1IOmDveW6lOivpeaYryBRNTA1XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oW2Etel0/WzAtOV0rKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBVSU1JXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWEubWF0Y2goLyhVSU1JXFx3Knx1bWlcXHcqKVtcXHMtX10oXFx3KilcXHMqXFx3KlxccypidWlsZC9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVWltaSc7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXSArICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGV0b25cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvZXRvbltcXHMtX10oXFx3KikvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0V0b24nO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNtYXJ0aXNhblxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oU003MDV8U003MDF8WVE2MDF8WVE2MDMpL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTbWFydGlzYW4nO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9ICh7XG4gICAgICAgICAgICAgICAgU003MDU6ICdUMScsXG4gICAgICAgICAgICAgICAgU003MDE6ICdUMScsXG4gICAgICAgICAgICAgICAgWVE2MDE6ICdVMScsXG4gICAgICAgICAgICAgICAgWVE2MDM6ICdVMSdcbiAgICAgICAgICAgIH0pW21hdGNoWzFdXSB8fCBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBoYW5kbGUgQXN1c1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oQXN1c1tcXHMtX10oXFx3Kil8XFxzKEE1MDBDR3xBNTAwS0x8QTUwMUNHfEE2MDBDR3xQRjQwMENHfFBGNTAwS0x8VDAwMXxYMDAyfFgwMDN8WkM1MDBUR3xaRTU1ME1MfFpFNTUxTUwpW1xcc1xcKV0pL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBc3VzJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBudWJpYVxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oTnViaWFbLV9cXHNdKFxcdyopfChOWDUwMXxOWDUwNUp8Tlg1MDZKfE5YNTA3SnxOWDUwM0F8bnhcXGQrXFx3KilbXFxzXFwpXSkvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ051YmlhJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhhbmRsZSBoYWllclxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC8oSFQtXFx3Kil8SGFpZXJbXFxzLV9dKFxcdyotP1xcdyopL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdIYWllcic7XG4gICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aWFueXVcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvSy1Ub3VjaFtcXHMtX10odG91XFxzP2NoXFxzPyhcXGQpfFxcdyopL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdLLVRvdWNoJztcbiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSAnS3RvdWNoJyArIG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRE9PVlxuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IHVhLm1hdGNoKC9Eb292W1xccy1fXShcXHcqKS9pKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnRG9vdic7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29vYmVlXG4gICAgICAgIGVsc2UgaWYgKC9rb29iZWUvaS50ZXN0KHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPSAna29vYmVlJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNvbnlcbiAgICAgICAgZWxzZSBpZiAoL0M2OS9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTb255JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhb2ppeGluZ1xuICAgICAgICBlbHNlIGlmICgvTjc4N3xOODE4Uy9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdIYW9qaXhpbmcnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFpc2Vuc2VcbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YS5tYXRjaCgvKGhzLXxIaXNlbnNlW1xccy1fXSkoXFx3KikvaSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0hpc2Vuc2UnO1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzJdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBzdHlsZSBvZiBtYW51ZmFjdHVyZXJcbiAgICAgICAgaWYgKHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyKSB7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9IHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBzdHlsZSBvZiBtb2RlbFxuICAgICAgICBpZiAodWFEYXRhLmRldmljZS5tb2RlbCkge1xuICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IHVhRGF0YS5kZXZpY2UubW9kZWwudG9VcHBlckNhc2UoKS5yZXBsYWNlKC8tK3xfK3xcXHMrL2csICcgJyk7XG4gICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvXFxzKihcXHcqXFxzKlxcdyopLylbMV0ucmVwbGFjZSgvXFxzKy8sICctJyk7XG5cbiAgICAgICAgICAgIC8vIOmSiOWvueS4ieaYn+OAgeWNjuS4uuWBmuWOu+mHjeeahOeJueauiuWkhOeQhlxuICAgICAgICAgICAgaWYgKHVhRGF0YS5kZXZpY2UubWFudWZhY3R1cmVyID09PSAnU2Ftc3VuZycpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gKHtcbiAgICAgICAgICAgICAgICAgICAgJ1NDSC1JOTUnOiAnR1QtSTk1MCcsXG4gICAgICAgICAgICAgICAgICAgICdTQ0gtSTkzJzogJ0dULUk5MzAnLFxuICAgICAgICAgICAgICAgICAgICAnU0NILUk4Nic6ICdHVC1JODU1JyxcbiAgICAgICAgICAgICAgICAgICAgJ1NDSC1ONzEnOiAnR1QtTjcxMCcsXG4gICAgICAgICAgICAgICAgICAgICdTQ0gtSTczJzogJ0dULVM3ODknLFxuICAgICAgICAgICAgICAgICAgICAnU0NILVA3MCc6ICdHVC1JOTE1J1xuICAgICAgICAgICAgICAgIH0pW3VhRGF0YS5kZXZpY2UubW9kZWxdIHx8IHVhRGF0YS5kZXZpY2UubW9kZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1YURhdGEuZGV2aWNlLm1hbnVmYWN0dXJlciA9PT0gJ0h1YXdlaScpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gKHtcbiAgICAgICAgICAgICAgICAgICAgQ0hFMTogJ0NIRScsXG4gICAgICAgICAgICAgICAgICAgIENIRTI6ICdDSEUnLFxuICAgICAgICAgICAgICAgICAgICBHNjIwUzogJ0c2MjEnLFxuICAgICAgICAgICAgICAgICAgICBDODgxN0Q6ICdHNjIxJ1xuICAgICAgICAgICAgICAgIH0pW3VhRGF0YS5kZXZpY2UubW9kZWxdIHx8IHVhRGF0YS5kZXZpY2UubW9kZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDpkojlr7l4aWFvbWkg55qE6YOo5YiG5pWw5o2u5rKh5pyJ5qC85byP5YyW5oiQ5Yqf77yM5qC85byP5YyWMeasoVxuICAgICAgICBpZiAodWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdWFEYXRhLmRldmljZS5tYW51ZmFjdHVyZXIgPT09ICdYaWFvbWknKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG18bWkpLShub3RlKS9pKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXSArICctJyArIG1hdGNoWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSB1YURhdGEuZGV2aWNlLm1vZGVsLm1hdGNoKC8oaG18bWkpLShcXGRzPykvaSkpIHtcbiAgICAgICAgICAgICAgICB1YURhdGEuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV0gKyAnLScgKyBtYXRjaFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoID0gdWFEYXRhLmRldmljZS5tb2RlbC5tYXRjaCgvKGhtfG1pKS0oXFxkKVthLXJ0LXpdL2kpKSB7XG4gICAgICAgICAgICAgICAgdWFEYXRhLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdICsgJy0nICsgbWF0Y2hbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaGFuZGxlIGJyb3dzZXJcbiAgICAvLyBpZiAoIXVhRGF0YS5icm93c2VyLm5hbWUpIHtcbiAgICAvLyB1YSA9IHVhLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHVhRGF0YS5kZXZpY2UudHlwZSA9PT0gJ2Rlc2t0b3AnKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIDM2MCBzZWN1cml0eSBFeHBsb3JlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG1hdGNoID0gLzM2MHNlKD86WyBcXC9dKFtcXHcuXSspKT8vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICczNjAgc2VjdXJpdHkgRXhwbG9yZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRoZSB3b3JsZFxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvdGhlIHdvcmxkKD86WyBcXC9dKFtcXHcuXSspKT8vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICd0aGUgd29ybGQnO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRlbmNlbnR0cmF2ZWxlclxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvdGVuY2VudHRyYXZlbGVyIChbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ3RlbmNlbnR0cmF2ZWxlcic7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogTEJCUk9XU0VSXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IC9MQkJST1dTRVIvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdMQkJST1dTRVInO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHVhRGF0YS5kZXZpY2UudHlwZSA9PT0gJ21vYmlsZScgfHwgdWFEYXRhLmRldmljZS50eXBlID09PSAndGFibGV0Jykge1xuICAgICAgICAvKipcbiAgICAgICAgICogQmFpZHVIRFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG1hdGNoID0gL0JhaWR1SERcXHMrKFtcXHcuXSspL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnQmFpZHVIRCc7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogMzYwIEJyb3dzZXJcbiAgICAgICAgICovXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gLzM2MC5zKmFwaG9uZVxccypicm93c2VyXFxzKlxcKHZlcnNpb25cXHMqKFtcXHcuXSspXFwpL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnMzYwIEJyb3dzZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJhaWR1IEJyb3dzZXJcbiAgICAgICAgICovXG4gICAgICAgIGVsc2UgaWYgKG1hdGNoID0gL2ZseWZsb3dcXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdCYWlkdSBCcm93c2VyJztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJhaWR1IEhEXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IC9iYWlkdWhkIChbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ0JhaWR1IEhEJztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGJhaWR1YnJvd3NlclxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvYmFpZHVicm93c2VyXFwvKFtcXGRcXC5dKylcXHMvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdiYWlkdWJyb3dzZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogTGllQmFvRmFzdFxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvTGllQmFvRmFzdFxcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ0xpZUJhbyBGYXN0JztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpZUJhb1xuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvTGllQmFvXFwvKFtcXHcuXSspL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnTGllQmFvJztcbiAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNPVUdPVVxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAobWF0Y2ggPSAvU29nb3VcXHcrXFwvKFswLTlcXC5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdTb2dvdU1vYmlsZUJyb3dzZXInO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICog55m+5bqm5Zu96ZmFXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmIChtYXRjaCA9IC9iZGJyb3dzZXJcXHcrXFwvKFswLTlcXC5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICfnmb7luqblm73pmYUnO1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQW5kcm9pZCBDaHJvbWUgQnJvd3NlclxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAodWFEYXRhLm9zLm5hbWUgPT09ICdBbmRyb2lkJyAmJiAvc2FmYXJpL2kudGVzdCh1YSkgJiYgKG1hdGNoID0gL2Nocm9tZVxcLyhbMC05XFwuXSspL2kuZXhlYyh1YSkpKSB7XG4gICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSB1YS5tYXRjaCgvXFxzKyhcXHcrQnJvd3NlcilcXC8/KFtcXGRcXC5dKikvKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSB0bXBNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtvcmlnaW5hbDogdG1wTWF0Y2hbMl19O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7b3JpZ2luYWw6IG1hdGNoWzFdfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnQW5kcm9pZCBDaHJvbWUnO1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7b3JpZ2luYWw6IG1hdGNoWzFdfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbmRyb2lkIEdvb2dsZSBCcm93c2VyXG4gICAgICAgICAqL1xuICAgICAgICBlbHNlIGlmICh1YURhdGEub3MubmFtZSA9PT0gJ0FuZHJvaWQnICYmIC9zYWZhcmkvaS50ZXN0KHVhKSAmJiAobWF0Y2ggPSAvdmVyc2lvblxcLyhbMC05XFwuXSspL2kuZXhlYyh1YSkpKSB7XG4gICAgICAgICAgICBpZiAodG1wTWF0Y2ggPSB1YS5tYXRjaCgvXFxzKyhcXHcrQnJvd3NlcilcXC8/KFtcXGRcXC5dKikvKSkge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSB0bXBNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtvcmlnaW5hbDogdG1wTWF0Y2hbMl19O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7b3JpZ2luYWw6IG1hdGNoWzFdfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnQW5kcm9pZCBCcm93c2VyJztcbiAgICAgICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge29yaWdpbmFsOiBtYXRjaFsxXX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogJ01vemlsbGEvNS4wIChpUGFkOyBDUFUgT1MgNV8xXzEgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNTM0LjQ2IChLSFRNTCwgbGlrZSBHZWNrbykgTW9iaWxlLzlCMjA2JyBiZWxvbmdzIHRvIFNhZmFyaVxuICAgICAgICAgKi9cbiAgICAgICAgZWxzZSBpZiAoLyhpcGFkfGlwaG9uZSkuKiBhcHBsZXdlYmtpdFxcLy4qIG1vYmlsZS9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ1NhZmFyaSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoID0gdWEubWF0Y2goL2JhaWR1Ym94YXBwXFwvPyhbXFxkXFwuXSopL2kpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAn55m+5bqm5qGGJztcbiAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ2JhaWR1IGJveCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKC9CYWlkdUxpZ2h0QXBwUnVudGltZS9pLnRlc3QodWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAn6L275bqU55SocnVudGltZSc7XG4gICAgICAgIC8vIHVhRGF0YS5icm93c2VyLm5hbWUgPSAncWluZyBydW50aW1lJztcbiAgICB9XG4gICAgZWxzZSBpZiAoL1dlaWJvL2kudGVzdCh1YSkpIHtcbiAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICflvq7ljZonO1xuICAgICAgICAvLyB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ3dlaWJvJztcbiAgICB9XG4gICAgZWxzZSBpZiAoL01RUS9pLnRlc3QodWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAn5omL5py6UVEnO1xuICAgICAgICAvLyB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ21vYmlsZSBxcSc7XG4gICAgfVxuICAgIGVsc2UgaWYgKC9oYW8xMjMvaS50ZXN0KHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ2hhbzEyMyc7XG4gICAgfVxuICAgIC8vIH1cbiAgICBpZiAobWF0Y2ggPSAvTWljcm9NZXNzZW5nZXJcXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ+W+ruS/oSc7XG4gICAgICAgIHZhciB0bXBWZXJzaW9uID0gKG1hdGNoWzFdKS5yZXBsYWNlKC9fL2csICcuJyk7XG4gICAgICAgIHRtcE1hdGNoID0gLyhcXGQrXFwuXFxkK1xcLlxcZCtcXC5cXGQrKS8uZXhlYyh0bXBWZXJzaW9uKTtcbiAgICAgICAgaWYodG1wTWF0Y2gpIHtcbiAgICAgICAgICAgIHRtcFZlcnNpb24gPSB0bXBNYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgb3JpZ2luYWw6IHRtcFZlcnNpb25cbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG1hdGNoID0gL1VDQnJvd3NlclxcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnVUMgQnJvd3Nlcic7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG1hdGNoID0gL09QUlxcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnT3BlcmEnO1xuICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChtYXRjaCA9IC9PUGlPU1xcLyhbXFx3Ll0rKS9pLmV4ZWModWEpKSB7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLm5hbWUgPSAnT3BlcmEnO1xuICAgICAgICB1YURhdGEuYnJvd3Nlci52ZXJzaW9uID0ge1xuICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIElFIDExXG4gICAgZWxzZSBpZiAoL1RyaWRlbnRcXC83L2kudGVzdCh1YSkgJiYgL3J2OjExL2kudGVzdCh1YSkpIHtcbiAgICAgICAgdWFEYXRhLmJyb3dzZXIubmFtZSA9ICdJbnRlcm5ldCBFeHBsb3Jlcic7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICBtYWpvcjogJzExJyxcbiAgICAgICAgICAgIG9yaWdpbmFsOiAnMTEnXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIE1pY3Jvc29mdCBFZGdlXG4gICAgZWxzZSBpZiAoL0VkZ2VcXC8xMi9pLnRlc3QodWEpICYmIC9XaW5kb3dzIFBob25lfFdpbmRvd3MgTlQvaS50ZXN0KHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ01pY3Jvc29mdCBFZGdlJztcbiAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9IHtcbiAgICAgICAgICAgIG1ham9yOiAnMTInLFxuICAgICAgICAgICAgb3JpZ2luYWw6ICcxMidcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gbWl1aSBicm93c2VyXG4gICAgZWxzZSBpZiAobWF0Y2ggPSAvbWl1aWJyb3dzZXJcXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ21pdWkgYnJvd3Nlcic7XG4gICAgICAgIHVhRGF0YS5icm93c2VyLnZlcnNpb24gPSB7XG4gICAgICAgICAgICBvcmlnaW5hbDogbWF0Y2hbMV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gU2FmYXJpXG4gICAgaWYgKCF1YURhdGEuYnJvd3Nlci5uYW1lKSB7XG4gICAgICAgIGlmIChtYXRjaCA9IC9TYWZhcmlcXC8oW1xcdy5dKykvaS5leGVjKHVhKSAmJiAvVmVyc2lvbi9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEuYnJvd3Nlci5uYW1lID0gJ1NhZmFyaSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVhRGF0YS5icm93c2VyLm5hbWUgJiYgIXVhRGF0YS5icm93c2VyLnZlcnNpb24pIHtcbiAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oW1xcdy5dKykvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgdWFEYXRhLmJyb3dzZXIudmVyc2lvbiA9ICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgKHVhRGF0YS5vcy5uYW1lID09PSAnV2luZG93cycgJiYgdWFEYXRhLm9zLnZlcnNpb24pIHtcbiAgICAvLyAgLy8gV2luZG93cyA4LjFcbiAgICAvLyAgaWYgKHVhRGF0YS5vcy52ZXJzaW9uLmFsaWFzID09PSAnTlQgNi4zJykge1xuICAgIC8vICAgICAgdWFEYXRhLm9zLnZlcnNpb24uYWxpYXMgPSAnOC4xJztcbiAgICAvLyAgfVxuICAgIC8vIH1cbiAgICAvLyBoYW5kbGUgb3NcbiAgICBpZiAodWFEYXRhLm9zLm5hbWUgPT09ICdXaW5kb3dzJyB8fCAvV2luZG93cy9pLnRlc3QodWEpKSB7XG4gICAgICAgIHVhRGF0YS5vcy5uYW1lID0gJ1dpbmRvd3MnO1xuICAgICAgICBpZiAoL05UIDYuMy9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogJzguMScsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6ICc4LjEnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKC9OVCA2LjQvaS50ZXN0KHVhKSB8fCAvTlQgMTAuMC9pLnRlc3QodWEpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogJzEwJyxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogJzEwJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh1YURhdGEub3MubmFtZSA9PT0gJ01hYyBPUyBYJykge1xuICAgICAgICB1YURhdGEub3MubmFtZSA9ICdNYWMgT1MgWCc7XG4gICAgICAgIGlmIChtYXRjaCA9IC9NYWMgT1MgWFtcXHNcXF9cXC1cXC9dKFxcZCtbXFwuXFwtXFxfXVxcZCtbXFwuXFwtXFxfXT9cXGQqKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogbWF0Y2hbMV0ucmVwbGFjZSgvXy9nLCAnLicpLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBtYXRjaFsxXS5yZXBsYWNlKC9fL2csICcuJylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogJycsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKC9BbmRyb2lkL2kudGVzdCh1YURhdGEub3MubmFtZSkpIHtcbiAgICAgICAgaWYgKG1hdGNoID0gdWEubWF0Y2goL0FuZHJvaWRbXFxzXFxfXFwtXFwvaTY4Nl0/W1xcc1xcX1xcLVxcL10oXFxkK1tcXC5cXC1cXF9dXFxkK1tcXC5cXC1cXF9dP1xcZCopL2kpKSB7XG4gICAgICAgICAgICB1YURhdGEub3MudmVyc2lvbiA9IHtcbiAgICAgICAgICAgICAgICBhbGlhczogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IG1hdGNoWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1YURhdGE7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_ua-device@0.1.10@ua-device/lib/ua-device.js\n");
/***/ }),
/***/ "./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js":
/*!************************************************************************!*\
!*** ./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js ***!
\************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = (function () {\n var STRINGS_SAMSUNG = 'Samsung',\n STRINGS_SHARP = 'Sharp',\n STRINGS_SONY_ERICSSON = 'Sony Ericsson',\n STRINGS_MOTOROLA = 'Motorola',\n STRINGS_LG = 'LG',\n STRINGS_HUAWEI = 'Huawei',\n STRINGS_HTC = 'HTC',\n STRINGS_COOLPAD = 'Coolpad',\n STRINGS_ASUS = 'Asus',\n STRINGS_ACER = 'Acer';\n var STRINGS_BASED = ' based device';\n\n var TOUCHWIZ_MODELS = {\n 'SAMSUNG': {\n 'GT-S3370C': [STRINGS_SAMSUNG, 'Corby 3G'],\n 'GT-S3650': [STRINGS_SAMSUNG, 'Corby'],\n 'GT-S3653': [STRINGS_SAMSUNG, 'Corby'],\n 'GT-S3850': [STRINGS_SAMSUNG, 'Corby II'],\n 'GT-S5230': [STRINGS_SAMSUNG, 'Star'],\n 'GT-S5230W': [STRINGS_SAMSUNG, 'Star'],\n 'GT-S5233': [STRINGS_SAMSUNG, 'Star'],\n 'GT-S5260': [STRINGS_SAMSUNG, 'Star II'],\n 'GT-S5560': [STRINGS_SAMSUNG, 'Marvel'],\n 'GT-S5620': [STRINGS_SAMSUNG, 'Monte'],\n 'GT-S7550': [STRINGS_SAMSUNG, 'Blue Earth'],\n 'GT-S8000': [STRINGS_SAMSUNG, 'Jet'],\n 'GT-S8003': [STRINGS_SAMSUNG, 'Jet'],\n 'SGH-F480': [STRINGS_SAMSUNG, 'Tocco'],\n 'SGH-T528g': [STRINGS_SAMSUNG, 'Straight Talk'],\n 'GT-B3410': [STRINGS_SAMSUNG, 'Star Qwerty'],\n 'GT-B5310': [STRINGS_SAMSUNG, 'Corby Pro'],\n 'GT-B7722': [STRINGS_SAMSUNG, 'Star Duos'],\n 'GT-C6712': [STRINGS_SAMSUNG, 'Star II Duos']\n }\n }\n\n var BADA_MODELS = {\n 'SAMSUNG': {\n 'GT- S5250': [STRINGS_SAMSUNG, 'Wave 525'],\n 'GT-S5250': [STRINGS_SAMSUNG, 'Wave 525'],\n 'GT-S5253': [STRINGS_SAMSUNG, 'Wave 525'],\n 'GT-S5330': [STRINGS_SAMSUNG, 'Wave 533'],\n 'GT-S5380': [STRINGS_SAMSUNG, 'Wave Y'],\n 'GT-S5380D': [STRINGS_SAMSUNG, 'Wave Y'],\n 'GT-S5380K': [STRINGS_SAMSUNG, 'Wave Y'],\n 'GT-S5750E': [STRINGS_SAMSUNG, 'Wave 575'],\n 'GT-S5753E': [STRINGS_SAMSUNG, 'Wave 575'],\n 'GT-S7230B': [STRINGS_SAMSUNG, 'Wave 723'],\n 'GT-S7230E': [STRINGS_SAMSUNG, 'Wave 723'],\n 'GT-S7233E': [STRINGS_SAMSUNG, 'Wave 723'],\n 'GT-S7250': [STRINGS_SAMSUNG, 'Wave M'],\n 'GT-S7250D': [STRINGS_SAMSUNG, 'Wave M'],\n 'GT-S8500': [STRINGS_SAMSUNG, 'Wave'],\n 'GT-S8500C': [STRINGS_SAMSUNG, 'Wave'],\n 'GT-S8500R': [STRINGS_SAMSUNG, 'Wave'],\n 'GT-S8500T': [STRINGS_SAMSUNG, 'Wave'],\n 'GT-S8530': [STRINGS_SAMSUNG, 'Wave II'],\n 'GT-S8600': [STRINGS_SAMSUNG, 'Wave 3'],\n 'SHW-M410': [STRINGS_SAMSUNG, 'Wave 3']\n }\n }\n\n var TIZEN_MODELS = {\n 'SAMSUNG': {\n 'GT-I9500': [STRINGS_SAMSUNG, 'GT-I9500']\n }\n }\n\n var BREW_MODELS = {\n 'Coolpad D508': [STRINGS_COOLPAD, 'D508'],\n 'Coolpad E600': [STRINGS_COOLPAD, 'E600'],\n 'SCH-F839': [STRINGS_SAMSUNG, 'SCH-F839']\n }\n\n var WINDOWS_MOBILE_MODELS = {\n 'DX900': [STRINGS_ACER, 'Tempo DX900'],\n 'F900': [STRINGS_ACER, 'Tempo F900'],\n 'Coolpad F800': [STRINGS_COOLPAD, 'F800'],\n 'garmin-asus-Nuvifone-M10': ['Garmin-Asus', 'Nuvifone M10'],\n 'HP iPAQ 510': ['HP', 'iPAQ 510'],\n 'HD mini T5555': [STRINGS_HTC, 'HD mini'],\n 'HTC HD mini': [STRINGS_HTC, 'HD mini'],\n 'HTC HD mini T5555': [STRINGS_HTC, 'HD mini'],\n 'HTC HD2': [STRINGS_HTC, 'HD2'],\n 'HTC HD2 T8585': [STRINGS_HTC, 'HD2'],\n 'HD2 T8585': [STRINGS_HTC, 'HD2'],\n 'T-Mobile LEO': [STRINGS_HTC, 'HD2'],\n 'dopodT5588': [STRINGS_HTC, 'Hengshan'],\n 'HTC Mega-T3333': [STRINGS_HTC, 'Mega'],\n 'HTC Snap S521': [STRINGS_HTC, 'Snap'],\n 'HTC Touch2 T3320': [STRINGS_HTC, 'Touch 2'],\n 'HTC Touch2 T3333': [STRINGS_HTC, 'Touch 2'],\n 'HTC Touch2 T3335': [STRINGS_HTC, 'Touch 2'],\n 'HTC P3700': [STRINGS_HTC, 'Touch Diamond'],\n 'HTC Touch Diamond2 T5353': [STRINGS_HTC, 'Touch Diamond 2'],\n 'HTC Touch HD T8282': [STRINGS_HTC, 'Touch HD'],\n 'HTC Touch HD T8283': [STRINGS_HTC, 'Touch HD'],\n 'HTC Touch HD2 T8585': [STRINGS_HTC, 'Touch HD2'],\n 'HTC Touch Pro2 T7373': [STRINGS_HTC, 'Touch Pro 2'],\n 'T7380': [STRINGS_HTC, 'Touch Pro 2'],\n 'HTC TyTN II': [STRINGS_HTC, 'TyTN II'],\n 'GT-B7300': [STRINGS_SAMSUNG, 'Omnia Lite'],\n 'GT-B7610': [STRINGS_SAMSUNG, 'Omnia Pro'],\n 'GT-i8000': [STRINGS_SAMSUNG, 'Omnia 2'],\n 'GT-I8000': [STRINGS_SAMSUNG, 'Omnia 2'],\n 'GT-I8000U': [STRINGS_SAMSUNG, 'Omnia 2'],\n 'M1i': [STRINGS_SONY_ERICSSON, 'M1i Aspen']\n }\n\n var WINDOWS_PHONE_MODELS = {\n 'Acer': {\n 'Allegro': [STRINGS_ACER, 'Allegro'],\n 'M310': [STRINGS_ACER, 'Allegro']\n },\n\n 'Asus': {\n 'Galaxy6': [STRINGS_ASUS, 'Galaxy 6']\n },\n\n 'DELL': {\n 'Venue Pro': ['Dell', 'Venue Pro']\n },\n\n 'FujitsuToshibaMobileCommun': {\n 'IS12T': ['Fujitsu Toshiba', 'IS12T']\n },\n\n 'HTC': {\n '7 Mozart': [STRINGS_HTC, '7 Mozart'],\n '7 Mozart T8698': [STRINGS_HTC, '7 Mozart'],\n 'T8697': [STRINGS_HTC, '7 Mozart'],\n 'T8698': [STRINGS_HTC, '7 Mozart'],\n 'PD67100': [STRINGS_HTC, '7 Mozart'],\n 'Mozart T8698': [STRINGS_HTC, '7 Mozart'],\n 'Mozart': [STRINGS_HTC, '7 Mozart'],\n 'USCCHTC-PC93100': [STRINGS_HTC, 'Arrive'],\n 'Gold': [STRINGS_HTC, 'Gold '],\n 'HD2': [STRINGS_HTC, 'HD2'],\n 'HD7': [STRINGS_HTC, 'HD7'],\n 'HD7 T9292': [STRINGS_HTC, 'HD7'],\n 'T9295': [STRINGS_HTC, 'HD7'],\n 'T9296': [STRINGS_HTC, 'HD7'],\n 'HD7 Infinity': [STRINGS_HTC, 'HD7'],\n 'T7575': [STRINGS_HTC, '7 Pro'],\n '7 Pro T7576': [STRINGS_HTC, '7 Pro'],\n 'mwp6985': [STRINGS_HTC, 'Trophy'],\n '7 Trophy T8686': [STRINGS_HTC, 'Trophy'],\n '7 Trophy': [STRINGS_HTC, 'Trophy'],\n 'PC40100': [STRINGS_HTC, 'Trophy'],\n 'Touch-IT Trophy': [STRINGS_HTC, 'Trophy'],\n 'Radar': [STRINGS_HTC, 'Radar'],\n 'Radar 4G': [STRINGS_HTC, 'Radar'],\n 'Radar C110e': [STRINGS_HTC, 'Radar'],\n 'Mazaa': [STRINGS_HTC, 'Mazaa'],\n 'Mondrian': [STRINGS_HTC, 'Mondrian'],\n 'Schubert': [STRINGS_HTC, 'Schubert'],\n '7 Schubert T9292': [STRINGS_HTC, 'Schubert'],\n 'Spark': [STRINGS_HTC, 'Spark'],\n 'T8788': [STRINGS_HTC, 'Surround'],\n 'TITAN X310e': [STRINGS_HTC, 'Titan'],\n 'X310e': [STRINGS_HTC, 'Titan'],\n 'PI39100': [STRINGS_HTC, 'Titan'],\n 'PI86100': [STRINGS_HTC, 'Titan II'],\n 'Ultimate': [STRINGS_HTC, 'Ultimate']\n },\n\n 'LG': {\n 'GW910': [STRINGS_LG, 'Optimus 7'],\n 'LG E-900': [STRINGS_LG, 'Optimus 7 E900'],\n 'LG-E900': [STRINGS_LG, 'Optimus 7 E900'],\n 'LG-E900h': [STRINGS_LG, 'Optimus 7 E900'],\n 'LG-C900': [STRINGS_LG, 'Optimus 7Q'],\n 'LG-C900B': [STRINGS_LG, 'Quantum'],\n 'LG-C900k': [STRINGS_LG, 'Quantum']\n },\n\n 'nokia': {\n 'SeaRay': ['Nokia', 'Lumia 800'],\n '800C': ['Nokia', 'Lumia 800']\n },\n\n 'NOKIA': {\n '710': ['Nokia', 'Lumia 710'],\n 'Nokia 710': ['Nokia', 'Lumia 710'],\n 'Lumia 710': ['Nokia', 'Lumia 710'],\n 'Lumia 719': ['Nokia', 'Lumia 719'],\n 'Lumia 800': ['Nokia', 'Lumia 800'],\n '800': ['Nokia', 'Lumia 800'],\n 'Lumia 900': ['Nokia', 'Lumia 900'],\n 'XXX': ['Nokia', 'prototype']\n },\n\n 'SAMSUNG': {\n 'GT-I8350': [STRINGS_SAMSUNG, 'Omnia W'],\n 'GT-I8350T': [STRINGS_SAMSUNG, 'Omnia W'],\n 'SGH-i677': [STRINGS_SAMSUNG, 'Focus Flash'],\n 'SGH-i707': [STRINGS_SAMSUNG, 'Taylor'],\n 'SGH-i917': [STRINGS_SAMSUNG, 'Omnia 7'],\n 'SGH-I917': [STRINGS_SAMSUNG, 'Omnia 7'],\n 'SGH-i917.': [STRINGS_SAMSUNG, 'Focus'],\n 'SGH-i917R': [STRINGS_SAMSUNG, 'Focus'],\n 'SGH-i937': [STRINGS_SAMSUNG, 'Focus S'],\n 'OMNIA7': [STRINGS_SAMSUNG, 'Omnia 7'],\n 'OMINA7': [STRINGS_SAMSUNG, 'Omnia 7'],\n 'Taylor': [STRINGS_SAMSUNG, 'Taylor']\n },\n\n 'TOSHIBA': {\n 'TSUNAGI': ['Toshiba', 'Tsunagi']\n }\n };\n\n var ANDROID_MODELS = {\n 'Android': [null, null],\n 'google sdk': [null, null],\n 'sdk': [null, null],\n 'generic': [null, null],\n 'generic x86': [null, null],\n 'amd brazos': ['AMD', 'Fusionbased device'],\n 'Amlogic M1 reference board': ['Amlogic', 'M1 reference board'],\n 'AML8726M': ['Amlogic', 'AML8726-Mbased device'],\n 'vexpress a9': ['ARM', 'Versatile Express development platform'],\n 'bcm7231': ['Broadcom', 'BCM7231based device', 'television'],\n 'bcm7425': ['Broadcom', 'BCM7425based device', 'television'],\n 'bcm7429': ['Broadcom', 'BCM7429based device', 'television'],\n 'imx50 rdp': ['Freescale', 'i.MX50based device'],\n 'imx51 bbg': ['Freescale', 'i.MX51based device'],\n 'imx53 loco': ['Freescale', 'i.MX53based device'],\n 'imx53 mp204f3': ['Freescale', 'i.MX53based device'],\n 'imx53 smd': ['Freescale', 'i.MX53based device'],\n 'imx53 yeagle': ['Freescale', 'i.MX53based device'],\n 'imx6q': ['Freescale', 'i.MX6Qbased device'],\n 'ODROID-A': ['Hardkernel', 'ODROID-A developer tablet', 'tablet'],\n 'mfld dv10': ['Intel', 'Medfieldbased device'],\n 'mfld dv20': ['Intel', 'Medfieldbased device'],\n 'mfld lw00': ['Intel', 'Medfieldbased device'],\n 'mfld pr2': ['Intel', 'Medfieldbased device'],\n 'mfld pr3': ['Intel', 'Medfieldbased device'],\n 'berlin bg2': ['Marvell', 'Armada 1000based device', 'television'],\n 'MStar Amber3': ['MStar', 'Amber3based device'],\n 'Konka Amber3': ['MStar', 'Amber3based device'],\n 'mt5396': ['Mediatek', 'MT5396based device', 'television'],\n 'bird75v2': ['Mediatek', 'MT6575based device'],\n 'eagle75v1 2': ['Mediatek', 'MT6575based device'],\n 'MBX DVBT reference board (c03ref)': ['MXB', 'DVBT reference board', 'television'],\n 'NS2816': ['Nufront', 'NuSmart 2816based device'],\n 'Ventana': ['nVidia', 'Tegra Ventana development kit'],\n 'Cardhu': ['nVidia', 'Tegra 3based device'],\n 'Panda': ['Pandaboard', 'Development Kit'],\n 'pandaboard': ['Pandaboard', 'Development Kit'],\n 'PandaBoard': ['Pandaboard', 'Development Kit'],\n 'MSM': ['Qualcomm', 'Snapdragonbased device'],\n 'msm7227 ffa': ['Qualcomm', 'Snapdragon S1based device'],\n 'msm7627 surf': ['Qualcomm', 'Snapdragon S1based device'],\n 'msm7627a': ['Qualcomm', 'Snapdragon S1based device'],\n 'msm7627a sku1': ['Qualcomm', 'Snapdragon S1based device'],\n 'msm7627a sku3': ['Qualcomm', 'Snapdragon S1based device'],\n 'msm7630 fusion': ['Qualcomm', 'Snapdragon S2based device'],\n 'msm7630 surf': ['Qualcomm', 'Snapdragon S2based device'],\n 'msm8660 cougar': ['Qualcomm', 'Snapdragon S3based device'],\n 'msm8660 surf': ['Qualcomm', 'Snapdragon S3based device'],\n 'msm8960': ['Qualcomm', 'Snapdragon S4based device'],\n 'rk2808sdk': ['Rockchip', 'RK2808based device'],\n 'RK2818': ['Rockchip', 'RK2818based device'],\n 'rk2818sdk': ['Rockchip', 'RK2818based device'],\n 'Android-for-Rockchip-2818': ['Rockchip', 'RK2818based device'],\n 'rk29sdk': ['Rockchip', 'RK29based device'],\n 'Rk29sdk': ['Rockchip', 'RK29based device'],\n 'rk30sdk': ['Rockchip', 'RK30based device'],\n 's3c6410': ['Samsung', 'S3C6410based device'],\n 'smdk6410': ['Samsung', 'S3C6410based device'],\n 'SMDKC110': ['Samsung', 'Exynos 3110based device'],\n 'SMDKV210': ['Samsung', 'Exynos 4210based device'],\n 'S5PV210': ['Samsung', 'Exynos 4210based device'],\n 'sec smdkc210': ['Samsung', 'Exynos 4210based device'],\n 'SMDK4x12': ['Samsung', 'Exynos 4212 or 4412based device'],\n 'smp86xx': ['Sigma', 'SMP86xxbased device', 'television'],\n 'sv8860': ['Skyviia', 'SV8860based device', 'television'],\n 'ste u8500': ['ST Ericsson', 'Novathor U8500based device'],\n 'Telechips M801 Evaluation Board': ['Telechips', 'M801based device', 'television'],\n 'Telechips TCC8900 Evaluation Board': ['Telechips', 'TCC8900based device', 'television'],\n 'TCC8920 STB EV': ['Telechips', 'TCC8920based device', 'television'],\n 'OMAP': ['Texas Instruments', 'OMAPbased device'],\n 'OMAP SS': ['Texas Instruments', 'OMAPbased device'],\n 'LogicPD Zoom2': ['Texas Instruments', 'OMAPbased device'],\n 'omap3evm': ['Texas Instruments', 'OMAP3based device'],\n 'Omap5sevm': ['Texas Instruments', 'OMAP5based device'],\n 'pnx8473 kiryung': ['Trident', 'PNX8473based device', 'television'],\n 'crespo': ['Google', 'Nexus S'],\n 'Crespo': ['Google', 'Nexus S'],\n 'Crespo4G': ['Google', 'Nexus S'],\n 'Passion': ['Google', 'Nexus One'],\n 'Bravo': ['HTC', 'Desire'],\n 'dream': ['HTC', 'Dream'],\n 'Vogue': ['HTC', 'Touch'],\n 'Vendor Optimus': ['LG', 'Optimus'],\n 'Stingray': ['Motorola', 'XOOM', 'tablet'],\n 'Wingray': ['Motorola', 'XOOM', 'tablet'],\n 'maguro': ['Samsung', 'Galaxy Nexus'],\n 'Maguro': ['Samsung', 'Galaxy Nexus'],\n 'Toro-VZW': ['Samsung', 'Galaxy Nexus'],\n 'blaze': ['Texas Instruments', 'Blaze Tablet', 'tablet'],\n 'Blaze': ['Texas Instruments', 'Blaze Tablet', 'tablet'],\n 'Blaze Tablet': ['Texas Instruments', 'Blaze Tablet', 'tablet'],\n 'BlueStacks': ['BlueStacks', 'App Player', 'desktop'],\n 'youwave custom': ['Youwave', 'Android on PC', 'desktop'],\n 'A100': ['Acer', 'Iconia Tab A100', 'tablet'],\n 'A101': ['Acer', 'Iconia Tab A101', 'tablet'],\n 'A200': ['Acer', 'Iconia Tab A200', 'tablet'],\n 'A500': ['Acer', 'Iconia Tab A500', 'tablet'],\n 'A501': ['Acer', 'Iconia Tab A501', 'tablet'],\n 'A510': ['Acer', 'Iconia Tab A510', 'tablet'],\n 'A511': ['Acer', 'Iconia Tab A511', 'tablet'],\n 'A700': ['Acer', 'Iconia Tab A700', 'tablet'],\n 'Acer A800': ['Acer', 'Iconia Tab A800', 'tablet'],\n 'E110': ['Acer', 'beTouch E110'],\n 'E120': ['Acer', 'beTouch E120'],\n 'E130': ['Acer', 'beTouch E130'],\n 'E140': ['Acer', 'beTouch E140'],\n 'E210': ['Acer', 'beTouch E210'],\n 'E310': ['Acer', 'Liquid mini'],\n 'E320': ['Acer', 'Liquid Express'],\n 'E330': ['Acer', 'Liquid Glow'],\n 'E400': ['Acer', 'beTouch E400'],\n 'G100W': ['Acer', 'G100W'],\n 'S100': ['Acer', 'Liquid'],\n 'S110': ['Acer', 'Stream'],\n 'S120': ['Acer', 'Liquid mt'],\n 'S300': ['Acer', 'Iconia Smart'],\n 'S500': ['Acer', 'CloudMobile'],\n 'TD600': ['Acer', 'beTouch TD600'],\n 'Liquid': ['Acer', 'Liquid'],\n 'Liquid E': ['Acer', 'Liquid E'],\n 'Liquid Mt': ['Acer', 'Liquid mt'],\n 'Liquid MT': ['Acer', 'Liquid mt'],\n 'Liquid Metal': ['Acer', 'Liquid mt'],\n 'Stream': ['Acer', 'Stream'],\n 'N700': ['aigo', 'N700', 'tablet'],\n 'M801': ['aigo', 'M801', 'tablet'],\n 'Novo7': ['Ainovo', 'Novo7', 'tablet'],\n 'Novo7 Aurora': ['Ainovo', 'Novo7 Aurora', 'tablet'],\n 'Novo7 Advanced': ['Ainovo', 'Novo7 Advanced', 'tablet'],\n 'Novo7 Advanced2': ['Ainovo', 'Novo7 Advanced 2', 'tablet'],\n 'Novo7 Basic': ['Ainovo', 'Novo7 Basic', 'tablet'],\n 'Novo7 ELF': ['Ainovo', 'Novo7 Elf', 'tablet'],\n 'Novo7 PALADIN': ['Ainovo', 'Novo7 Paladin', 'tablet'],\n 'Novo8 Advanced': ['Ainovo', 'Novo8 Advanced', 'tablet'],\n 'one touch 890': ['Alcatel', 'One Touch 890'],\n 'one touch 890D': ['Alcatel', 'One Touch 890'],\n 'one touch 891': ['Alcatel', 'One Touch 891'],\n 'ONE TOUCH 903': ['Alcatel', 'One Touch 903SHV-E170K'],\n 'one touch 906': ['Alcatel', 'One Touch 906'],\n 'one touch 908': ['Alcatel', 'One Touch 908'],\n 'one touch 908F': ['Alcatel', 'One Touch 908'],\n 'one touch 908S': ['Alcatel', 'One Touch 908'],\n 'one touch 910': ['Alcatel', 'One Touch 910'],\n 'one touch 918': ['Alcatel', 'One Touch 918'],\n 'one touch 918D': ['Alcatel', 'One Touch 918'],\n 'ONE TOUCH 918D': ['Alcatel', 'One Touch 918'],\n 'one touch 918M': ['Alcatel', 'One Touch 918'],\n 'one touch 918N': ['Alcatel', 'One Touch 918'],\n 'one touch 980': ['Alcatel', 'One Touch 980'],\n 'one touch 980A': ['Alcatel', 'One Touch 980'],\n 'one touch 981A': ['Alcatel', 'One Touch 981'],\n 'one touch 986': ['Alcatel', 'One Touch 986'],\n 'one touch 990': ['Alcatel', 'One Touch 990'],\n 'one touch 990A': ['Alcatel', 'One Touch 990'],\n 'one touch 991': ['Alcatel', 'One Touch 991'],\n 'one touch 991D': ['Alcatel', 'One Touch 991'],\n 'ONE TOUCH 993': ['Alcatel', 'One Touch 993'],\n 'one touch 995': ['Alcatel', 'One Touch 995'],\n 'Telenor OneTouch': ['Alcatel', 'One Touch 990'],\n 'OT 918': ['Alcatel', 'One Touch 918'],\n 'Venture': ['Alcatel', 'Venture'],\n 'Allwinner A10': ['AllWinner', 'A10', 'tablet'],\n '97FC': ['AllWinner', 'A10 97FC', 'tablet'],\n 'Kindle Fire': ['Amazon', 'Kindle Fire', 'tablet'],\n 'Amazon Kindle Fire': ['Amazon', 'Kindle Fire', 'tablet'],\n 'AMD120': ['AnyDATA', 'AnyTAB AMD120', 'tablet'],\n 'MW0811': ['AOC', 'Breeze MW0811', 'tablet'],\n 'MW0821 V2.0': ['AOC', 'Breeze MW0821', 'tablet'],\n 'MW0922': ['AOC', 'Breeze MW0922', 'tablet'],\n 'Apanda A60': ['Apanda', 'A60'],\n 'apanda-A60': ['Apanda', 'A60'],\n 'A80KSC': ['Archos', 'Arnova 8', 'tablet'],\n 'AN7CG2': ['Archos', 'Arnova 7', 'tablet'],\n 'A101B': ['Archos', 'Arnova 10', 'tablet'],\n 'AN10BG2DT': ['Archos', 'Arnova 10 B', 'tablet'],\n 'AN10G2': ['Archos', 'Arnova 10 G2', 'tablet'],\n 'A32': ['Archos', '32', 'media'],\n 'A35DE': ['Archos', '35 Smart Home Phone'],\n 'A43': ['Archos', '43', 'media'],\n 'Archos5': ['Archos', '5', 'media'],\n 'A70H': ['Archos', '7', 'tablet'],\n 'A70HB': ['Archos', '7', 'tablet'],\n 'A70BHT': ['Archos', '7', 'tablet'],\n 'A70CHT': ['Archos', '7C', 'tablet'],\n 'A70S': ['Archos', '70', 'tablet'],\n 'A7EB': ['Archos', '70B', 'tablet'],\n 'ARCHOS 70it2': ['Archos', '70 IT 2', 'tablet'],\n 'ARCHOS 80G9': ['Archos', '80 G9', 'tablet'],\n 'ARCHOS 101G9': ['Archos', '101 G9', 'tablet'],\n 'A101IT': ['Archos', '101 IT', 'tablet'],\n 'ASTRI': ['ASTRI', 'e-reader', 'ereader'],\n 'eeepc': ['Asus', 'Eee Pc'],\n 'asus laptop': ['Asus', 'Eee Pc'],\n 'ME171': ['Asus', 'Eee Pad MeMO', 'tablet'],\n 'Slider SL101': ['Asus', 'Eee Pad Slider', 'tablet'],\n 'EPAD': ['Asus', 'Eee Pad Transformer', 'tablet'],\n 'TF101': ['Asus', 'Eee Pad Transformer', 'tablet'],\n 'Transformer TF101': ['Asus', 'Eee Pad Transformer', 'tablet'],\n 'Transformer TF101G': ['Asus', 'Eee Pad Transformer', 'tablet'],\n 'TF201': ['Asus', 'Eee Pad Transformer Prime', 'tablet'],\n 'Transformer Prime TF201': ['Asus', 'Eee Pad Transformer Prime', 'tablet'],\n 'Transformer Prime': ['Asus', 'Eee Pad Transformer Prime', 'tablet'],\n 'Transformer Pad TF300T': ['Asus', 'Transformer Pad 300', 'tablet'],\n 'ASUS Transformer TF300T': ['Asus', 'Transformer Pad 300', 'tablet'],\n 'ASUS Transformer Pad TF300T': ['Asus', 'Transformer Pad 300', 'tablet'],\n 'ASUS Transformer Pad TF300TG': ['Asus', 'Transformer Pad 300', 'tablet'],\n 'ASUS Transformer Pad TF700T': ['Asus', 'Transformer Pad Infinity 700', 'tablet'],\n 'ASUS Transformer Pad TF700K': ['Asus', 'Transformer Pad Infinity 700', 'tablet'],\n 'ASUS Transformer TF700K': ['Asus', 'Transformer Pad Infinity 700', 'tablet'],\n 'PadFone': ['Asus', 'Padfone', 'tablet'],\n 'OMS TTD': ['Asus', 'Eee Pc T10'],\n 'ASUS T20': ['Asus', 'Eee Pc T20'],\n 'ETBW11AA': ['Asus', 'Tough'],\n 'AUX V900': ['AUX', 'V900'],\n 'M910A': ['AUX', 'M910'],\n 'PICOpad-QGN': ['Axioo', 'Picopad QGN', 'tablet'],\n 'NOOK': ['Barnes & Noble', 'NOOK', 'ereader'],\n 'NookColor': ['Barnes & Noble', 'NOOK Color', 'ereader'],\n 'NOOK BNRV200': ['Barnes & Noble', 'NOOK Color', 'ereader'],\n 'NOOK BNRV300': ['Barnes & Noble', 'NOOK Color', 'ereader'],\n 'NookTablet': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n 'Nook Tablet': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n 'NOOK BNTV250': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n 'NOOK BNTV250A': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n 'BNTV250': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n 'BNTV250A': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n 'NOOK Slate': ['Barnes & Noble', 'NOOK Tablet', 'ereader'],\n 'BenWee 5100': ['BenWee', '5100'],\n 'CA907AAC0G': ['Besta', 'CA907AAC0G'],\n 'BM999': ['Bmorn', 'BM999', 'tablet'],\n 'V11': ['Bmorn', 'V11', 'tablet'],\n 'V99': ['Bmorn', 'V99', 'tablet'],\n 'bq DaVinci': ['bq', 'DaVinci', 'tablet'],\n 'CT704': ['Carrefour', 'CT704', 'tablet'],\n 'CT1002': ['Carrefour', 'CT1002', 'tablet'],\n 'Camangi-Mangrove7': ['Camangi', 'Mangrove 7', 'tablet'],\n 'WS171': ['Camangi', 'WebStation', 'tablet'],\n 'IS11CA': ['Casio', 'GzOne IS11CA'],\n 'C771': ['Casio', 'GzOne Commando'],\n 'CAT NOVA': ['Cat', 'NOVA', 'tablet'],\n 'ARMM3V': ['chinaleap', 'ARMM3V', 'tablet'],\n 'CIUS-7': ['Cisco', 'Cius', 'tablet'],\n 'CIUS-7-AT': ['Cisco', 'Cius', 'tablet'],\n 'CSL Spice MI300': ['CSL', 'Spice MI300'],\n 'CSL-MI410': ['CSL', 'Spice MI410'],\n 'MID1024': ['Coby', 'Kyros MID1024', 'tablet'],\n 'MID1125': ['Coby', 'Kyros MID1125', 'tablet'],\n 'MID1126': ['Coby', 'Kyros MID1126', 'tablet'],\n 'MID7010': ['Coby', 'Kyros MID7010', 'tablet'],\n 'MID7012': ['Coby', 'Kyros MID7012', 'tablet'],\n 'MID7015': ['Coby', 'Kyros MID7015', 'tablet'],\n 'MID7015A': ['Coby', 'Kyros MID7015', 'tablet'],\n 'MID7016': ['Coby', 'Kyros MID7016', 'tablet'],\n 'MID7020': ['Coby', 'Kyros MID7020', 'tablet'],\n 'MID7022': ['Coby', 'Kyros MID7022', 'tablet'],\n 'MID7024': ['Coby', 'Kyros MID7024', 'tablet'],\n 'MID7025': ['Coby', 'Kyros MID7025', 'tablet'],\n 'MID7127': ['Coby', 'Kyros MID7127', 'tablet'],\n 'MID8024': ['Coby', 'Kyros MID8024', 'tablet'],\n 'MID8125': ['Coby', 'Kyros MID8125', 'tablet'],\n 'MID8127': ['Coby', 'Kyros MID8127', 'tablet'],\n 'Z71': ['Commtiva', 'Z71'],\n 'V-T100': ['Commtiva', 'V-T100'],\n 'FIH-FB0': ['Commtiva', 'HD700'],\n 'Coolpad D510': ['Coolpad', 'D510'],\n 'Coolpad 8020': ['Coolpad', '8020'],\n 'D530': ['Coolpad', 'D530'],\n 'Coolpad D530': ['Coolpad', 'D530'],\n 'D539': ['Coolpad', 'D539'],\n 'Coolpad D539': ['Coolpad', 'D539'],\n 'E239': ['Coolpad', 'E239'],\n 'Coolpad E239': ['Coolpad', 'E239'],\n 'Coolpad N930': ['Coolpad', 'N930'],\n 'N930': ['Coolpad', 'N930'],\n 'Coolpad W706': ['Coolpad', 'W706'],\n 'Coolpad W706+': ['Coolpad', 'W706'],\n 'Coolpad W708': ['Coolpad', 'W708'],\n 'W711': ['Coolpad', 'W711'],\n 'Coolpad 5010': ['Coolpad', '5010'],\n 'Coolpad 5210': ['Coolpad', '5210'],\n 'Coolpad 5820': ['Coolpad', '5820'],\n '5832': ['Coolpad', '5832'],\n 'Coolpad 5832': ['Coolpad', '5832'],\n '5855': ['Coolpad', '5855'],\n 'Coolpad 5860': ['Coolpad', '5860'],\n 'Coolpad 5860+': ['Coolpad', '5860'],\n 'Coolpad 5860s': ['Coolpad', '5860'],\n '5860': ['Coolpad', '5860'],\n '5860A': ['Coolpad', '5860'],\n 'Coolpad 5870': ['Coolpad', '5870'],\n '5870': ['Coolpad', '5870'],\n 'Coolpad 7005': ['Coolpad', '7005'],\n '7260': ['Coolpad', '7260'],\n 'Coolpad 7019': ['Coolpad', '7019'],\n 'Coolpad 7260': ['Coolpad', '7260'],\n 'Coolpad 8013': ['Coolpad', '8013'],\n 'Coolpad 8809': ['Coolpad', '8809'],\n 'Coolpad 8810': ['Coolpad', '8810'],\n '8810': ['Coolpad', '8810'],\n '8150': ['Coolpad', '8150'],\n 'Coolpad 8150D': ['Coolpad', '8150'],\n\n 'Coolpad 8811': ['Coolpad', '8811'],\n 'Coolpad 9900': ['Coolpad', '9900'],\n 'Coolpad 8050': ['Coolpad', '8050'],\n 'ZiiO7': ['Creative', 'ZiiO 7', 'tablet'],\n 'ZiiLABS ZiiO7': ['Creative', 'ZiiO 7', 'tablet'],\n 'ZiiLABS ZiiO10 ': ['Creative', 'ZiiO 10', 'tablet'],\n 'CUBE K8GT A': ['Cube', 'K8GT A', 'tablet'],\n 'CUBE K8GT B': ['Cube', 'K8GT B', 'tablet'],\n 'K8GT C': ['Cube', 'K8GT C', 'tablet'],\n 'K8GT H': ['Cube', 'K8GT H', 'tablet'],\n 'CUBE K8GT H': ['Cube', 'K8GT H', 'tablet'],\n 'K8GT W': ['Cube', 'K8GT W', 'tablet'],\n 'CUBE U8GT': ['Cube', 'U8GT', 'tablet'],\n 'CUBE U9GT': ['Cube', 'U9GT', 'tablet'],\n 'CUBE U9GT 2': ['Cube', 'U9GT 2', 'tablet'],\n 'Cube U9GT2': ['Cube', 'U9GT 2', 'tablet'],\n 'U9GT': ['Cube', 'U9GT', 'tablet'],\n 'U9GT2 From moage.com': ['Cube', 'U9GT 2', 'tablet'],\n 'N90 From moage.com': ['Cube', 'U9GT 2', 'tablet'],\n 'U9GT S': ['Cube', 'U9GT S', 'tablet'],\n 'U9GT S A': ['Cube', 'U9GT SA', 'tablet'],\n 'U9GTS A': ['Cube', 'U9GT SA', 'tablet'],\n 'U10GT 2': ['Cube', 'U10GT 2', 'tablet'],\n 'U10GT S': ['Cube', 'U10GT S', 'tablet'],\n 'U30GT-H': ['Cube', 'U30GT H', 'tablet'],\n 'CUBE Q7PRO': ['Cube', 'Q7 Pro', 'tablet'],\n 'CUBE Q7PRO J': ['Cube', 'Q7 Pro', 'tablet'],\n 'Cydle M7 (v0005.04.03.12.ko)': ['Cydle', 'M7 MultiPAD', 'tablet'],\n 'Dell Aero': ['Dell', 'Aero'],\n 'Dell M01M': ['Dell', 'Mini 5', 'tablet'],\n 'Dell Streak': ['Dell', 'Streak', 'tablet'],\n '001DL': ['Dell', 'Streak', 'tablet'],\n '101DL': ['Dell', 'Streak Pro', 'tablet'],\n 'GS01': ['Dell', 'Streak Pro', 'tablet'],\n 'Dell Streak Pro': ['Dell', 'Streak Pro', 'tablet'],\n 'streak7': ['Dell', 'Streak 7', 'tablet'],\n 'Dell Streak 7': ['Dell', 'Streak 7', 'tablet'],\n 'Dell Streak 10 Pro': ['Dell', 'Streak 10 Pro', 'tablet'],\n 'Dell V04B': ['Dell', 'Streak V04B', 'tablet'],\n 'Dell Venue': ['Dell', 'Venue'],\n 'Dell XCD35': ['Dell', 'XCD35'],\n 'XCD35': ['Dell', 'XCD35'],\n 'iDx7': ['Digma', 'iDx7', 'tablet'],\n 'iDx10': ['Digma', 'iDx10', 'tablet'],\n 'iDx10 3G': ['Digma', 'iDx10', 'tablet'],\n 'DM009SH': ['Disney Mobile', 'DM009SH'],\n 'DM010SH': ['Disney Mobile', 'DM010SH'],\n 'DM012SH': ['Disney Mobile', 'DM012SH'],\n 'F-08D': ['Disney Mobile', 'F-08D'],\n 'P-05D': ['Disney Mobile', 'P-05D'],\n 'Tablet-P27': ['DracoTek', 'P27 Tablet', 'tablet'],\n 'edgejr': ['EnTourage', 'Pocket eDGe', 'tablet'],\n 'l97D': ['EPad', 'l97D', 'tablet'],\n 'M4301': ['Eston', 'MID M4301', 'media'],\n 'P10AN': ['Exper', 'Easypad P10AN', 'tablet'],\n 'FIH-F0X': ['FIH', 'F0X'],\n 'Fly IQ260': ['Fly', 'IQ260 BlackBird'],\n 'ISW11F': ['Fujitsu', 'Arrows Z'],\n 'ISW13F': ['Fujitsu', 'Arrows Z'],\n 'IS12F': ['Fujitsu', 'Arrows ES'],\n 'F-01D': ['Fujitsu', 'Arrows Tab LTE', 'tablet'],\n 'F-03D': ['Fujitsu', 'Arrows Kiss'],\n 'F-05D': ['Fujitsu', 'Arrows X LTE'],\n 'F-07D': ['Fujitsu', 'Arrows \\u00c3\\ufffd\\u00c2\\u00bc'],\n 'F-10D': ['Fujitsu', 'Arrows X F-10D'],\n 'F-12C': ['Fujitsu', 'Globetrotter'],\n 'f12arc': ['Fujitsu', 'F12arc'],\n 'M532': ['Fujitsu', 'Stylistic M532', 'tablet'],\n 'Garminfone': ['Garmin-Asus', 'Garminfone'],\n 'Garmin-Asus A10': ['Garmin-Asus', 'Nuvifone A10'],\n 'Garmin-Asus A50': ['Garmin-Asus', 'Nuvifone A50'],\n 'TPA60W': ['Gateway', 'TPA60W', 'tablet'],\n 'Geeksphone ZERO': ['Geeksphone', 'ZERO'],\n 'gemei G2': ['Gemei', 'G2', 'tablet'],\n 'Gemei G2': ['Gemei', 'G2', 'tablet'],\n 'gemei G3': ['Gemei', 'G3', 'tablet'],\n 'Gemei G9': ['Gemei', 'G9', 'tablet'],\n 'GSmart G1317D': ['Gigabyte', 'GSmart G1317D'],\n 'Gigabyte TB100': ['Gigabyte', 'TB100', 'tablet'],\n 'GN100': ['Gionee', 'GN100'],\n 'GN105': ['Gionee', 'GN105'],\n 'GN106': ['Gionee', 'GN106'],\n 'GN200': ['Gionee', 'GN200'],\n 'GN205': ['Gionee', 'GN205'],\n 'GN700W': ['Gionee', 'GN700W'],\n 'GN708W': ['Gionee', 'GN708W'],\n 'Google Ion': ['Google', 'Ion'],\n 'Nexus One': ['Google', 'Nexus One'],\n 'NexusOne': ['Google', 'Nexus One'],\n 'HTC Nexus One': ['Google', 'Nexus One'],\n 'Nexus S': ['Google', 'Nexus S'],\n 'Google Nexus S': ['Google', 'Nexus S'],\n 'Nexus S 4G': ['Google', 'Nexus S 4G'],\n 'Dooderbutt-4.0.3-v1': ['Google', 'Nexus S 4G'],\n 'Nexus 7': ['Google', 'Nexus 7', 'tablet'],\n 'Haier HW-W910': ['Haier', 'HW-W910'],\n 'SN10T1': ['HANNspree', 'HANNSpad SN10T1', 'tablet'],\n 'SN10T2': ['HANNspree', 'HANNSpad SN10T2', 'tablet'],\n 'HannsComb': ['HANNspree', 'HANNSpad', 'tablet'],\n 'X1': ['HCL', 'ME X1', 'tablet'],\n 'MID Serails': ['Herotab', 'C8', 'tablet'],\n 'MID Serials': ['Herotab', 'C8', 'tablet'],\n 'COSMO DUO': ['Hiscreen', 'Cosmo DUO', 'tablet'],\n 'HS-U8': ['Hisense', 'U8'],\n 'HS-T92': ['Hisense', 'T92'],\n 'HS-E860': ['Hisense', 'E860'],\n 'HS-E910': ['Hisense', 'E910'],\n 'HS-E926': ['Hisense', 'E926'],\n\n 'HS-EG900': ['Hisense', 'EG900'],\n 'HS-ET919': ['Hisense', 'ET919'],\n 'EG968B': ['Hisense', 'EG968B'],\n 'HKPHONE H8-3G': ['HKPhone', 'H8 3G'],\n 'HOSIN U2': ['Hosin', 'U2'],\n 'Touchpad': ['HP', 'TouchPad', 'tablet'],\n 'HP Touchpad': ['HP', 'TouchPad', 'tablet'],\n 'cm tenderloin': ['HP', 'TouchPad', 'tablet'],\n 'aokp tenderloin': ['HP', 'TouchPad', 'tablet'],\n 'HTC Amaze 4G': ['HTC', 'Amaze 4G'],\n 'HTC Ruby': ['HTC', 'Amaze 4G'],\n 'HTC Amaze 4G(Ruby)': ['HTC', 'Amaze 4G'],\n 'Amaze 4G': ['HTC', 'Amaze 4G'],\n 'HTC Aria': ['HTC', 'Aria'],\n 'HTC Aria A6380': ['HTC', 'Aria'],\n 'HTC Liberty A6380': ['HTC', 'Aria'],\n 'HTC Liberty': ['HTC', 'Aria'],\n 'HTC A6366': ['HTC', 'Aria'],\n 'HTC Bee': ['HTC', 'Bee'],\n 'HTC ChaCha': ['HTC', 'ChaCha'],\n 'HTC ChaCha A810e': ['HTC', 'ChaCha'],\n 'HTC ChaChaCha A810e': ['HTC', 'ChaCha'],\n 'HTC A810e': ['HTC', 'ChaCha'],\n 'HTC A9188': ['HTC', 'Tianxi'],\n 'HTC Bravo': ['HTC', 'Desire'],\n 'HTC Desire': ['HTC', 'Desire'],\n 'HTC Desire A8181': ['HTC', 'Desire'],\n 'HTC Desire A8183': ['HTC', 'Desire'],\n 'HTC Desire Beats A8181': ['HTC', 'Desire'],\n 'HTC Desire CDMA': ['HTC', 'Desire'],\n 'HTC Desire SMS': ['HTC', 'Desire'],\n 'HTC Desire S.M.S': ['HTC', 'Desire'],\n 'HTC Desire C': ['HTC', 'Desire C'],\n 'HTC DesireHD': ['HTC', 'Desire HD'],\n 'HTC DesireHD A9191': ['HTC', 'Desire HD'],\n 'HTC DesireHD A9192': ['HTC', 'Desire HD'],\n 'HTC Desire HD A9191': ['HTC', 'Desire HD'],\n 'HTC A9191': ['HTC', 'Desire HD'],\n 'HTC A9191 for AT&T': ['HTC', 'Desire HD'],\n 'HTC A9192': ['HTC', 'Desire HD'],\n 'HTC Desire HD': ['HTC', 'Desire HD'],\n 'HTC Desire HD with Beats Audio': ['HTC', 'Desire HD'],\n 'HTC Desire S': ['HTC', 'Desire S'],\n 'HTC DesireS': ['HTC', 'Desire S'],\n 'HTC DesiresS': ['HTC', 'Desire S'],\n 'HTC DesireS S510e': ['HTC', 'Desire S'],\n 'HTC DesireS S510b': ['HTC', 'Desire S'],\n 'HTC Desire S S510e': ['HTC', 'Desire S'],\n 'HTC S510e': ['HTC', 'Desire S'],\n 'HTC Desire Saga': ['HTC', 'Desire S'],\n 'HTC Desire V': ['HTC', 'Desire V'],\n 'HTC T328w': ['HTC', 'Desire V'],\n 'HTC Desire VC': ['HTC', 'Desire VC'],\n 'HTC T328d': ['HTC', 'Desire VC'],\n 'HTC T328t': ['HTC', 'Desire VT'],\n 'HTC Desire Z': ['HTC', 'Desire Z'],\n 'HTC DesireZ': ['HTC', 'Desire Z'],\n 'HTC DesireZ A7272': ['HTC', 'Desire Z'],\n 'HTC Desire Z A7272': ['HTC', 'Desire Z'],\n 'HTC Vision': ['HTC', 'Desire Z'],\n 'HTC A7275': ['HTC', 'Desire Z'],\n 'HTC Dream': ['HTC', 'Dream'],\n 'HTC S710d': ['HTC', 'Droid Incredible 2'],\n 'HTC Incredible 2': ['HTC', 'Droid Incredible 2'],\n 'HTC X515d': ['HTC', 'EVO 3D'],\n 'HTC X515m': ['HTC', 'EVO 3D'],\n 'HTC X515C': ['HTC', 'EVO 3D'],\n 'HTC Evo 3D': ['HTC', 'EVO 3D'],\n 'HTC EVO 3D': ['HTC', 'EVO 3D'],\n 'HTC EVO 3D GSM': ['HTC', 'EVO 3D'],\n 'HTC EVO 3D X515a': ['HTC', 'EVO 3D'],\n 'HTC EVO 3D GSM X515m': ['HTC', 'EVO 3D'],\n 'HTC EVO 3D X515m': ['HTC', 'EVO 3D'],\n 'HTC EVO 3D X515M': ['HTC', 'EVO 3D'],\n 'HTC EVO3D X515a': ['HTC', 'EVO 3D'],\n 'HTC EVO3D X515m': ['HTC', 'EVO 3D'],\n 'HTC Evo 3D X515m': ['HTC', 'EVO 3D'],\n 'HTC Evo 3D with Beats Audio X515m': ['HTC', 'EVO 3D'],\n 'HTC Evo 4G': ['HTC', 'EVO 4G'],\n 'HTC EVO 4G': ['HTC', 'EVO 4G'],\n 'HTC X515E': ['HTC', 'EVO 4G+'],\n 'HTC EVO 4G+ For Sprint': ['HTC', 'EVO 4G+'],\n 'HTC EVO 4G++ For Sprint': ['HTC', 'EVO 4G+'],\n 'HTC C715c': ['HTC', 'EVO Design 4G'],\n 'HTC Design 4G': ['HTC', 'EVO Design 4G'],\n 'HTC EVO design 4G': ['HTC', 'EVO Design 4G'],\n 'HTC EVO Design 4G': ['HTC', 'EVO Design 4G'],\n 'HTC Evo Shift': ['HTC', 'EVO Shift'],\n 'HTC EVO Shift 4G': ['HTC', 'EVO Shift'],\n 'HTC A310e': ['HTC', 'Explorer'],\n 'HTC Explorer': ['HTC', 'Explorer'],\n 'HTC Explorer A310b': ['HTC', 'Explorer'],\n 'HTC Explorer A310e': ['HTC', 'Explorer'],\n 'HTC P510e': ['HTC', 'Flyer', 'tablet'],\n 'HTC Flyer': ['HTC', 'Flyer', 'tablet'],\n 'HTC Flyer P510e': ['HTC', 'Flyer', 'tablet'],\n 'HTC Flyer P512': ['HTC', 'Flyer', 'tablet'],\n 'HTC Flyer P512 NA': ['HTC', 'Flyer', 'tablet'],\n 'HTC P515E': ['HTC', 'Flyer 4G', 'tablet'],\n 'HTC Gratia A6380': ['HTC', 'Gratia'],\n 'HTC HD': ['HTC', 'HD'],\n 'HTC HD2': ['HTC', 'HD2'],\n 'HTC HD2 T8585': ['HTC', 'HD2'],\n 'HTC HD2(Leo)': ['HTC', 'HD2'],\n 'HTC HD7': ['HTC', 'HD7'],\n 'HTC T9299+': ['HTC', 'HD7'],\n 'HTC HD7 for Sprint': ['HTC', 'HD7'],\n 'HTC HD7 4G T9299 For AT&T': ['HTC', 'HD7'],\n 'HTC HD7 4G T9299+ For AT&T': ['HTC', 'HD7'],\n 'HTC T9299+ For AT&T': ['HTC', 'HD7'],\n 'HTC HD7S T9399+': ['HTC', 'HD7s'],\n 'HTC HD7S T9899+': ['HTC', 'HD7s'],\n 'HTC T9899+ For AT&T': ['HTC', 'HD7s'],\n 'VitMod ExtraLite 1.6.5.fullodex for HTC HD7 Pro': ['HTC', 'HD7 Pro'],\n 'HTC Hero': ['HTC', 'Hero'],\n 'HTC HERO': ['HTC', 'Hero'],\n 'HTC Hero CDMA': ['HTC', 'Hero'],\n 'HTC HERO CDMA': ['HTC', 'Hero'],\n 'HTC HERO200': ['HTC', 'Hero 200'],\n 'HTC Hero S': ['HTC', 'Hero S'],\n 'HTC IMAGIO': ['HTC', 'Imagio'],\n 'HTC Incredible': ['HTC', 'Incredible'],\n 'HTC Incredible S710E': ['HTC', 'Incredible S'],\n 'HTC S710e': ['HTC', 'Incredible S'],\n 'HTC Incredible S': ['HTC', 'Incredible S'],\n 'HTC Incredible S S710e': ['HTC', 'Incredible S'],\n 'HTC Incredible S s710e': ['HTC', 'Incredible S'],\n 'HTC IncredibleS S710e': ['HTC', 'Incredible S'],\n 'HTC Incredible S with Beats Audio': ['HTC', 'Incredible S'],\n 'HTC Vivo': ['HTC', 'Incredible S'],\n 'HTC Innovation': ['HTC', 'Innovation'],\n 'HTC Inspire 4G': ['HTC', 'Inspire 4G'],\n 'HTC HD7 Inspire 4G For Vodafone': ['HTC', 'Inspire 4G'],\n 'HTC P715a': ['HTC', 'Jetstream', 'tablet'],\n 'HTC Legend': ['HTC', 'Legend'],\n 'HTC Magic': ['HTC', 'Magic'],\n 'HTC Sapphire': ['HTC', 'Magic'],\n 'HTC Lexikon': ['HTC', 'Merge'],\n 'HTC One S': ['HTC', 'One S'],\n 'HTC Z520e': ['HTC', 'One S'],\n 'HTC One V': ['HTC', 'One V'],\n 'HTC T320e': ['HTC', 'One V'],\n 'HTC One X': ['HTC', 'One X'],\n 'HTC S720e': ['HTC', 'One X'],\n 'HTC Endeavour-LS': ['HTC', 'One X'],\n 'HTC One XL': ['HTC', 'One XL'],\n 'HTC X710a': ['HTC', 'Raider 4G'],\n 'HTC Raider': ['HTC', 'Raider 4G'],\n 'HTC Raider X710e': ['HTC', 'Raider 4G'],\n 'HTC Raider X710s': ['HTC', 'Raider 4G'],\n 'HTC Raider 4G X710e': ['HTC', 'Raider 4G'],\n 'HTC PH39100': ['HTC', 'Raider 4G'],\n 'HTC Holiday': ['HTC', 'Raider 4G'],\n 'HTC Velocity 4G X710s': ['HTC', 'Raider 4G'],\n 'HTC Rezound': ['HTC', 'Rezound'],\n 'HTC Rhyme S510b': ['HTC', 'Rhyme'],\n 'HTC S510b': ['HTC', 'Rhyme'],\n 'HTC Bliss': ['HTC', 'Rhyme'],\n 'HTC Bliss S510b': ['HTC', 'Rhyme'],\n 'HTC Salsa C510e': ['HTC', 'Salsa'],\n 'HTC C510e': ['HTC', 'Salsa'],\n 'HTC Z710a': ['HTC', 'Sensation'],\n 'HTC Z710e': ['HTC', 'Sensation'],\n 'HTC Z710t': ['HTC', 'Sensation'],\n 'HTC Sensation': ['HTC', 'Sensation'],\n 'HTC Sensation Z710': ['HTC', 'Sensation'],\n 'HTC Sensation Z710a': ['HTC', 'Sensation'],\n 'HTC Sensation Z710e': ['HTC', 'Sensation'],\n 'HTC Sensation Z710E': ['HTC', 'Sensation'],\n 'HTC Sensation Z710e For AT&T': ['HTC', 'Sensation'],\n 'HTC Sensation Z710e with Beats Audio': ['HTC', 'Sensation'],\n 'HTC Sensation with Beats Audio Z710e': ['HTC', 'Sensation'],\n 'HTC Sensation with Beats Audio': ['HTC', 'Sensation'],\n 'HTC Sensation Taste': ['HTC', 'Sensation'],\n 'HTC Pyramid': ['HTC', 'Sensation'],\n 'HTC Pyramid Z710a': ['HTC', 'Sensation'],\n 'HTC Pyramid Z710e': ['HTC', 'Sensation'],\n 'HTC Sensation 4G': ['HTC', 'Sensation'],\n 'HTC Sensation 4G with Beats Audio': ['HTC', 'Sensation'],\n 'HTC Sensation G14': ['HTC', 'Sensation'],\n 'HTC Sensation G14 for AT&T': ['HTC', 'Sensation'],\n 'HTC G14 sensation': ['HTC', 'Sensation'],\n 'HTC Z715e': ['HTC', 'Sensation XE'],\n 'HTC Sensation Z715e': ['HTC', 'Sensation XE'],\n 'HTC SensationXE Beats': ['HTC', 'Sensation XE'],\n 'HTC SensationXE Beats Z715a': ['HTC', 'Sensation XE'],\n 'HTC SensationXE Beats Z715e': ['HTC', 'Sensation XE'],\n 'HTC Sensation XE': ['HTC', 'Sensation XE'],\n 'HTC Sensation XE Z715e': ['HTC', 'Sensation XE'],\n 'HTC SensationXE Z715e': ['HTC', 'Sensation XE'],\n 'HTC Sensation XE Beats': ['HTC', 'Sensation XE'],\n 'HTC SensationXE with Beats Audio': ['HTC', 'Sensation XE'],\n 'HTC Sensation XE with Beats Audio': ['HTC', 'Sensation XE'],\n 'HTC Sensation XE with Beats Audio Z715a': ['HTC', 'Sensation XE'],\n 'HTC Sensation Juredroid XE Beats Audio': ['HTC', 'Sensation XE'],\n 'HTC Sensation XE with Beats Audio Z715e': ['HTC', 'Sensation XE'],\n 'HTC Sensation XE With Beats Audio Z715e': ['HTC', 'Sensation XE'],\n 'HTC Sensation 4G XE with Beats Audio': ['HTC', 'Sensation XE'],\n 'HTC Sensation with Beats Audio Z715e': ['HTC', 'Sensation XE'],\n 'HTC X315E': ['HTC', 'Sensation XL'],\n 'HTC SensationXL Beats X315b': ['HTC', 'Sensation XL'],\n 'HTC SensationXL Beats X315e': ['HTC', 'Sensation XL'],\n 'HTC Sensation XL with Beats Audio X315b': ['HTC', 'Sensation XL'],\n 'HTC Sensation XL with Beats Audio X315e': ['HTC', 'Sensation XL'],\n 'HTC Runnymede': ['HTC', 'Sensation XL'],\n 'HTC G21': ['HTC', 'Sensation XL'],\n 'HTC PH06130': ['HTC', 'Status'],\n 'HTC Status': ['HTC', 'Status'],\n 'HTC Tattoo': ['HTC', 'Tattoo'],\n 'HTC TATTOO A3288': ['HTC', 'Tattoo'],\n 'HTC click': ['HTC', 'Tattoo'],\n 'HTC X310e': ['HTC', 'Titan'],\n 'HTC T7373': ['HTC', 'Touch Pro II'],\n 'HTC ThunderBolt': ['HTC', 'ThunderBolt'],\n 'HTC Mecha': ['HTC', 'ThunderBolt'],\n 'HTC Velocity 4G': ['HTC', 'Velocity 4G'],\n 'HTC Wildfire': ['HTC', 'Wildfire'],\n 'HTC Wildfire A3333': ['HTC', 'Wildfire'],\n 'HTC A3366': ['HTC', 'Wildfire'],\n 'HTC A3380': ['HTC', 'Wildfire'],\n 'HTC WildfireS': ['HTC', 'Wildfire S'],\n 'HTC Wildfire S': ['HTC', 'Wildfire S'],\n 'Htc Wildfire s': ['HTC', 'Wildfire S'],\n 'HTC Wildfire S A510e': ['HTC', 'Wildfire S'],\n 'HTC Wildfire S A510b': ['HTC', 'Wildfire S'],\n 'HTC WildfireS A510e': ['HTC', 'Wildfire S'],\n 'HTC WildfireS A510b': ['HTC', 'Wildfire S'],\n 'htc wildfire s a510e': ['HTC', 'Wildfire S'],\n 'HTC Wildfire S A515c': ['HTC', 'Wildfire S'],\n 'HTC A510a': ['HTC', 'Wildfire S'],\n 'HTC A510e': ['HTC', 'Wildfire S'],\n 'HTC A510c': ['HTC', 'Wildfire S'],\n 'HTCX06HT': ['HTC', 'Desire'],\n 'HTC A6390': ['HTC', 'A6390'],\n 'HTC A8180': ['HTC', 'A8180'],\n 'HTC PG762': ['HTC', 'PG762'],\n 'HTC S715e': ['HTC', 'S715e'],\n 'HTC S720t': ['HTC', 'S720t'],\n 'HTC Z510d': ['HTC', 'Z510d'],\n 'HTC Z560e': ['HTC', 'Z560e'],\n 'HTC VLE U': ['HTC', 'One S'],\n 'HTC VLE#U': ['HTC', 'One S'],\n 'HTC VIE U': ['HTC', 'One S'],\n 'HTC EVA UL': ['HTC', 'One V'],\n 'HTC ENR U': ['HTC', 'One X'],\n 'ENR U': ['HTC', 'One X'],\n 'EndeavorU': ['HTC', 'One X'],\n 'Liberty': ['HTC', 'Aria'],\n 'Desire': ['HTC', 'Desire'],\n 'Desire A8181': ['HTC', 'Desire'],\n 'desire hd': ['HTC', 'Desire HD'],\n 'Desire HD': ['HTC', 'Desire HD'],\n 'Dedire HD': ['HTC', 'Desire HD'],\n 'Desire Hd (ace)': ['HTC', 'Desire HD'],\n 'Desire S': ['HTC', 'Desire S'],\n 'DesireS': ['HTC', 'Desire S'],\n 'Desire Saga': ['HTC', 'Desire S'],\n 'Desire Z': ['HTC', 'Desire Z'],\n 'Dream': ['HTC', 'Dream'],\n 'Droid Incredible': ['HTC', 'Droid Incredible'],\n 'EVO': ['HTC', 'EVO'],\n 'Evo HD2': ['HTC', 'EVO HD'],\n 'Evo 3D Beats X515m': ['HTC', 'EVO 3D'],\n 'Evo 3D GSM': ['HTC', 'EVO 3D'],\n 'EVO 3D X515m': ['HTC', 'EVO 3D'],\n 'EVO3D X515m': ['HTC', 'EVO 3D'],\n 'Evo 4G': ['HTC', 'EVO 4G'],\n 'EVO 4G': ['HTC', 'EVO 4G'],\n 'photon': ['HTC', 'HD mini'],\n 'GinDream\\/GinMagic': ['HTC', 'Dream'],\n 'HD2': ['HTC', 'HD2'],\n 'HD7 Pro': ['HTC', 'HD7 Pro'],\n 'Hero': ['HTC', 'Hero'],\n 'HERO CDMA': ['HTC', 'Hero'],\n 'HERO200': ['HTC', 'Hero 200'],\n 'Incredible': ['HTC', 'Droid Incredible'],\n 'Incredible 2': ['HTC', 'Droid Incredible 2'],\n 'Incredible S': ['HTC', 'Incredible S'],\n 'IncredibleS S710e': ['HTC', 'Incredible S'],\n 'IncredibleS': ['HTC', 'Incredible S'],\n 'Inspire HD': ['HTC', 'Inspire 4G'],\n 'Inspire 4G': ['HTC', 'Inspire 4G'],\n 'Legend': ['HTC', 'Legend'],\n 'NexusHD2': ['HTC', 'HD2'],\n 'Nexus HD2': ['HTC', 'HD2'],\n 'Docomo HT-03A': ['HTC', 'Magic'],\n 'MIUI.us Sensation 4G': ['HTC', 'Sensation 4G'],\n 'SiRF Dream': ['HTC', 'Dream'],\n 'Pyramid': ['HTC', 'Sensation'],\n 'Sensation': ['HTC', 'Sensation'],\n 'Sensation Z710e': ['HTC', 'Sensation'],\n 'Sensation 4G': ['HTC', 'Sensation'],\n 'Sensation 4g': ['HTC', 'Sensation'],\n 'TripNiCE Pyramid': ['HTC', 'Sensation'],\n 'SensationXE Beats Z715e': ['HTC', 'Sensation XE'],\n 'SensationXL Beats X315e': ['HTC', 'Sensation XL'],\n 'Click': ['HTC', 'Tattoo'],\n 'Wildfire': ['HTC', 'Wildfire'],\n 'Wildfire S': ['HTC', 'Wildfire S'],\n 'Wildfire S A510e': ['HTC', 'Wildfire S'],\n 'Sprint APX515CKT': ['HTC', 'EVO 3D'],\n 'Sprint APA9292KT': ['HTC', 'EVO 4G'],\n 'Sprint APA7373KT': ['HTC', 'EVO Shift 4G'],\n 'Sprint APC715CKT': ['HTC', 'EVO Design 4G'],\n 'A3380': ['HTC', 'Wildfire'],\n 'A6277': ['HTC', 'Hero'],\n 'a7272': ['HTC', 'Desire Z'],\n 'A7272+(HTC DesireZ)': ['HTC', 'Desire Z'],\n 'S31HT': ['HTC', 'Aria'],\n 'S710d': ['HTC', 'Droid Incredible 2'],\n 'S710D': ['HTC', 'Droid Incredible 2'],\n 'X06HT': ['HTC', 'Desire'],\n '001HT': ['HTC', 'Desire HD'],\n 'X325a': ['HTC', 'One X'],\n 'Z520m': ['HTC', 'One S'],\n 'Z710': ['HTC', 'Sensation'],\n 'Z710e': ['HTC', 'Sensation'],\n 'T9199h': ['HTC', 'T9199h'],\n 'HTC S610d': ['HTC', 'S610d'],\n 'ADR6200': ['HTC', 'Droid Eris'],\n 'ADR6300': ['HTC', 'Droid Incredible'],\n 'ADR6325VW': ['HTC', 'Merge'],\n 'ADR6330VW': ['HTC', 'Rhyme'],\n 'ADR6350': ['HTC', 'Droid Incredible 2'],\n 'ADR6400L': ['HTC', 'Thunderbolt 4G'],\n 'ADR6400L 4G': ['HTC', 'Thunderbolt 4G'],\n 'ADR6410LVW 4G': ['HTC', 'Fireball'],\n 'ADR6425LVW': ['HTC', 'Rezound'],\n 'ADR6425LVW 4G': ['HTC', 'Rezound'],\n 'Coquettish Red': ['HTC', 'Rezound'],\n 'PB99400': ['HTC', 'Droid Incredible'],\n 'pcdadr6350': ['HTC', 'Droid Incredible 2'],\n 'PC36100': ['HTC', 'EVO 4G'],\n 'PG06100': ['HTC', 'EVO Shift 4G'],\n 'PG41200': ['HTC', 'EVO View 4G', 'tablet'],\n 'PG86100': ['HTC', 'EVO 3D'],\n 'PG8610000': ['HTC', 'EVO 3D'],\n 'PH44100': ['HTC', 'EVO Design 4G'],\n 'PJ83100': ['HTC', 'One X'],\n 'ISW11HT': ['HTC', 'EVO 4G'],\n 'ISW12HT': ['HTC', 'EVO 3D'],\n 'ISW13HT': ['HTC', 'J'],\n 'USCCADR6275US Carrier ID 45': ['HTC', 'Desire'],\n 'USCCADR6285US': ['HTC', 'Hero S'],\n 'USCCADR6325US Carrier ID 45': ['HTC', 'Merge'],\n 'MediaPad': ['Huawei', 'MediaPad', 'tablet'],\n 'Huawei MediaPad': ['Huawei', 'MediaPad', 'tablet'],\n 'HUAWEI MediaPad': ['Huawei', 'MediaPad', 'tablet'],\n 'Huawei S7-312u': ['Huawei', 'MediaPad', 'tablet'],\n 'MediaPad 10 FHD': ['Huawei', 'MediaPad', 'tablet'],\n 'Huawei C8500': ['Huawei', 'C8500'],\n 'Huawei C8500S': ['Huawei', 'C8500'],\n 'Huawei C8600': ['Huawei', 'C8600'],\n 'Huawei C8650': ['Huawei', 'C8650'],\n 'Huawei C8650+': ['Huawei', 'C8650'],\n 'Huawei C8800': ['Huawei', 'IDEOS X5'],\n 'Huawei C8810': ['Huawei', 'Ascend G300'],\n 'Huawei C8812': ['Huawei', 'Ascend C8812'],\n 'Huawei C8812E': ['Huawei', 'Ascend C8812'],\n 'Huawei C8825D': ['Huawei', 'Ascend C8825D'],\n 'Huawei C8860E': ['Huawei', 'Honor'],\n 'Huawei M835': ['Huawei', 'M835'],\n 'Huawei M860': ['Huawei', 'Ascend'],\n 'Huawei M921': ['Huawei', 'M921'],\n 'Huawei S8520': ['Huawei', 'S8520'],\n 'Huawei S8600': ['Huawei', 'S8600'],\n 'Huawei T8300': ['Huawei', 'T8300'],\n 'Huawei T8600': ['Huawei', 'T8600'],\n 'Huawei T8830': ['Huawei', 'T8830'],\n 'T8830': ['Huawei', 'T8830'],\n 'T8620': ['Huawei', 'T8620'],\n 'Huawei T8828': ['Huawei', 'T8828'],\n 'Huawei U8220': ['Huawei', 'U8220'],\n 'Huawei u8500': ['Huawei', 'IDEOS X2'],\n 'Huawei U8815': ['Huawei', 'Ascend G300'],\n 'Huawei U8825D': ['Huawei', 'Ascend G330D'],\n 'Huawei U8850': ['Huawei', 'Vision'],\n 'Huawei U8652': ['Huawei', 'Sonic'],\n 'Huawei U8800-51': ['Huawei', 'IDEOS X5'],\n 'Huawei U8818': ['Huawei', 'Ascend G300'],\n 'Huawei U9000': ['Huawei', 'Ascend X'],\n 'Huawei IDEOS U8500': ['Huawei', 'IDEOS X2'],\n 'Huawei IDEOS U8650': ['Huawei', 'Sonic'],\n 'Huawei IDEOS X3': ['Huawei', 'IDEOS X3'],\n 'Huawei Ideos X5': ['Huawei', 'IDEOS X5'],\n 'Huawei Ideos X5 1.12.9(ret4rt)': ['Huawei', 'IDEOS X5'],\n 'Huawei SONIC': ['Huawei', 'Sonic'],\n 'Huawei 8100-9': ['Huawei', 'U8100'],\n 'FUSIONideos': ['Huawei', 'IDEOS'],\n 'Gnappo Ideos': ['Huawei', 'IDEOS'],\n 'Ideos': ['Huawei', 'IDEOS'],\n 'IDEOS X5': ['Huawei', 'IDEOS X5'],\n 'Ideos S7': ['Huawei', 'IDEOS S7', 'tablet'],\n 'IDEOS S7': ['Huawei', 'IDEOS S7', 'tablet'],\n 'IDEOS S7 Slim': ['Huawei', 'IDEOS S7', 'tablet'],\n 'Huawei S7': ['Huawei', 'IDEOS S7', 'tablet'],\n 'SONIC': ['Huawei', 'Sonic'],\n 'Kyivstar Aqua': ['Huawei', 'Sonic'],\n 'Lucky Ultra Sonic U8650': ['Huawei', 'Sonic'],\n 'Turkcell T20': ['Huawei', 'Sonic'],\n 'MTC 950': ['Huawei', 'U8160'],\n 'MTC 955': ['Huawei', 'Sonic'],\n 'MTC Evo': ['Huawei', 'C8500'],\n 'MTC Android': ['Huawei', 'U8110'],\n 'S31HW': ['Huawei', 'Pocket WiFi S'],\n 'S41HW': ['Huawei', 'Pocket WiFi S II'],\n '007HW': ['Huawei', 'Vision'],\n 'UM840': ['Huawei', 'Evolution'],\n 'M860': ['Huawei', 'Ascend'],\n 'M865': ['Huawei', 'Ascend II'],\n 'M886': ['Huawei', 'Glory'],\n 'C8150': ['Huawei', 'IDEOS'],\n 'c8500': ['Huawei', 'C8500'],\n 'C8500': ['Huawei', 'C8500'],\n 'C8500S': ['Huawei', 'C8500'],\n 'C8600': ['Huawei', 'C8600'],\n 'c8650': ['Huawei', 'C8650'],\n 'C8650': ['Huawei', 'C8650'],\n 'c8800': ['Huawei', 'C8800'],\n 'C8800': ['Huawei', 'C8800'],\n 'c8810': ['Huawei', 'Ascend G300C'],\n 'C8812': ['Huawei', 'Ascend C8812'],\n 'S8600': ['Huawei', 'S8600'],\n 'U8100': ['Huawei', 'U8100'],\n 'U8110': ['Huawei', 'U8110'],\n 'u8120': ['Huawei', 'U8120'],\n 'U8120': ['Huawei', 'U8120'],\n 'U8180': ['Huawei', 'IDEOS X1'],\n 'U8220': ['Huawei', 'Pulse'],\n 'U8300': ['Huawei', 'U8300'],\n 'U8350': ['Huawei', 'Boulder'],\n 'U8150': ['Huawei', 'IDEOS'],\n 'U8160': ['Huawei', 'U8160'],\n 'U8500': ['Huawei', 'IDEOS X2'],\n 'U8500 HiQQ': ['Huawei', 'U8500 HiQQ Edition'],\n 'U8510': ['Huawei', 'IDEOS X3'],\n 'u8650': ['Huawei', 'Sonic'],\n 'U8650': ['Huawei', 'Sonic'],\n 'U8650-1': ['Huawei', 'Sonic'],\n 'U8660': ['Huawei', 'Sonic'],\n 'u8800': ['Huawei', 'IDEOS X5'],\n 'U8800': ['Huawei', 'IDEOS X5'],\n 'U8800+': ['Huawei', 'IDEOS X5'],\n 'U8800X': ['Huawei', 'IDEOS X5'],\n 'U8800pro': ['Huawei', 'IDEOS X5 Pro'],\n 'U8800PRO': ['Huawei', 'IDEOS X5 Pro'],\n 'U8800Pro': ['Huawei', 'IDEOS X5 Pro'],\n 'u8800pro': ['Huawei', 'IDEOS X5 Pro'],\n 'U8800 Pro': ['Huawei', 'IDEOS X5 Pro'],\n 'U8818': ['Huawei', 'Ascend G300'],\n 'U8850': ['Huawei', 'Vision'],\n 'u8860': ['Huawei', 'Honor'],\n 'U8860': ['Huawei', 'Honor'],\n 'U9000': ['Huawei', 'Ascend X'],\n 'U9200': ['Huawei', 'Ascend P1'],\n 'U9200-1': ['Huawei', 'Ascend P1'],\n 'U9500': ['Huawei', 'Ascend D1'],\n 'U9501L': ['Huawei', 'Ascend D LTE'],\n 'U9510': ['Huawei', 'Ascend D quad'],\n 'U9510E': ['Huawei', 'Ascend D quad'],\n 'Comet': ['Huawei', 'Comet'],\n 'GS02': ['Huawei', 'Honor'],\n 'GS03': ['Huawei', 'Ascend P1'],\n 'DroniX-0.5': ['Huawei', 'U8180'],\n 'MTS-SP101': ['Huawei', 'C8511'],\n 'TSP21': ['Huawei', 'U8110'],\n 'HYUNDAI H6': ['Hyundai', 'Storm H6'],\n 'iBall Slide i7011': ['iBall', 'Slide i7011'],\n 'NetTAB RUNE': ['IconBit', 'NetTab Rune', 'tablet'],\n 'D70W': ['Icoo', 'D70W', 'tablet'],\n 'D80': ['Icoo', 'D80', 'tablet'],\n 'INFOBAR A01': ['iida', 'INFOBAR A01'],\n 'M009F': ['Infotmic', 'M009F'],\n 'AZ210A': ['Intel', 'AZ210A'],\n 'AZ210B': ['Intel', 'AZ210B'],\n 'AZ510': ['Intel', 'AZ510'],\n 'greenridge': ['Intel', 'Green Ridge', 'tablet'],\n 'INQ Cloud Touch': ['INQ', 'Cloud Touch'],\n 'ILT-MX100': ['iRiver', 'Tab', 'tablet'],\n 'IVIO_DE38': ['Ivio', 'DE38'],\n 'JY-G2': ['Jiayu', 'G2'],\n 'JXD S601WIFI': ['JXD', 'S601 WIFI', 'media'],\n 'A2': ['KakaTech', 'A2'],\n 'D91': ['KK', 'D91', 'tablet'],\n 'K080': ['Kobo', 'K080', 'ereader'],\n 'A106': ['koobee', 'A160'],\n 'KPT A9': ['KPT', 'A9'],\n 'EV-S100': ['Kttech', 'Take EV-S100'],\n 'KM-S120': ['Kttech', 'Take 2 KM-S120'],\n 'KM-S200': ['TAKE', 'Janus KM-S200'],\n 'KM-S220': ['Kttech', 'Take Tachy KM-S220'],\n 'Kyobo mirasol eReader': ['Kyobo', 'eReader', 'ereader'],\n 'ISW11K': ['Kyocera', 'Digno'],\n 'JC-KSP8000': ['Kyocera', 'Echo'],\n 'KSP8000': ['Kyocera', 'Echo'],\n 'Zio': ['Kyocera', 'Zio'],\n 'C5155': ['Kyocera', 'C5155'],\n 'C5170': ['Kyocera', 'C5170'],\n 'M9300': ['Kyocera', 'M9300'],\n 'E800': ['K-Touch', 'E800'],\n 'W606': ['K-Touch', 'W606'],\n 'K-Touch T619': ['K-Touch', 'T619'],\n 'K-Touch W619': ['K-Touch', 'W619'],\n 'K-Touch W650': ['K-Touch', 'W650'],\n 'W700': ['K-Touch', 'W700'],\n 'W800': ['K-Touch', 'W800'],\n 'W806': ['K-Touch', 'W806'],\n 'W808': ['K-Touch', 'W808'],\n 'W810': ['K-Touch', 'W810'],\n 'X900': ['Lava', 'XOLO X900'],\n 'Lenovo A798t': ['Lenovo', 'A798t'],\n 'LENOVO-Lenovo-A288t': ['Lenovo', 'LePhone A288'],\n 'ThinkPad Tablet': ['Lenovo', 'ThinkPad Tablet', 'tablet'],\n 'K1': ['Lenovo', 'IdeaPad K1', 'tablet'],\n 'Ideapad S10-3T': ['Lenovo', 'IdeaPad S10-3T', 'tablet'],\n 'S2005A-H': ['Lenovo', 'S2005A'],\n 'IdeaTab S2007A-D': ['Lenovo', 'IdeaTab S2007A', 'tablet'],\n 'IdeaTabV2007A': ['Lenovo', 'IdeaTab V2007A', 'tablet'],\n 'IdeaTabV2007A-D-I': ['Lenovo', 'IdeaTab V2007A', 'tablet'],\n 'IdeaTabV2010A': ['Lenovo', 'IdeaTab V2010A', 'tablet'],\n 'IdeaTab A2107A-H': ['Lenovo', 'IdeaTab V2107A', 'tablet'],\n 'A1 07': ['Lenovo', 'LePad', 'tablet'],\n 'lepad 001b': ['Lenovo', 'LePad', 'tablet'],\n 'lepad 001n': ['Lenovo', 'LePad', 'tablet'],\n '3GC101': ['Lenovo', 'LePhone 3GC101'],\n 'Lenovo 3GC101': ['Lenovo', 'LePhone 3GC101'],\n '3GW100': ['Lenovo', 'LePhone 3GW100'],\n 'Lenovo 3GW100': ['Lenovo', 'LePhone 3GW100'],\n '3GW101': ['Lenovo', 'LePhone 3GW101'],\n 'Lenovo 3GW101': ['Lenovo', 'LePhone 3GW101'],\n 'Lephone 3GW101': ['Lenovo', 'LePhone 3GW101'],\n 'Lenovo A1-32AB0': ['Lenovo', 'LePhone A1-32AB0'],\n 'Lenovo S1-37AH0': ['Lenovo', 'LePhone S1-37AH0'],\n 'S1 37AHO': ['Lenovo', 'LePhone S1-37AH0'],\n 'Lenovo S2-38AH0': ['Lenovo', 'LePhone S2-38AH0'],\n 'Lenovo S2-38AT0': ['Lenovo', 'LePhone S2-38AT0'],\n 'Lenovo A288t': ['Lenovo', 'LePhone A288'],\n 'Lenovo A366t': ['Lenovo', 'LePhone A366'],\n 'Lenovo A390e': ['Lenovo', 'LePhone A390'],\n 'Lenovo A500': ['Lenovo', 'LePhone A500'],\n 'Lenovo A520': ['Lenovo', 'LePhone A520'],\n 'Lenovo A560e': ['Lenovo', 'A560'],\n 'Lenovo A668t': ['Lenovo', 'LePhone A668'],\n 'Lenovo A698t': ['Lenovo', 'LePhone A698'],\n 'Lenovo A750': ['Lenovo', 'LePhone A750'],\n 'Lenovo A780': ['Lenovo', 'LePhone A780'],\n 'Lenovo A789': ['Lenovo', 'LePhone A789'],\n 'Lenovo A790e': ['Lenovo', 'LePhone A790'],\n 'Lenovo P70': ['Lenovo', 'LePhone P70'],\n 'Lenovo P700': ['Lenovo', 'LePhone P700'],\n 'Lenovo S850e': ['Lenovo', 'S850'],\n 'Lenovo S880': ['Lenovo', 'S880'],\n 'Lenovo K860': ['Lenovo', 'K860'],\n 'A30t': ['Lenovo', 'A30t'],\n 'Lenovo A60': ['Lenovo', 'A60'],\n 'Lenovo A65': ['Lenovo', 'A65'],\n 'Lenovo A66t': ['Lenovo', 'A66t'],\n 'Lenovo A68e': ['Lenovo', 'A68e'],\n 'Lenovo K800': ['Lenovo', 'K800'],\n 'IDEA TV T100': ['Lenovo', 'IDEA TV', 'television'],\n 'IDEA TV K91': ['Lenovo', 'IDEA TV', 'television'],\n 'TC970': ['Le Pan', 'TC970', 'tablet'],\n 'LePanII': ['Le Pan', 'II', 'tablet'],\n 'LG-C555': ['LG', 'Optimus Chat'],\n 'LG-C555-parrot': ['LG', 'Optimus Chat'],\n 'LG-C660h': ['LG', 'Optimus Pro'],\n 'LG-C729': ['LG', 'DoublePlay'],\n 'LG-C800G': ['LG', 'Eclypse'],\n 'LG-CX670': ['LG', 'Optimus 3G'],\n 'LG-E400': ['LG', 'Optimus L3'],\n 'LG-E400f': ['LG', 'Optimus L3'],\n 'LG-E510': ['LG', 'Optimus Hub'],\n 'LG-E510f': ['LG', 'Optimus Hub'],\n 'LG-E510g': ['LG', 'Optimus Hub'],\n 'LG-E610': ['LG', 'Optimus L5'],\n 'LG-E612': ['LG', 'Optimus L5'],\n 'LG-E612g': ['LG', 'Optimus L5'],\n 'LG-E615F': ['LG', 'E615'],\n 'LG-E617G': ['LG', 'E617'],\n 'LG-E720': ['LG', 'Optimus Chic'],\n 'LG-E720b': ['LG', 'Optimus Chic'],\n 'LG-E730': ['LG', 'Optimus Sol'],\n 'LG-E970': ['LG', 'Shine'],\n 'LG-F100L': ['LG', 'Optimus Vu'],\n 'LG-F100S': ['LG', 'Optimus Vu'],\n 'LG-F120K': ['LG', 'Optimus LTE Tag'],\n 'LG-F120L': ['LG', 'Optimus LTE Tag'],\n 'LG-F120S': ['LG', 'Optimus LTE Tag'],\n 'LG-F160K': ['LG', 'Optimus LTE II'],\n 'LG-F160L': ['LG', 'Optimus LTE II'],\n 'LG-F160S': ['LG', 'Optimus LTE II'],\n 'LG-F180L': ['LG', 'F180L'],\n 'LG-GT540': ['LG', 'Optimus'],\n 'LG-GT540f': ['LG', 'Optimus'],\n 'LG-GT540 Swift': ['LG', 'Optimus'],\n 'LG-GW620': ['LG', 'GW620'],\n 'LG-KH5200': ['LG', 'Andro-1'],\n 'LG-KU3700': ['LG', 'Optimus One'],\n 'LG-KU5400': ['LG', 'PRADA 3.0'],\n 'LG-KU5900': ['LG', 'Optimus Black'],\n 'LG-L40G': ['LG', 'L40G'],\n 'LG-LG855': ['LG', 'Marquee'],\n 'LG-LS670': ['LG', 'Optimus S'],\n 'LG-LS696': ['LG', 'Optimus Elite'],\n 'LG-LS840': ['LG', 'Viper 4G'],\n 'LG-LS855': ['LG', 'Marquee'],\n 'LG-LS860': ['LG', '\\'Cayenne\\''],\n 'LG-LS970': ['LG', '\\'Eclipse\\''],\n 'LG-LU3000': ['LG', 'Optimus Mach'],\n 'LG-LU3100': ['LG', 'Optimus Chic'],\n 'LG-LU3700': ['LG', 'Optimus One'],\n 'LG-LU5400': ['LG', 'PRADA 3.0'],\n 'LG-LU6200': ['LG', 'Optimus Q2'],\n 'LG-lu6200': ['LG', 'Optimus Q2'],\n 'LG-LU6500': ['LG', 'Optimus Note'],\n 'LG-LU6800': ['LG', 'Optimus Big'],\n 'LG-LU8300': ['LG', 'Optimus Pad LTE'],\n 'LG-LW690': ['LG', 'Optimus C'],\n 'LG-LW770': ['LG', 'LW770'],\n 'LG-MS690': ['LG', 'Optimus M'],\n 'LG-MS770': ['LG', 'MS770'],\n 'LG-MS840': ['LG', 'Connect 4G'],\n 'LG-MS910': ['LG', 'Esteem'],\n 'LG-MS695': ['LG', 'Optimus M+'],\n 'LG P350': ['LG', 'Optimus Me'],\n 'LG-P350': ['LG', 'Optimus Me'],\n 'LG-P350f': ['LG', 'Optimus Me'],\n 'LG-P350g': ['LG', 'Optimus Me'],\n 'LG-P355': ['LG', 'P355'],\n 'LG-P500': ['LG', 'Optimus One'],\n 'LG-P500h': ['LG', 'Optimus One'],\n 'LG-P500h-parrot': ['LG', 'Optimus One'],\n 'LG-P503': ['LG', 'Optimus One'],\n 'LG-P504': ['LG', 'Optimus One'],\n 'LG-P505': ['LG', 'Phoenix'],\n 'LG-P505R': ['LG', 'Phoenix'],\n 'LG-P506': ['LG', 'Thrive'],\n 'LG-P509': ['LG', 'Optimus T'],\n 'LG-P690': ['LG', 'Optimus Net'],\n 'LG-P693': ['LG', 'P693'],\n 'LG-P698': ['LG', 'Optimus Net'],\n 'LG-P698f': ['LG', 'Optimus Net'],\n 'LG-P700': ['LG', 'Optimus L7'],\n 'LG-P705': ['LG', 'Optimus L7'],\n 'LG-P705f': ['LG', 'Optimus L7'],\n 'LG-P705g': ['LG', 'Optimus L7'],\n 'LG-P708g': ['LG', 'P708'],\n 'LG-P720': ['LG', 'Optimus Chic'],\n 'LG-P720h': ['LG', 'Optimus Chic'],\n 'LG-P725': ['LG', 'Optimus 3D Max'],\n 'LG-P760': ['LG', 'P760'],\n 'LG-P769': ['LG', 'P769'],\n 'LG-P860': ['LG', 'P860'],\n 'LG-P870': ['LG', 'P870'],\n 'LG-P870F': ['LG', 'P870'],\n 'LG-P880': ['LG', 'X3'],\n 'LG-P880g': ['LG', 'X3'],\n 'LG-P895': ['LG', 'P895'],\n 'LG-P920': ['LG', 'Optimus 3D'],\n 'LG-P920h': ['LG', 'Optimus 3D'],\n 'LG-P925': ['LG', 'Thrill'],\n 'LG-P925g': ['LG', 'Thrill'],\n 'LG-P930': ['LG', 'Nitro HD'],\n 'LG-P936': ['LG', 'Optimus LTE'],\n 'LG-P940': ['LG', 'PRADA 3.0'],\n 'LG-P970': ['LG', 'Optimus Black'],\n 'LG-P970h': ['LG', 'Optimus Black'],\n 'LG-P990': ['LG', 'Optimus 2X Speed'],\n 'LG-P990h': ['LG', 'Optimus 2X Speed'],\n 'LG-P990hN': ['LG', 'Optimus 2X Speed'],\n 'LG-P990H': ['LG', 'Optimus 2X Speed'],\n 'LG-P993': ['LG', 'Optimus 2X'],\n 'LG-SU540': ['LG', 'PRADA 3.0'],\n 'LG-SU640': ['LG', 'Optimus LTE'],\n 'LG-SU660': ['LG', 'Optimus 2X'],\n 'LG-SU760': ['LG', 'Optimus 3D'],\n 'LG-SU760-Kust': ['LG', 'Optimus 3D'],\n 'LG-SU870': ['LG', 'Optimus 3D Cube'],\n 'LG-SU880': ['LG', 'Optimus EX'],\n 'LG-US670': ['LG', 'Optimus U'],\n 'LG-US730': ['LG', 'US730'],\n 'LG-V900': ['LG', 'Optimus Pad', 'tablet'],\n 'LG-V905R': ['LG', 'Optimus G-Slate', 'tablet'],\n 'LG-V909': ['LG', 'Optimus G-Slate', 'tablet'],\n 'LG-VM670': ['LG', 'Optimus V'],\n 'LG-VM696': ['LG', 'Optimus Elite'],\n 'LG-VM701': ['LG', 'Optimus Slider'],\n 'LG-VS660': ['LG', 'Vortex'],\n 'LG-VS700': ['LG', 'Enlighten'],\n 'LG-VS740': ['LG', 'Ally'],\n 'LG-VS840': ['LG', 'Connect 4G'],\n 'LG-VS910': ['LG', 'Revolution'],\n 'lgp-970': ['LG', 'Optimus Black'],\n 'E900': ['LG', 'Optimus 7'],\n 'GT540': ['LG', 'Optimus GT540'],\n 'GW620': ['LG', 'GW620'],\n 'KU9500': ['LG', 'Optimus Z'],\n 'LGC660': ['LG', 'Optimus Pro'],\n 'LGL45C': ['LG', 'Optimus Net'],\n 'LGL55C': ['LG', 'Optimus Q'],\n 'LU2300': ['LG', 'Optimus Q'],\n 'LS670': ['LG', 'Optimus S'],\n 'P940': ['LG', 'PRADA 3.0'],\n 'P990': ['LG', 'Optimus 2X Speed'],\n 'USCC-US730': ['LG', 'US730'],\n 'USCC-US760': ['LG', 'Genesis'],\n 'VM670': ['LG', 'Optimus V'],\n 'VS840 4G': ['LG', 'Connect 4G'],\n 'VS900-4G': ['LG', 'VS900'],\n 'VS910 4G': ['LG', 'Revolution 4G'],\n 'VS920 4G': ['LG', 'Spectrum 4G'],\n 'VS930 4G': ['LG', 'VS930'],\n 'VS950 4G': ['LG', 'VS950'],\n 'L-01D': ['LG', 'Optimus LTE'],\n 'L-02D': ['LG', 'PRADA phone'],\n 'L-04C': ['LG', 'Optimus Chat'],\n 'L-05D': ['LG', 'Optimus it'],\n 'L-06C': ['LG', 'Optimus Pad', 'tablet'],\n 'L-06D': ['LG', 'Optimus Vu'],\n 'L-07C': ['LG', 'Optimus Bright'],\n 'LG-Eve': ['LG', 'Eve'],\n 'LG-Optimus One P500': ['LG', 'Optimus One'],\n 'LG-Optimus 2X': ['LG', 'Optimus 2X'],\n 'LG-GT540 Optimus': ['LG', 'Optimus'],\n 'LG-Optimus Black': ['LG', 'Optimus Black'],\n 'Ally': ['LG', 'Ally'],\n 'Optimus': ['LG', 'Optimus'],\n 'Optimus Me': ['LG', 'Optimus Me'],\n 'optimus me p350': ['LG', 'Optimus Me'],\n 'Optimus 2X': ['LG', 'Optimus 2X'],\n 'Optimus 2x': ['LG', 'Optimus 2X'],\n 'IS11LG': ['LG', 'Optimus X'],\n 'Vortex': ['LG', 'Vortex'],\n 'LDK-ICK v1.4': ['LG', 'Esteem'],\n 'T6': ['Malata', 'Zpad T6', 'tablet'],\n 'Malata SMBA1002': ['Malata', 'Tablet SMB-A1002', 'tablet'],\n 'STM712HCZ': ['Mediacom', 'SmartPad 712c', 'tablet'],\n 'STM803HC': ['Mediacom', 'SmartPad 810c', 'tablet'],\n 'Mediacom 810C': ['Mediacom', 'SmartPad 810c', 'tablet'],\n 'Smartpad810c': ['Mediacom', 'SmartPad 810c', 'tablet'],\n 'SmartPad810c': ['Mediacom', 'SmartPad 810c', 'tablet'],\n 'MP810C': ['Mediacom', 'SmartPad 810c', 'tablet'],\n 'MP907C': ['Mediacom', 'SmartPad 907c', 'tablet'],\n 'MTK6516': ['Mediatek', 'MTK6516'],\n 'LIFETAB S9512': ['Medion', 'Lifetab S9512', 'tablet'],\n 'LIFETAB P9514': ['Medion', 'Lifetab P9514', 'tablet'],\n 'MD LIFETAB P9516': ['Medion', 'Lifetab P9516', 'tablet'],\n 'MEDION LIFE P4310': ['Medion', 'Life P4310'],\n 'M8': ['Meizu', 'M8'],\n 'M9': ['Meizu', 'M9'],\n 'M040': ['Meizu', 'M040'],\n 'M9-unlocked': ['Meizu', 'M9'],\n 'meizu m9': ['Meizu', 'M9'],\n 'MEIZU M9': ['Meizu', 'M9'],\n 'MEIZU MX': ['Meizu', 'MX'],\n 'M030': ['Meizu', 'MX M030'],\n 'M031': ['Meizu', 'MX M031'],\n 'M032': ['Meizu', 'MX M032'],\n 'Slidepad': ['Memup', 'Slidepad', 'tablet'],\n 'A45': ['Micromax', 'A45 Punk'],\n 'Micromax A50': ['Micromax', 'A50 Ninja'],\n 'Micromax A60': ['Micromax', 'Andro A60'],\n 'Micromax A70': ['Micromax', 'Andro A70'],\n 'P300(Funbook)': ['Micromax', 'Funbook P300', 'tablet'],\n 'AT735': ['Moinstone', 'AT735', 'tablet'],\n 'A853': ['Motorola', 'Milestone'],\n 'A953': ['Motorola', 'Milestone 2'],\n 'A1680': ['Motorola', 'MOTO A1680'],\n 'ET1': ['Motorola', 'ET1 Enterprise Tablet', 'tablet'],\n 'MB200': ['Motorola', 'CLIQ'],\n 'MB300': ['Motorola', 'BACKFLIP'],\n 'MB501': ['Motorola', 'CLIQ XT'],\n 'MB502': ['Motorola', 'CHARM'],\n 'MB511': ['Motorola', 'FLIPOUT'],\n 'MB520': ['Motorola', 'BRAVO'],\n 'MB525': ['Motorola', 'DEFY'],\n 'MB525+': ['Motorola', 'DEFY'],\n 'MB525 for me': ['Motorola', 'DEFY'],\n 'MB526': ['Motorola', 'DEFY+'],\n 'MB611': ['Motorola', 'CLIQ 2'],\n 'MB612': ['Motorola', 'XPRT'],\n 'MB632': ['Motorola', 'PRO+'],\n 'MB855': ['Motorola', 'PHOTON 4G'],\n 'MB860': ['Motorola', 'ATRIX'],\n 'MB861': ['Motorola', 'ATRIX'],\n 'mb861': ['Motorola', 'ATRIX'],\n 'MB865': ['Motorola', 'ATRIX 2'],\n 'MB870': ['Motorola', 'Droid X2'],\n 'MB886': ['Motorola', 'DINARA'],\n 'ME501': ['Motorola', 'CLIQ XT'],\n 'ME511': ['Motorola', 'FLIPOUT'],\n 'me525': ['Motorola', 'MOTO ME525'],\n 'Me525': ['Motorola', 'MOTO ME525'],\n 'ME525': ['Motorola', 'MOTO ME525'],\n 'ME525+': ['Motorola', 'MOTO ME525'],\n 'ME600': ['Motorola', 'BACKFLIP'],\n 'ME632': ['Motorola', 'PRO+'],\n 'ME722': ['Motorola', 'Milestone 2'],\n 'ME811': ['Motorola', 'Droid X'],\n 'ME860': ['Motorola', 'ATRIX'],\n 'ME863': ['Motorola', 'Milestone 3'],\n 'ME865': ['Motorola', 'ATRIX 2'],\n 'MT620': ['Motorola', 'MOTO MT620'],\n 'MT620t': ['Motorola', 'MOTO MT620'],\n 'MT716': ['Motorola', 'MOTO MT716'],\n 'MT810': ['Motorola', 'MOTO MT810'],\n 'MT870': ['Motorola', 'MOTO MT870'],\n 'MT917': ['Motorola', 'MT917'],\n 'MZ505': ['Motorola', 'XOOM Family Edition', 'tablet'],\n 'MZ600': ['Motorola', 'XOOM 4G LTE', 'tablet'],\n 'MZ601': ['Motorola', 'XOOM 3G', 'tablet'],\n 'MZ602': ['Motorola', 'XOOM 4G LTE', 'tablet'],\n 'MZ603': ['Motorola', 'XOOM 3G', 'tablet'],\n 'MZ604': ['Motorola', 'XOOM WiFi', 'tablet'],\n 'MZ605': ['Motorola', 'XOOM 3G', 'tablet'],\n 'MZ606': ['Motorola', 'XOOM WiFi', 'tablet'],\n 'MZ607': ['Motorola', 'XOOM 2 WiFi Media Edition', 'tablet'],\n 'MZ609': ['Motorola', 'Droid XYBOARD 8.2', 'tablet'],\n 'MZ609 4G': ['Motorola', 'Droid XYBOARD 8.2', 'tablet'],\n 'MZ615': ['Motorola', 'XOOM 2 WiFi', 'tablet'],\n 'MZ617': ['Motorola', 'Droid XYBOARD 10.1', 'tablet'],\n 'MZ617 4G': ['Motorola', 'Droid XYBOARD 10.1', 'tablet'],\n 'WX435': ['Motorola', 'TRIUMPH WX435'],\n 'WX445': ['Motorola', 'CITRUS WX445'],\n 'XT300': ['Motorola', 'SPICE'],\n 'XT301': ['Motorola', 'MOTO XT301'],\n 'XT311': ['Motorola', 'FIRE'],\n 'XT316': ['Motorola', 'MOTO XT316'],\n 'XT319': ['Motorola', 'MOTO XT319'],\n 'XT390': ['Motorola', 'MOTO XT390'],\n 'XT320': ['Motorola', 'DEFY Mini'],\n 'XT321': ['Motorola', 'DEFY Mini'],\n 'XT500': ['Motorola', 'MOTO XT500'],\n 'xt-500': ['Motorola', 'MOTO XT500'],\n 'XT502': ['Motorola', 'QUENCH XT5'],\n 'XT530': ['Motorola', 'FIRE XT'],\n 'XT531': ['Motorola', 'FIRE XT'],\n 'XT532': ['Motorola', 'XT532'],\n 'XT535': ['Motorola', 'DEFY'],\n 'XT550': ['Motorola', 'XT550'],\n 'XT556': ['Motorola', 'XT556'],\n 'XT603': ['Motorola', 'ADMIRAL'],\n 'XT610': ['Motorola', 'Droid Pro'],\n 'XT615': ['Motorola', 'MOTO XT615'],\n 'XT626': ['Motorola', 'MOTO XT626'],\n 'XT681': ['Motorola', 'MOTO XT681'],\n 'XT682': ['Motorola', 'Droid 3'],\n 'XT685': ['Motorola', 'MOTO XT685'],\n 'XT687': ['Motorola', 'ATRIX TV'],\n 'XT701': ['Motorola', 'XT701'],\n 'XT702': ['Motorola', 'MOTO XT702'],\n 'XT711': ['Motorola', 'MOTO XT711'],\n 'XT720': ['Motorola', 'Milestone'],\n 'XT875': ['Motorola', 'Droid Bionic'],\n 'XT800': ['Motorola', 'MOTO XT800'],\n 'XT800+': ['Motorola', 'MOTO XT800'],\n 'XT800W': ['Motorola', 'MOTO Glam'],\n 'XT806': ['Motorola', 'MOTO XT806'],\n 'XT860': ['Motorola', 'Milestone 3'],\n 'XT862': ['Motorola', 'Droid 3'],\n 'XT882': ['Motorola', 'MOTO XT882'],\n 'XT883': ['Motorola', 'Milestone 3'],\n 'XT889': ['Motorola', 'XT889'],\n 'XT897': ['Motorola', 'Droid 4'],\n 'XT901': ['Motorola', 'RAZR'],\n 'XT910': ['Motorola', 'RAZR'],\n 'XT910K': ['Motorola', 'RAZR'],\n 'XT910S': ['Motorola', 'RAZR'],\n 'XT910 4G': ['Motorola', 'RAZR'],\n 'XT912': ['Motorola', 'Droid RAZR'],\n 'XT923': ['Motorola', 'Droid RAZR HD'],\n 'XT925': ['Motorola', 'Droid RAZR HD'],\n 'XT926': ['Motorola', 'Droid RAZR'],\n 'XT926 4G': ['Motorola', 'Droid RAZR'],\n 'XT928': ['Motorola', 'XT928'],\n 'Atrix 2': ['Motorola', 'ATRIX 2'],\n 'Atrix 4g': ['Motorola', 'ATRIX 4G'],\n 'Atrix 4G': ['Motorola', 'ATRIX 4G'],\n 'Atrix 4G ME860': ['Motorola', 'ATRIX 4G'],\n 'CLIQ': ['Motorola', 'CLIQ'],\n 'CLIQ XT': ['Motorola', 'CLIQ XT'],\n 'CLIQ2': ['Motorola', 'CLIQ 2'],\n 'Corvair': ['Motorola', 'Corvair', 'tablet'],\n 'DEFY': ['Motorola', 'DEFY'],\n 'Defy+': ['Motorola', 'DEFY+'],\n 'Defy Plus': ['Motorola', 'DEFY+'],\n 'Devour': ['Motorola', 'Devour'],\n 'Dext': ['Motorola', 'Dext'],\n 'Droid': ['Motorola', 'Droid'],\n 'DROID': ['Motorola', 'Droid'],\n 'DROID2': ['Motorola', 'Droid 2'],\n 'DROID2 GLOBAL': ['Motorola', 'Droid 2'],\n 'DROID2 Global': ['Motorola', 'Droid 2'],\n 'Droid2Global': ['Motorola', 'Droid 2'],\n 'DROID 2': ['Motorola', 'Droid 2'],\n 'DROID3': ['Motorola', 'Droid 3'],\n 'DROID4': ['Motorola', 'Droid 4'],\n 'DROID4 4G': ['Motorola', 'Droid 4'],\n 'DROID Pro': ['Motorola', 'Droid Pro'],\n 'DROID BIONIC': ['Motorola', 'Droid Bionic'],\n 'DROID BIONIC 4G': ['Motorola', 'Droid Bionic'],\n 'DROID BIONIC XT875 4G': ['Motorola', 'Droid Bionic'],\n 'DROIDRAZR': ['Motorola', 'Droid RAZR'],\n 'Droid Razr': ['Motorola', 'Droid RAZR'],\n 'DROID RAZR': ['Motorola', 'Droid RAZR'],\n 'DROID RAZR 4G': ['Motorola', 'Droid RAZR'],\n 'DROID SPYDER': ['Motorola', 'Droid RAZR'],\n 'DROID RAZR HD': ['Motorola', 'Droid RAZR HD'],\n 'DROID RAZR HD 4G': ['Motorola', 'Droid RAZR HD'],\n 'DroidX': ['Motorola', 'Droid X'],\n 'DROIDX': ['Motorola', 'Droid X'],\n 'droid x': ['Motorola', 'Droid X'],\n 'Droid X': ['Motorola', 'Droid X'],\n 'DROID X': ['Motorola', 'Droid X'],\n 'DROID X2': ['Motorola', 'Droid X2'],\n 'Electrify': ['Motorola', 'Electrify'],\n 'Milestone XT720': ['Motorola', 'Milestone'],\n 'Milestone Xt720': ['Motorola', 'Milestone'],\n 'Milestone': ['Motorola', 'Milestone'],\n 'A853 Milestone': ['Motorola', 'Milestone'],\n 'Milestone X': ['Motorola', 'Milestone X'],\n 'Milestone X2': ['Motorola', 'Milestone X2'],\n 'MotoroiX': ['Motorola', 'Droid X'],\n 'Moto Backflip': ['Motorola', 'BACKFLIP'],\n 'RAZR': ['Motorola', 'RAZR'],\n 'Triumph': ['Motorola', 'TRIUMPH'],\n 'Opus One': ['Motorola', 'i1'],\n 'Photon': ['Motorola', 'PHOTON'],\n 'Photon 4G': ['Motorola', 'PHOTON 4G'],\n 'XOOM': ['Motorola', 'XOOM', 'tablet'],\n 'Xoom': ['Motorola', 'XOOM', 'tablet'],\n 'XOOM 2': ['Motorola', 'XOOM 2', 'tablet'],\n 'XOOM 2 ME': ['Motorola', 'XOOM 2', 'tablet'],\n 'XOOM MZ606': ['Motorola', 'XOOM WiFi', 'tablet'],\n 'ISW11M': ['Motorola', 'PHOTON'],\n 'IS12M': ['Motorola', 'RAZR'],\n 'MOTWX435KT': ['Motorola', 'TRIUMPH'],\n 'X3-Ice MIUI XT720 Memorila Classics': ['Motorola', 'Milestone'],\n 'NABI-A': ['Nabi', 'Kids tablet', 'tablet'],\n 'Newpad': ['Newsmy', 'Newpad', 'tablet'],\n 'Newpad-K97': ['Newsmy', 'Newpad K97', 'tablet'],\n 'Newpad P9': ['Newsmy', 'Newpad P9', 'tablet'],\n 'M-PAD N8': ['Newsmy', 'M-pad N8', 'tablet'],\n 'LT-NA7': ['NEC', 'LT-NA7'],\n 'N-01D': ['NEC', 'MEDIAS PP N-01D'],\n 'N-04C': ['NEC', 'MEDIAS N-04C'],\n 'N-04D': ['NEC', 'MEDIAS LTE N-04D'],\n 'N-05D': ['NEC', 'MEDIAS ES N-05D'],\n 'N-06C': ['NEC', 'MEDIAS WP N-06C'],\n 'N-06D': ['NEC', 'MEDIAS Tab N-06D', 'tablet'],\n 'N-07D': ['NEC', 'MEDIAS X N-07D'],\n '101N': ['NEC', 'MEDIAS CH Softbank 101N'],\n 'IS11N': ['NEC', 'MEDIAS BR IS11N'],\n 'Nexian NX-A890': ['Nexian', 'Journey'],\n 'NX-A891': ['Nexian', 'Ultra Journey'],\n 'M726HC': ['Nextbook', 'Premium 7', 'ereader'],\n 'NXM726HN': ['Nextbook', 'Premium 7', 'ereader'],\n 'NXM803HD': ['Nextbook', 'Premium 8', 'ereader'],\n 'DATAM803HC': ['Nextbook', 'Premium 8', 'ereader'],\n 'NXM901': ['Nextbook', 'Next 3', 'ereader'],\n 'NGM Vanity Smart': ['NGM', 'Vanity Smart'],\n 'Nokia N9': ['Nokia', 'N9'],\n 'Nokia N900': ['Nokia', 'N900'],\n 'Lumia800': ['Nokia', 'Lumia 800'],\n 'Lumia 900': ['Nokia', 'Lumia 900'],\n 'Notion Ink ADAM': ['Notion Ink', 'ADAM', 'tablet'],\n 'P4D SIRIUS': ['Nvsbl', 'P4D SIRIUS', 'tablet'],\n 'P4D Sirius': ['Nvsbl', 'P4D SIRIUS', 'tablet'],\n 'EFM710A': ['Oblio', 'Mint 7x', 'tablet'],\n 'ODYS-Xpress': ['Odys', 'Xpress', 'tablet'],\n 'Olivetti Olipad 100': ['Olivetti', 'Olipad 100', 'tablet'],\n 'OP110': ['Olivetti', 'Olipad 110', 'tablet'],\n 'ONDA MID': ['Onda', 'MID', 'tablet'],\n 'VX580A': ['Onda', 'VX580A', 'tablet'],\n 'VX610A': ['Onda', 'VX610A', 'tablet'],\n 'TQ150': ['Onda', 'TQ150'],\n 'N2T': ['ONN', 'N2T', 'tablet'],\n 'Renesas': ['Opad', 'Renesas', 'tablet'],\n 'renesas emev': ['Opad', 'Renesas', 'tablet'],\n 'X903': ['Oppo', 'Find Me X903'],\n 'X905': ['Oppo', 'Find 3 X905'],\n 'R805': ['Oppo', 'R805'],\n 'R801': ['Oppo', 'R801'],\n 'R811': ['Oppo', 'R811'],\n 'X909': ['Oppo', 'X909'],\n 'OPPOR801': ['Oppo', 'R801'],\n 'OPPOX905': ['Oppo', 'Find 3 X905'],\n 'OPPOX907': ['Oppo', 'Find 3 X907'],\n 'X907': ['Oppo', 'Find 3 X907'],\n 'X9015': ['Oppo', 'Find X9015'],\n 'OPPOX9017': ['Oppo', 'Finder X9017'],\n 'OPPOU701': ['Oppo', 'OPPOU701'],\n 'OPPOR807': ['Oppo', 'Real R807'],\n 'OPPOR805': ['Oppo', 'Real R805'],\n 'R807': ['Oppo', 'Real R807'],\n 'OPPOT703': ['Oppo', 'T703'],\n 'P-01D': ['Panasonic', 'P-01D'],\n 'P-02D': ['Panasonic', 'Lumix Phone'],\n 'P-04D': ['Panasonic', 'Eluga'],\n 'P-07C': ['Panasonic', 'P-07C'],\n 'dL1': ['Panasonic', 'Eluga dL1'],\n '101P': ['Panasonic', 'Lumix Phone'],\n 'JT-H580VT': ['Panasonic', 'BizPad 7', 'tablet'],\n 'JT-H581VT': ['Panasonic', 'BizPad 10', 'tablet'],\n 'FZ-A1A': ['Panasonic', 'Toughpad', 'tablet'],\n 'pandigital9hr': ['Pandigital', '9HR', 'tablet'],\n 'pandigital9hr2': ['Pandigital', '9HR2', 'tablet'],\n 'pandigitalopc1': ['Pandigital', 'OPC1', 'tablet'],\n 'pandigitalopp1': ['Pandigital', 'OPP1', 'tablet'],\n 'pandigitalp1hr': ['Pandigital', 'p1hr', 'tablet'],\n 'IM-A600S': ['Pantech', 'SIRIUS \\u00c3\\ufffd\\u00c2\\u00b1'],\n 'IM-A630K': ['Pantech', 'SKY Izar'],\n 'IM-A690L': ['Pantech', 'SKY'],\n 'IM-A690S': ['Pantech', 'SKY'],\n 'IM-A710K': ['Pantech', 'SKY Vega Xpress'],\n 'IM-A720L': ['Pantech', 'SKY Vega Xpress'],\n 'IM-A725L': ['Pantech', 'SKY Vega X+'],\n 'IM-A730s': ['Pantech', 'SKY Vega S'],\n 'IM-A730S': ['Pantech', 'SKY Vega S'],\n 'IM-A750K': ['Pantech', 'SKY Mirach A'],\n 'IM-A760S': ['Pantech', 'SKY Vega Racer'],\n 'IM-A770K': ['Pantech', 'SKY Vega Racer'],\n 'IM-A780L': ['Pantech', 'SKY Vega Racer'],\n 'IM-A800S': ['Pantech', 'SKY Vega LTE'],\n 'IM-A810K': ['Pantech', 'SKY Vega LTE M'],\n 'IM-A810S': ['Pantech', 'SKY Vega LTE M'],\n 'IM-A820L': ['Pantech', 'SKY Vega LTE EX'],\n 'IM-A830K': ['Pantech', 'SKY Vega Racer 2'],\n 'IM-A830L': ['Pantech', 'SKY Vega Racer 2'],\n 'IM-A830S': ['Pantech', 'SKY Vega Racer 2'],\n 'IM-A840S': ['Pantech', 'SKY Vega S5'],\n 'IM-A850K': ['Pantech', 'IM-A850K'],\n 'IM-T100K': ['Pantech', 'SKY Vega No. 5', 'tablet'],\n 'IS06': ['Pantech', 'SIRIUS \\u00c3\\ufffd\\u00c2\\u00b1'],\n 'ADR8995': ['Pantech', 'Breakout'],\n 'ADR8995 4G': ['Pantech', 'Breakout'],\n 'ADR910L 4G': ['Pantech', 'ADR910L'],\n 'PantechP4100': ['Pantech', 'Element', 'tablet'],\n 'PantechP8000': ['Pantech', 'Crossover'],\n 'PantechP8010': ['Pantech', 'P8010'],\n 'PantechP9060': ['Pantech', 'Pocket'],\n 'PantechP9070': ['Pantech', 'Burst'],\n 'SKY IM-A600S': ['Pantech', 'SIRIUS \\u00c3\\ufffd\\u00c2\\u00b1'],\n 'SKY IM-A630K': ['Pantech', 'SKY Izar'],\n 'SKY IM-A650S': ['Pantech', 'SKY Vega'],\n 'IS11PT': ['Pantech', 'Mirach IS11PT'],\n 'PAT712W': ['Perfeo', 'PAT712W', 'tablet'],\n 'X7G': ['Pearl', 'Touchlet X7G', 'tablet'],\n 'FWS810': ['PHICOMM', 'FWS810'],\n 'Philips PI5000': ['Philips', 'PI5000', 'tablet'],\n 'PI7000': ['Philips', 'PI7000', 'tablet'],\n 'Philips W626': ['Philips', 'W626'],\n 'Philips W632': ['Philips', 'W632'],\n 'MOMO': ['Ployer', 'MOMO', 'tablet'],\n 'MOMO15': ['Ployer', 'MOMO15', 'tablet'],\n 'PocketBook A7': ['PocketBook', 'A7', 'tablet'],\n 'PocketBook A10': ['PocketBook', 'A10', 'tablet'],\n 'Mobii 7': ['Point Of View', 'Mobii 7', 'tablet'],\n 'PMP3384BRU': ['Prestigio', 'Multipad 3384', 'tablet'],\n 'TB07FTA': ['Positivo', 'TB07FTA', 'tablet'],\n 'QW TB-1207': ['Qware', 'Pro3', 'tablet'],\n 'W6HD ICS': ['Ramos', 'W6HD', 'tablet'],\n 'w10': ['Ramos', 'W10', 'tablet'],\n 'W10': ['Ramos', 'W10', 'tablet'],\n 'w10 v2.0': ['Ramos', 'W10 v2.0', 'tablet'],\n 'W10 V2.0': ['Ramos', 'W10 v2.0', 'tablet'],\n 'T11AD': ['Ramos', 'T11AD', 'tablet'],\n 'T11AD.FE': ['Ramos', 'T11AD', 'tablet'],\n 'PlayBook': ['RIM', 'BlackBerry PlayBook', 'tablet'],\n 'RBK-490': ['Ritmix', 'RBK-490', 'tablet'],\n 'A8HD': ['Saayi', 'Dropad A8HD', 'tablet'],\n 'GT-S7568': ['Samsung', 'S7568'],\n 'Galaxy Nexus': ['Samsung', 'Galaxy Nexus'],\n 'GT-B5330': ['Samsung', 'GT-B5330'],\n 'GT-B5510': ['Samsung', 'Galaxy Y Pro'],\n 'GT-B5510B': ['Samsung', 'Galaxy Y Pro'],\n 'GT-B5510L': ['Samsung', 'Galaxy Y Pro'],\n 'GT-B5512': ['Samsung', 'Galaxy Y Pro Duos'],\n 'GT-B7510': ['Samsung', 'Galaxy Pro'],\n 'GT-B7510L': ['Samsung', 'Galaxy Pro'],\n 'GT-I5500': ['Samsung', 'Galaxy 5'],\n 'GT-I5500B': ['Samsung', 'Galaxy 5'],\n 'GT-I5500L': ['Samsung', 'Galaxy 5'],\n 'GT-I5500M': ['Samsung', 'Galaxy 5'],\n 'GT-I5500-MR3': ['Samsung', 'Galaxy 5'],\n 'GT-I5503': ['Samsung', 'Galaxy 5'],\n 'GT-I5508': ['Samsung', 'Galaxy 5'],\n 'GT-I5510': ['Samsung', 'Galaxy 551'],\n 'GT-I5510L': ['Samsung', 'Galaxy 551'],\n 'GT-I5510M': ['Samsung', 'Galaxy 551'],\n 'GT-I5510T': ['Samsung', 'Galaxy 551'],\n 'GT-I5700': ['Samsung', 'Galaxy Spica'],\n 'GT-I5700L': ['Samsung', 'Galaxy Spica'],\n 'GT-I5800': ['Samsung', 'Galaxy Apollo'],\n 'GT-I5800D': ['Samsung', 'Galaxy Apollo'],\n 'GT-I5800L': ['Samsung', 'Galaxy Apollo'],\n 'GT-I5801': ['Samsung', 'Galaxy Apollo'],\n 'GT-I6500U': ['Samsung', 'Saturn'],\n 'GT-I8000': ['Samsung', 'Omnia 2'],\n 'GT-I8150': ['Samsung', 'Galaxy W'],\n 'GT-I8150B': ['Samsung', 'Galaxy W'],\n 'GT-I8160': ['Samsung', 'Galaxy Ace 2'],\n 'GT-I8160L': ['Samsung', 'Galaxy Ace 2'],\n 'GT-I8160P': ['Samsung', 'Galaxy Ace 2'],\n 'GT-I8320': ['Samsung', 'H1'],\n 'GT-I8520': ['Samsung', 'Galaxy Beam'],\n 'GT-I8530': ['Samsung', 'Galaxy Beam'],\n 'GT-I8250': ['Samsung', 'Galaxy Beam'],\n 'GT-i9000': ['Samsung', 'Galaxy S'],\n 'GT-I9000': ['Samsung', 'Galaxy S'],\n 'GT-I9000B': ['Samsung', 'Galaxy S'],\n 'GT-I9000M': ['Samsung', 'Galaxy S Vibrant'],\n 'GT-I9000T': ['Samsung', 'Galaxy S'],\n 'GT-I9001': ['Samsung', 'Galaxy S Plus'],\n 'GT-I9003': ['Samsung', 'Galaxy SL'],\n 'GT-I9003L': ['Samsung', 'Galaxy SL'],\n 'GT-I9008': ['Samsung', 'Galaxy S'],\n 'GT-I9008L': ['Samsung', 'Galaxy S'],\n 'GT-I9010': ['Samsung', 'Galaxy S Giorgio Armani'],\n 'GT-I9018': ['Samsung', 'Galaxy GT-I9018'],\n 'GT-I9070': ['Samsung', 'Galaxy S Advance'],\n 'GT-I9070P': ['Samsung', 'Galaxy S Advance'],\n 'GT-I9082': ['Samsung', 'Galaxy Grand DUOS'],\n 'GT-I9088': ['Samsung', 'Galaxy S'],\n 'GT-i9100': ['Samsung', 'Galaxy S II'],\n 'GT-I9100': ['Samsung', 'Galaxy S II'],\n 'GT-I9100G': ['Samsung', 'Galaxy S II'],\n 'GT-I9100M': ['Samsung', 'Galaxy S II'],\n 'GT-I9100T': ['Samsung', 'Galaxy S II'],\n 'GT-I9100P': ['Samsung', 'Galaxy S II'],\n 'GT-I9103': ['Samsung', 'Galaxy R'],\n 'GT-I9108': ['Samsung', 'Galaxy S II'],\n 'GT-I9210': ['Samsung', 'Galaxy S II LTE'],\n 'GT-I9210T': ['Samsung', 'Galaxy S II LTE'],\n 'GT-I9220': ['Samsung', 'Galaxy Note'],\n 'GT-I9228': ['Samsung', 'Galaxy Note'],\n 'GT-I9250': ['Samsung', 'Galaxy Nexus'],\n 'GT-I9250 EUR XX': ['Samsung', 'Galaxy Nexus'],\n 'GT-I9260': ['Samsung', 'Galaxy Premier'],\n 'GT-I9300': ['Samsung', 'Galaxy S III'],\n 'GT-I9300T': ['Samsung', 'Galaxy S III'],\n 'GT-I9303T': ['Samsung', 'Galaxy S III'],\n 'GT-I9308': ['Samsung', 'Galaxy S III'],\n 'GT-I9500': ['Samsung', 'Galaxy GT-I9500'],\n 'GT-I9800': ['Samsung', 'Galaxy GT-I9800'],\n 'GT-N7000': ['Samsung', 'Galaxy Note'],\n 'GT-N7000B': ['Samsung', 'Galaxy Note'],\n 'GT-N7100': ['Samsung', 'Galaxy Note II'],\n 'GT-N7102': ['Samsung', 'Galaxy Note II'],\n 'GT-N8000': ['Samsung', 'Galaxy Note 10.1'],\n 'GT-N8010': ['Samsung', 'Galaxy Note 10.1'],\n 'GT-P1000': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GT-P1000L': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GT-P1000M': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GT-P1000N': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GT-P1000T': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GT-P1000 Tablet': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GT-P1010': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GT-P3100': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n 'GT-P3100B': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n 'GT-P3110': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n 'GT-P3113': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n 'GT-P5100': ['Samsung', 'Galaxy Tab 2 (10.1)', 'tablet'],\n 'GT-P5110': ['Samsung', 'Galaxy Tab 2 (10.1)', 'tablet'],\n 'GT-P5113': ['Samsung', 'Galaxy Tab 2 (10.1)', 'tablet'],\n 'GT-P6200': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n 'GT-P6200L': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n 'GT-P6201': ['Samsung', 'Galaxy Tab 7.0 Plus N', 'tablet'],\n 'GT-P6210': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n 'GT-P6211': ['Samsung', 'Galaxy Tab 7.0 Plus N', 'tablet'],\n 'GT-P6800': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n 'GT-P6810': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n 'GT-P7100': ['Samsung', 'Galaxy Tab 10.1V', 'tablet'],\n 'GT-P7300': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'GT-P7300B': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'GT-P7310': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'GT-P7320': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'GT-P7320T': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'GT-P7500': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'GT-P7500D': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'GT-P7500R': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'GT-P7500V': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'GT-P7501': ['Samsung', 'Galaxy Tab 10.1N', 'tablet'],\n 'GT-P7510': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'GT-P7511': ['Samsung', 'Galaxy Tab 10.1N', 'tablet'],\n 'GT-S5300': ['Samsung', 'Galaxy Pocket'],\n 'GT-S5360': ['Samsung', 'Galaxy Y'],\n 'GT-S5360B': ['Samsung', 'Galaxy Y'],\n 'GT-S5360L': ['Samsung', 'Galaxy Y'],\n 'GT-S5363': ['Samsung', 'Galaxy Y'],\n 'GT-S5367': ['Samsung', 'Galaxy Y TV'],\n 'GT-S5368': ['Samsung', 'GT-S5368'],\n 'GT-S5369': ['Samsung', 'Galaxy Y'],\n 'GT-S5570': ['Samsung', 'Galaxy Mini'],\n 'GT-S5570B': ['Samsung', 'Galaxy Mini'],\n 'GT-S5570I': ['Samsung', 'Galaxy Mini'],\n 'GT-S5570L': ['Samsung', 'Galaxy Mini'],\n 'GT-S5578': ['Samsung', 'Galaxy Mini'],\n 'GT-S5660': ['Samsung', 'Galaxy Gio'],\n 'GT-S5660M': ['Samsung', 'Galaxy Gio'],\n 'GT-S5660V': ['Samsung', 'Galaxy Gio'],\n 'GT-S5670': ['Samsung', 'Galaxy Fit'],\n 'GT-S5670B': ['Samsung', 'Galaxy Fit'],\n 'GT-S5670L': ['Samsung', 'Galaxy Fit'],\n 'GT-S5690': ['Samsung', 'Galaxy Xcover'],\n 'GT-S5690L': ['Samsung', 'Galaxy Xcover'],\n 'GT-S5820': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830B': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830C': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830D': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830D-parrot': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830i': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830L': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830M': ['Samsung', 'Galaxy Ace'],\n 'GT-S5830T': ['Samsung', 'Galaxy Ace'],\n 'GT-S5838': ['Samsung', 'Galaxy Ace'],\n 'GT-S5839i': ['Samsung', 'Galaxy Ace'],\n 'GT-S6102': ['Samsung', 'Galaxy Y Duos'],\n 'GT-S6102B': ['Samsung', 'Galaxy Y Duos'],\n 'GT-S6500': ['Samsung', 'Galaxy Mini 2'],\n 'GT-S6500D': ['Samsung', 'Galaxy Mini 2'],\n 'GT-S6702': ['Samsung', 'GT-S6702'],\n 'GT-S6802': ['Samsung', 'Galaxy Ace Duos'],\n 'GT-S7500': ['Samsung', 'Galaxy Ace Plus'],\n 'GT-S7500L': ['Samsung', 'Galaxy Ace Plus'],\n 'GT-S7500W': ['Samsung', 'Galaxy Ace Plus'],\n 'GT-T959': ['Samsung', 'Galaxy S Vibrant'],\n 'SCH-i509': ['Samsung', 'Galaxy Y'],\n 'SCH-i559': ['Samsung', 'Galaxy Pop'],\n 'SCH-i569': ['Samsung', 'Galaxy Gio'],\n 'SCH-i579': ['Samsung', 'Galaxy Ace'],\n 'SCH-i589': ['Samsung', 'Galaxy Ace Duos'],\n 'SCH-i705 4G': ['Samsung', 'Galaxy Tab 2 (7.0)', 'tablet'],\n 'SCH-i809': ['Samsung', 'SCH-i809'],\n 'SCH-i889': ['Samsung', 'Galaxy Note'],\n 'SCH-i909': ['Samsung', 'Galaxy S'],\n 'SCH-i919': ['Samsung', 'SCH-i919'],\n 'SCH-i929': ['Samsung', 'SCH-i929'],\n 'SCH-I100': ['Samsung', 'Gem'],\n 'SCH-I110': ['Samsung', 'Illusion'],\n 'SCH-I400': ['Samsung', 'Continuum'],\n 'SCH-I405': ['Samsung', 'Stratosphere'],\n 'SCH-I405 4G': ['Samsung', 'Stratosphere'],\n 'SCH-I500': ['Samsung', 'Fascinate'],\n 'SCH-I510': ['Samsung', 'Stealth V'],\n 'SCH-I510 4G': ['Samsung', 'Droid Charge'],\n 'SCH-I515': ['Samsung', 'Galaxy Nexus'],\n 'SCH-I535': ['Samsung', 'Galaxy S III'],\n 'SCH-I535 4G': ['Samsung', 'Galaxy S III'],\n 'SCH-I619': ['Samsung', 'SCH-I619'],\n 'SCH-I699': ['Samsung', 'SCH-I699'],\n 'SCH-I779': ['Samsung', 'SCH-I779'],\n 'SCH-I800': ['Samsung', 'Galaxy Tab 7.0', 'tablet'],\n 'SCH-I815': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n 'SCH-I815 4G': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n 'SCH-I905': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'SCH-I905 4G': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'SCH-I909': ['Samsung', 'Galaxy S'],\n 'SCH-I915': ['Samsung', 'SCH-I915'],\n 'SCH-I939': ['Samsung', 'Galaxy S III'],\n 'SCH-M828C': ['Samsung', 'Galaxy Precedent'],\n 'SCH-M828Carray(9096483449)': ['Samsung', 'Galaxy Precedent'],\n 'SCH-R530U': ['Samsung', 'Galaxy S III'],\n 'SCH-R680': ['Samsung', 'Repp'],\n 'SCH-R720': ['Samsung', 'Admire'],\n 'SCH-R730': ['Samsung', 'Transfix'],\n 'SCH-R760': ['Samsung', 'Galaxy S II'],\n 'SCH-R820': ['Samsung', 'SCH-R820'],\n 'SCH-R880': ['Samsung', 'Acclaim'],\n 'SCH-R910': ['Samsung', 'Galaxy Indulge 4G'],\n 'SCH-R915': ['Samsung', 'Galaxy Indulge'],\n 'SCH-R920': ['Samsung', 'Galaxy Attain 4G'],\n 'SCH-R930': ['Samsung', 'Galaxy S Aviator'],\n 'SCH-R940': ['Samsung', 'Galaxy S Lightray'],\n 'SCH-S720C': ['Samsung', 'Galaxy Proclaim'],\n 'SCH-S735C': ['Samsung', 'SCH-S735'],\n 'SCH-W899': ['Samsung', 'SCH-W899'],\n 'SCH-W999': ['Samsung', 'SCH-W999'],\n 'SGH-I547': ['Samsung', 'SGH-I547'],\n 'SGH-I717': ['Samsung', 'Galaxy Note'],\n 'SGH-I717D': ['Samsung', 'Galaxy Note'],\n 'SGH-I717M': ['Samsung', 'Galaxy Note'],\n 'SGH-I717R': ['Samsung', 'Galaxy Note'],\n 'SGH-I727': ['Samsung', 'Galaxy S II Skyrocket'],\n 'SGH-i727R': ['Samsung', 'Galaxy S II'],\n 'SGH-I727R': ['Samsung', 'Galaxy S II'],\n 'SGH-I747': ['Samsung', 'Galaxy S III'],\n 'SGH-I747M': ['Samsung', 'Galaxy S III'],\n 'SGH-I748': ['Samsung', 'Galaxy S III'],\n 'SGH-I757': ['Samsung', 'Galaxy S II Skyrocket HD'],\n 'SGH-I777': ['Samsung', 'Galaxy S II'],\n 'SGH-I9777': ['Samsung', 'Galaxy S II'],\n 'SGH-I896': ['Samsung', 'Captivate'],\n 'SGH-I897': ['Samsung', 'Captivate'],\n 'SGH-I927': ['Samsung', 'Captivate Glide'],\n 'SGH-I927R': ['Samsung', 'Captivate Glide'],\n 'SGH-I957': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'SGH-I957D': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'SGH-I957M': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'SGH-I957R': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'SGH-I987': ['Samsung', 'Galaxy Tab 7.0', 'tablet'],\n 'SGH-I997': ['Samsung', 'Infuse 4G'],\n 'SGH-I997R': ['Samsung', 'Infuse 4G'],\n 'SGH-I9000': ['Samsung', 'Galaxy S'],\n 'SGH-S730G': ['Samsung', 'SGH-S730'],\n 'SGH-T499': ['Samsung', 'Dart'],\n 'SGH-T499V': ['Samsung', 'Galaxy Mini'],\n 'SGH-T499Y': ['Samsung', 'Galaxy Mini'],\n 'SGH-T589': ['Samsung', 'Gravity Smart'],\n 'SGH-T589R': ['Samsung', 'Gravity Smart'],\n 'SGH-T679': ['Samsung', 'Exhibit II 4G'],\n 'SGH-T679M': ['Samsung', 'Exhibit II 4G'],\n 'SGH-T759': ['Samsung', 'Exhibit 4G'],\n 'SGH-T769': ['Samsung', 'Galaxy S Blaze 4G'],\n 'SGH-T839': ['Samsung', 'T-Mobile Sidekick'],\n 'SGH-T849': ['Samsung', 'Galaxy Tab 7.0', 'tablet'],\n 'SGH-T859': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'SGH-T869': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n 'SGH-T879': ['Samsung', 'Galaxy Note'],\n 'SGH-T959': ['Samsung', 'Vibrant'],\n 'SGH-T959D': ['Samsung', 'Galaxy S Fascinate 3G+'],\n 'SGH-T959P': ['Samsung', 'Galaxy S Fascinate 4G'],\n 'SGH-T959V': ['Samsung', 'Galaxy S 4G'],\n 'SGH-T989': ['Samsung', 'Galaxy S II'],\n 'SGH-T989D': ['Samsung', 'Galaxy S II X'],\n 'SGH-T999': ['Samsung', 'Galaxy S Blaze 4G'],\n 'SGH-T999V': ['Samsung', 'Galaxy S Blaze 4G'],\n 'SHV-E120K': ['Samsung', 'Galaxy S II HD LTE'],\n 'SHV-E120L': ['Samsung', 'Galaxy S II HD LTE'],\n 'SHV-E120S': ['Samsung', 'Galaxy S II HD LTE'],\n 'SHV-E110S': ['Samsung', 'Galaxy S II LTE'],\n 'SHV-E140S': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'SHV-E150S': ['Samsung', 'Galaxy Tab 7.7', 'tablet'],\n 'SHV-E160K': ['Samsung', 'Galaxy Note'],\n 'SHV-E160L': ['Samsung', 'Galaxy Note LTE'],\n 'SHV-E160S': ['Samsung', 'Galaxy Note LTE'],\n 'SHV-E170K': ['Samsung', 'SHV-E170K'],\n 'SHV-E170L': ['Samsung', 'SHV-E170L'],\n 'SHV-E210K': ['Samsung', 'Galaxy S III'],\n 'SHV-E210L': ['Samsung', 'Galaxy S III'],\n 'SHV-E210S': ['Samsung', 'Galaxy S III'],\n 'SHW-M100S': ['Samsung', 'Galaxy A'],\n 'SHW-M110S': ['Samsung', 'Galaxy S'],\n 'SHW-M130L': ['Samsung', 'Galaxy U'],\n 'SHW-M130K': ['Samsung', 'Galaxy K'],\n 'SHW-M180K': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'SHW-M180L': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'SHW-M180S': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'SHW-M180W': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'SHW-M185S': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'SHW-M190S': ['Samsung', 'Galaxy S Hoppin'],\n 'SHW-M220L': ['Samsung', 'Galaxy Neo'],\n 'SHW-M240S': ['Samsung', 'Galaxy Ace'],\n 'SHW-M250K': ['Samsung', 'Galaxy S II'],\n 'SHW-M250L': ['Samsung', 'Galaxy S II'],\n 'SHW-M250S': ['Samsung', 'Galaxy S II'],\n 'SHW-M300W': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'SHW-M305W': ['Samsung', 'Galaxy Tab 8.9', 'tablet'],\n 'SHW-M340S': ['Samsung', 'Galaxy M Style'],\n 'SHW-M380K': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'SHW-M380S': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'SHW-M380W': ['Samsung', 'Galaxy Tab 10.1', 'tablet'],\n 'SHW-M440S': ['Samsung', 'Galaxy S III'],\n 'SMT-i9100': ['Samsung', 'SMT-I9100', 'tablet'],\n 'SPH-D600': ['Samsung', 'Conquer 4G'],\n 'SPH-D700': ['Samsung', 'Epic 4G'],\n 'SPH-D705': ['Samsung', 'Epic 4G 2'],\n 'SPH-D710': ['Samsung', 'Epic 4G Touch'],\n 'SPH-L700': ['Samsung', 'Galaxy Nexus'],\n 'SPH-L710': ['Samsung', 'Galaxy S III'],\n 'SPH-M820': ['Samsung', 'Galaxy Prevail'],\n 'SPH-M820-BST': ['Samsung', 'Galaxy Prevail'],\n 'SPH-M580': ['Samsung', 'Replenish'],\n 'SPH-M900': ['Samsung', 'Moment'],\n 'SPH-M910': ['Samsung', 'Intercept'],\n 'SPH-M920': ['Samsung', 'Transform'],\n 'SPH-M930': ['Samsung', 'Transform Ultra'],\n 'SPH-M930BST': ['Samsung', 'Transform Ultra'],\n 'SPH-P100': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'YP-GB1': ['Samsung', 'Galaxy Player', 'media'],\n 'YP-GB70': ['Samsung', 'Galaxy Player 70', 'media'],\n 'YP-GB70D': ['Samsung', 'Galaxy Player 70 Plus', 'media'],\n 'YP-GS1': ['Samsung', 'Galaxy S WiFi 3.6', 'media'],\n 'YP-G1': ['Samsung', 'Galaxy S WiFi 4.0', 'media'],\n 'YP-GI1': ['Samsung', 'Galaxy S WiFi 4.2', 'media'],\n 'YP-G50': ['Samsung', 'Galaxy Player', 'media'],\n 'YP-G70': ['Samsung', 'Galaxy S WiFi 5.0', 'media'],\n 'GT9100': ['Samsung', 'Galaxy S II'],\n 'I897': ['Samsung', 'Captivate'],\n 'I7500': ['Samsung', 'Galaxy'],\n 'I9000': ['Samsung', 'Galaxy S'],\n 'T959': ['Samsung', 'Galaxy S Vibrant'],\n 'Captivate-I897': ['Samsung', 'Captivate'],\n 'Galaxy': ['Samsung', 'Galaxy'],\n 'Galaxy Note': ['Samsung', 'Galaxy Note'],\n 'GalaxyS': ['Samsung', 'Galaxy S'],\n 'Galaxy S II': ['Samsung', 'Galaxy S II'],\n 'Galaxy X': ['Samsung', 'Galaxy X'],\n 'Galaxy Spica': ['Samsung', 'Galaxy Spica'],\n 'GALAXY Tab': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'GALAXY NEXUS': ['Samsung', 'Galaxy Nexus'],\n 'Vibrantmtd': ['Samsung', 'Vibrant'],\n 'SC-01C': ['Samsung', 'Galaxy Tab', 'tablet'],\n 'SC-01D': ['Samsung', 'Galaxy Tab 10.1 LTE', 'tablet'],\n 'SC-02B': ['Samsung', 'Galaxy S'],\n 'SC-02C': ['Samsung', 'Galaxy S II'],\n 'SC-02D': ['Samsung', 'Galaxy Tab 7.0 Plus', 'tablet'],\n 'SC-03D': ['Samsung', 'Galaxy S II LTE'],\n 'SC-04D': ['Samsung', 'Galaxy Nexus'],\n 'SC-05D': ['Samsung', 'Galaxy Note LTE'],\n 'SC-06D': ['Samsung', 'Galaxy S III'],\n 'ISW11SC': ['Samsung', 'Galaxy S II WiMAX'],\n 'GT-S7562': ['Samsung', 'GT-S7562'],\n 'GT-S7562i': ['Samsung', 'GT-S7562i'],\n 'A01SH': ['Sharp', 'A01SH'],\n 'IS01': ['Sharp', 'IS01'],\n 'IS03': ['Sharp', 'IS03'],\n 'IS05': ['Sharp', 'IS05'],\n 'IS11SH': ['Sharp', 'Aquos IS11SH'],\n 'IS12SH': ['Sharp', 'Aquos IS12SH'],\n 'IS13SH': ['Sharp', 'Aquos IS13SH'],\n 'IS14SH': ['Sharp', 'Aquos IS14SH'],\n 'ISW16SH': ['Sharp', 'Aquos ISW16SH'],\n 'EB-W51GJ': ['Sharp', 'EB-W51GJ'],\n 'SBM003SH': ['Sharp', 'Galapagos'],\n 'SBM005SH': ['Sharp', 'Galapagos'],\n 'SBM006SH': ['Sharp', 'Aquos'],\n 'SBM007SH': ['Sharp', 'Aquos 007SH'],\n 'SBM009SH': ['Sharp', 'Aquos 009SH'],\n 'SBM102SH': ['Sharp', 'Aquos 102SH'],\n 'SBM103SH': ['Sharp', 'Aquos 103SH'],\n 'SBM104SH': ['Sharp', 'Aquos 104SH'],\n 'SBM107SH': ['Sharp', 'Aquos 107SH'],\n 'SBM107SHB': ['Sharp', 'Aquos 107SH'],\n 'SH-01D': ['Sharp', 'Aquos SH-01D'],\n 'SH-02D': ['Sharp', 'Aquos slider SH-02D'],\n 'SH-03C': ['Sharp', 'Lynx 3D'],\n 'SH-06D': ['Sharp', 'Aquos SH-06D'],\n 'SH-09D': ['Sharp', 'Aquos Zeta SH-09D'],\n 'SH-10B': ['Sharp', 'Lynx'],\n 'SH-12C': ['Sharp', 'Aquos'],\n 'SH-13C': ['Sharp', 'Aquos f SH-13C'],\n 'SH80F': ['Sharp', 'Aquos SH80F'],\n 'SH72x8U': ['Sharp', 'SH72x8U'],\n 'SH8118U': ['Sharp', 'SH8118U'],\n 'SH8128U': ['Sharp', 'SH8128U'],\n 'SH8158U': ['Sharp', 'SH8158U'],\n 'SH8188U': ['Sharp', 'SH8188U'],\n 'SH8268U': ['Sharp', 'SH8268U'],\n 'INFOBAR C01': ['Sharp', 'INFOBAR C01'],\n 'SPX-5': ['Simvalley', 'SPX-5'],\n 'SPX-5 3G': ['Simvalley', 'SPX-5 3G'],\n 'SmartQ G7': ['SmartQ', 'G7', 'tablet'],\n 'SmartQT7': ['SmartQ', 'T7', 'tablet'],\n 'SmartQT10': ['SmartQ', 'T10', 'tablet'],\n 'SmartQT15': ['SmartQ', 'T15', 'tablet'],\n 'SmartQT19': ['SmartQ', 'T19', 'tablet'],\n 'SmartQT20': ['SmartQ', 'T20', 'tablet'],\n 'OMS1 6': ['Sony Ericsson', 'A8i'],\n 'E10a': ['Sony Ericsson', 'Xperia X10 Mini'],\n 'E10i': ['Sony Ericsson', 'Xperia X10 Mini'],\n 'E10iv': ['Sony Ericsson', 'Xperia X10 Mini'],\n 'E15': ['Sony Ericsson', 'Xperia X8'],\n 'E15a': ['Sony Ericsson', 'Xperia X8'],\n 'E15i': ['Sony Ericsson', 'Xperia X8'],\n 'E15iv': ['Sony Ericsson', 'Xperia X8'],\n 'E15i-o': ['Sony Ericsson', 'Xperia X8'],\n 'E16i': ['Sony Ericsson', 'W8 Walkman'],\n 'LT11i': ['Sony Ericsson', 'Xperia Neo V'],\n 'LT15': ['Sony Ericsson', 'Xperia Arc'],\n 'LT15a': ['Sony Ericsson', 'Xperia Arc'],\n 'LT15i': ['Sony Ericsson', 'Xperia Arc'],\n 'LT15iv': ['Sony Ericsson', 'Xperia Arc'],\n 'LT15i-o': ['Sony Ericsson', 'Xperia Arc'],\n 'LT18a': ['Sony Ericsson', 'Xperia Arc S'],\n 'LT18i': ['Sony Ericsson', 'Xperia Arc S'],\n 'LT18iv': ['Sony Ericsson', 'Xperia Arc S'],\n 'LT18i-o': ['Sony Ericsson', 'Xperia Arc S'],\n 'LT22i': ['Sony', 'Xperia P'],\n 'LT26i': ['Sony', 'Xperia S'],\n 'LT26ii': ['Sony', 'Xperia S'],\n 'LT26i-o': ['Sony', 'Xperia S'],\n 'LT28at': ['Sony', 'Xperia Ion'],\n 'LT28h': ['Sony', 'Xperia Ion'],\n 'LT28i': ['Sony', 'Xperia Ion'],\n 'LT29i': ['Sony', 'Xperia GX'],\n 'SonyLT29i': ['Sony', 'Xperia GX'],\n 'SonyLT30a': ['Sony', 'Xperia Mint'],\n 'SonyLT30p': ['Sony', 'Xperia Mint'],\n 'MK16a': ['Sony Ericsson', 'Xperia Pro'],\n 'MK16i': ['Sony Ericsson', 'Xperia Pro'],\n 'MT11a': ['Sony Ericsson', 'Xperia Neo V'],\n 'MT11i': ['Sony Ericsson', 'Xperia Neo V'],\n 'MT11iv': ['Sony Ericsson', 'Xperia Neo V'],\n 'MT11i-o': ['Sony Ericsson', 'Xperia Neo V'],\n 'MT15a': ['Sony Ericsson', 'Xperia Neo'],\n 'MT15i': ['Sony Ericsson', 'Xperia Neo'],\n 'MT15iv': ['Sony Ericsson', 'Xperia Neo'],\n 'MT15i-o': ['Sony Ericsson', 'Xperia Neo'],\n 'MT25i': ['Sony', 'Xperia Neo L'],\n 'MT27i': ['Sony', 'Xperia Sola'],\n 'R800a': ['Sony Ericsson', 'Xperia Play'],\n 'R800i': ['Sony Ericsson', 'Xperia Play'],\n 'R800iv': ['Sony Ericsson', 'Xperia Play'],\n 'R800at': ['Sony Ericsson', 'Xperia Play'],\n 'R800x': ['Sony Ericsson', 'Xperia Play'],\n 'SK17a': ['Sony Ericsson', 'Xperia Mini Pro'],\n 'SK17i': ['Sony Ericsson', 'Xperia Mini Pro'],\n 'SK17iv': ['Sony Ericsson', 'Xperia Mini Pro'],\n 'SK17i-o': ['Sony Ericsson', 'Xperia Mini Pro'],\n 'ST15a': ['Sony Ericsson', 'Xperia Mini'],\n 'ST15i': ['Sony Ericsson', 'Xperia Mini'],\n 'ST17a': ['Sony Ericsson', 'Xperia Active'],\n 'ST17i': ['Sony Ericsson', 'Xperia Active'],\n 'ST18a': ['Sony Ericsson', 'Xperia Ray'],\n 'ST18i': ['Sony Ericsson', 'Xperia Ray'],\n 'ST18iv': ['Sony Ericsson', 'Xperia Ray'],\n 'ST18av': ['Sony Ericsson', 'Xperia Ray'],\n 'SonyST21': ['Sony', '\\'Tapioca\\''],\n 'SonyST21i': ['Sony', '\\'Tapioca\\''],\n 'SonyST21a2': ['Sony', '\\'Tapioca\\''],\n 'ST21': ['Sony', '\\'Tapioca\\''],\n 'ST21i': ['Sony', '\\'Tapioca\\''],\n 'SonyST23i': ['Sony', '\\'Tapioca DS\\''],\n 'ST25i': ['Sony', 'Xperia U'],\n 'ST27i': ['Sony', 'Xperia Go'],\n 'U20a': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n 'U20i': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n 'U20iv': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n 'WT13i': ['Sony Ericsson', 'Mix Walkman'],\n 'WT18i': ['Sony Ericsson', 'Walkman'],\n 'WT19a': ['Sony Ericsson', 'Live with Walkman'],\n 'WT19i': ['Sony Ericsson', 'Live with Walkman'],\n 'WT19iv': ['Sony Ericsson', 'Live with Walkman'],\n 'X8': ['Sony Ericsson', 'Xperia X8'],\n 'X10': ['Sony Ericsson', 'Xperia X10'],\n 'X10a': ['Sony Ericsson', 'Xperia X10'],\n 'X10i': ['Sony Ericsson', 'Xperia X10'],\n 'X10iv': ['Sony Ericsson', 'Xperia X10'],\n 'X10S': ['Sony Ericsson', 'Xperia X10'],\n 'X10mini': ['Sony Ericsson', 'Xperia X10 Mini'],\n 'X10 Mini': ['Sony Ericsson', 'Xperia X10 Mini'],\n 'X10 Mini Pro': ['Sony Ericsson', 'Xperia X10 Mini Pro'],\n 'Z1i': ['Sony Ericsson', 'Xperia Play'],\n 'S51SE': ['Sony Ericsson', 'Xperia Mini'],\n 'IS11S': ['Sony Ericsson', 'Xperia Acro'],\n 'IS12S': ['Sony Ericsson', 'Xperia Acro HD'],\n 'SO-01B': ['Sony Ericsson', 'Xperia X10'],\n 'SO-01C': ['Sony Ericsson', 'Xperia Arc'],\n 'SO-01D': ['Sony Ericsson', 'Xperia Play'],\n 'SO-02C': ['Sony Ericsson', 'Xperia Acro'],\n 'SO-02D': ['Sony Ericsson', 'Xperia NX'],\n 'SO-03C': ['Sony Ericsson', 'Xperia Ray'],\n 'SO-03D': ['Sony Ericsson', 'Xperia Acro HD'],\n 'SO-04D': ['Sony', 'Xperia GX'],\n 'SO-05D': ['Sony', 'Xperia SX'],\n 'XPERIA X8': ['Sony Ericsson', 'Xperia X8'],\n 'Xperia X8': ['Sony Ericsson', 'Xperia X8'],\n 'Xperia X10': ['Sony Ericsson', 'Xperia X10'],\n 'Xperia ray': ['Sony Ericsson', 'Xperia Ray'],\n 'Xperia Ray': ['Sony Ericsson', 'Xperia Ray'],\n 'Xperia Arc': ['Sony Ericsson', 'Xperia Arc'],\n 'Xperia Mini': ['Sony Ericsson', 'Xperia Mini'],\n 'Xperia neo': ['Sony Ericsson', 'Xperia Neo'],\n 'Xperia Neo': ['Sony Ericsson', 'Xperia Neo'],\n 'XPERIA NEO': ['Sony Ericsson', 'Xperia Neo'],\n 'Xperia NeoV': ['Sony Ericsson', 'Xperia Neo V'],\n 'Xperia Neo V': ['Sony Ericsson', 'Xperia Neo V'],\n 'Xperia Play': ['Sony Ericsson', 'Xperia Play'],\n 'Sony Ericsson Xperia X1': ['Sony Ericsson', 'Xperia X1'],\n 'SonyHayabusa': ['Sony', 'Xperia Ion'],\n 'Hayabusa': ['Sony', 'Xperia Ion'],\n 'nozomi': ['Sony', 'Xperia S'],\n 'Sony Tablet P': ['Sony', 'Tablet P', 'tablet'],\n 'Sony Tablet S': ['Sony', 'Tablet S', 'tablet'],\n 'NWZ-Z1000Series': ['Sony', 'Walkman Z', 'media'],\n 'NW-Z1000Series': ['Sony', 'Walkman Z', 'media'],\n 'Spice Mi280': ['Spice', 'Mi-280'],\n 'Spice Mi300': ['Spice', 'Mi-300'],\n 'Spice Mi-310': ['Spice', 'Mi-310'],\n 'Spice Mi-425': ['Spice', 'Mi-425'],\n 'SPICE Mi-720': ['Spice', 'Mi-720'],\n 'A7272+': ['Star', 'A7272+'],\n 'e1109 v73 gq1002 ctp': ['Star', 'X18i'],\n 'TS1004T': ['Surf 3Q', 'TS1004T', 'tablet'],\n 'SYTABEX7-2': ['Sylvania', 'SYTABEX7', 'tablet'],\n 'TCL A860': ['TCL', 'A860'],\n 'TCL A906': ['TCL', 'A906'],\n 'TCL A909': ['TCL', 'A909'],\n 'TCL A919': ['TCL', 'A919'],\n 'TCL A990': ['TCL', 'A990'],\n 'TCL A996': ['TCL', 'A996'],\n 'TCL A998': ['TCL', 'A998'],\n 'TCL GENESEE E708': ['TCL', 'Genesee E708'],\n 'A10t(5DM3)': ['Teclast', 'A10T', 'tablet'],\n 'P72': ['Teclast', 'P72', 'tablet'],\n 'P76TI': ['Teclast', 'P76Ti', 'tablet'],\n 'P81HD': ['Teclast', 'P81HD', 'tablet'],\n 'P85(R8A1)': ['Teclast', 'P85', 'tablet'],\n 'T720 SE': ['Teclast', 'T720', 'tablet'],\n 'T760 from moage.com': ['Teclast', 'T760', 'tablet'],\n 'tegav2': ['Tegatech', 'TEGA v2', 'tablet'],\n 'TM-7025': ['teXet', 'TM-7025', 'tablet'],\n 'MoFing': ['Thomson', 'MoFing', 'tablet'],\n 'Ultimate10': ['Tomtec', 'Ultimate10', 'tablet'],\n 'Thl V7': ['THL', 'V7'],\n 'ThL V7': ['THL', 'V7'],\n 'ThL V8': ['THL', 'V8'],\n 'ThL V9': ['THL', 'V9'],\n 'ThL V11': ['THL', 'V11'],\n 'TSB CLOUD COMPANION;TOSHIBA AC AND AZ': ['Toshiba', 'Dynabook AZ', 'desktop'],\n 'TOSHIBA AC AND AZ': ['Toshiba', 'Dynabook AZ', 'desktop'],\n 'TOSHIBA FOLIO AND A': ['Toshiba', 'Folio 100', 'tablet'],\n 'T-01C': ['Toshiba', 'Regza T-01C'],\n 'T-01D': ['Toshiba', 'Regza T-01D'],\n 'IS04': ['Toshiba', 'Regza IS04'],\n 'IS11T': ['Toshiba', 'Regza IS11T'],\n 'AT1S0': ['Toshiba', 'Regza AT1S0'],\n 'Tostab03': ['Toshiba', 'Regza AT100', 'tablet'],\n 'AT100': ['Toshiba', 'Regza AT100', 'tablet'],\n 'AT200': ['Toshiba', 'Regza AT200', 'tablet'],\n 'AT470': ['Toshiba', 'Regza AT470', 'tablet'],\n 'AT570': ['Toshiba', 'Regza AT570', 'tablet'],\n 'AT830': ['Toshiba', 'Regza AT830', 'tablet'],\n 'Folio 100': ['Toshiba', 'Folio 100', 'tablet'],\n 'folio100': ['Toshiba', 'Folio 100', 'tablet'],\n 'THRiVE': ['Toshiba', 'THRiVE', 'tablet'],\n 'Fantastic T3': ['TWM', 'Fantastic T3'],\n 'M70014': ['United Star Technology', 'M70014', 'tablet'],\n 'PS47': ['Velocity Micro', 'Cruz PS47', 'tablet'],\n 'T301': ['Velocity Micro', 'Cruz T301', 'tablet'],\n 'Vibo-A688': ['FIH', 'Vibo A688'],\n 'Videocon-V7500': ['Videocon', 'V7500'],\n 'GTablet': ['ViewSonic', 'gTablet', 'tablet'],\n 'GtabComb': ['ViewSonic', 'gTablet', 'tablet'],\n 'TeamDRH ICS for GTablet': ['ViewSonic', 'gTablet', 'tablet'],\n 'ViewPad7': ['ViewSonic', 'ViewPad 7', 'tablet'],\n 'ViewPad 10e': ['ViewSonic', 'ViewPad 10e', 'tablet'],\n 'VTAB1008': ['Vizio', 'VTAB1008', 'tablet'],\n 'VTAB3010': ['Vizio', 'VTAB3010', 'tablet'],\n 'VOTO W5300': ['VOTO', 'W5300'],\n 'xPAD-70': ['WayteQ', 'xPAD-70', 'tablet'],\n 'xTAB-70': ['WayteQ', 'xTAB-70', 'tablet'],\n 'WellcoM-A99': ['WellcoM', 'A99'],\n 'N12': ['Window', 'N12', 'tablet'],\n 'N12R': ['Window', 'N12R', 'tablet'],\n 'N50': ['Window', 'N50', 'tablet'],\n 'N50DT': ['Window', 'N50DT', 'tablet'],\n 'N50GT': ['Window', 'N50GT', 'tablet'],\n 'N50GT A': ['Window', 'N50GT-A', 'tablet'],\n 'N70': ['Window', 'N70', 'tablet'],\n 'N70 DUAL CORE': ['Window', 'N70 Dual Core', 'tablet'],\n 'N80': ['Window', 'N80', 'tablet'],\n 'N90': ['Window', 'N90', 'tablet'],\n 'N90 DUAL CORE2 V12': ['Window', 'N90 Dual Core', 'tablet'],\n 'N612': ['Wishway', 'N612'],\n 'AT-AS43D': ['Wolfgang', 'AT-AS43D'],\n 'M12': ['Wopad', 'M12', 'tablet'],\n 'WM8650': ['WonderMedia', 'WM8650', 'tablet'],\n 'MI-ONE': ['Xiaomi', 'MI-ONE'],\n 'MI-ONE C1': ['Xiaomi', 'MI-ONE C1'],\n 'MI-ONE Plus': ['Xiaomi', 'MI-ONE Plus'],\n 'MI 1S': ['Xiaomi', 'MI-ONE Plus'],\n 'MI 1SC': ['Xiaomi', 'MI-ONE 1SC'],\n 'mione plus': ['Xiaomi', 'MI-ONE Plus'],\n 'MI-TWO': ['Xiaomi', 'MI-TWO'],\n 'MI 2': ['Xiaomi', 'MI-TWO'],\n 'MI 2S': ['Xiaomi', 'MI-TWO Plus'],\n 'MI 2SC': ['Xiaomi', 'MI-TWO Plus'],\n 'Q07CL01': ['XVision', 'Q07', 'tablet'],\n 'N6': ['Yarvik', '210 Tablet', 'tablet'],\n 'EMR1879': ['Yidong', 'EMR1879', 'tablet'],\n 'yusun W702': ['Yusun', 'W702'],\n 'YX-YUSUN E80': ['Yusun', 'E80'],\n 'zt180': ['Zenithink', 'ZT-180', 'tablet'],\n 'Jaguar7': ['ZiiLabs', 'Jaguar 7', 'tablet'],\n 'Ziss Ranger HD': ['Ziss', 'Ranger HD'],\n 'ZTE Libra': ['ZTE', 'Libra'],\n 'ZTE-T T9': ['ZTE', 'Light Tab T9', 'tablet'],\n 'V9': ['ZTE', 'Light Tab V9', 'tablet'],\n 'V9e+': ['ZTE', 'Light Tab 2', 'tablet'],\n 'V9A': ['ZTE', 'Light Tab 2', 'tablet'],\n 'Light Tab 2W': ['ZTE', 'Light Tab 2', 'tablet'],\n 'Light Tab 2': ['ZTE', 'Light Tab 2', 'tablet'],\n 'V9C': ['ZTE', 'Light Tab 3', 'tablet'],\n 'V55': ['ZTE', 'Optik', 'tablet'],\n 'Acqua': ['ZTE', 'Acqua'],\n 'Blade': ['ZTE', 'Blade'],\n 'Blade-V880': ['ZTE', 'Blade'],\n 'ZTE-U V880': ['ZTE', 'Blade'],\n 'Blade-opda': ['ZTE', 'Blade'],\n 'ZTE-BLADE': ['ZTE', 'Blade'],\n 'ZTE Blade': ['ZTE', 'Blade'],\n 'ZTE V880': ['ZTE', 'Blade'],\n 'ZTE-U(V)880+': ['ZTE', 'Blade'],\n 'V880': ['ZTE', 'Blade'],\n 'a5': ['ZTE', 'Blade'],\n 'Blade2': ['ZTE', 'Blade 2'],\n 'Blade S': ['ZTE', 'Blade S'],\n 'X500': ['ZTE', 'Score'],\n 'ZTE-X500': ['ZTE', 'Score'],\n 'Skate': ['ZTE', 'Skate'],\n 'ZTE Skate': ['ZTE', 'Skate'],\n 'ZTE-Skate': ['ZTE', 'Skate'],\n 'ZTE-SKATE': ['ZTE', 'Skate'],\n 'ZTE-V960': ['ZTE', 'Skate'],\n 'ZTE-U V960': ['ZTE', 'Skate'],\n 'ZTE Racer': ['ZTE', 'Racer'],\n 'ZTE-RACER': ['ZTE', 'Racer'],\n 'MTC 916': ['ZTE', 'Racer'],\n 'Racer': ['ZTE', 'Racer'],\n 'RacerII': ['ZTE', 'Racer 2'],\n 'RACERII': ['ZTE', 'Racer 2'],\n 'ZTE Roamer': ['ZTE', 'Roamer'],\n 'N860': ['ZTE', 'Warp'],\n 'N880': ['ZTE', 'Blade'],\n 'ZTE-T U802': ['ZTE', 'T-U802'],\n 'ZTE-T U806': ['ZTE', 'T-U806'],\n 'ZTE-T U812': ['ZTE', 'T-U812'],\n 'ZTE-T U830': ['ZTE', 'T-U830'],\n 'ZTE-T U880': ['ZTE', 'T-U880'],\n 'ZTE T U880': ['ZTE', 'T-U880'],\n 'ZTE-TU880': ['ZTE', 'T-U880'],\n 'ZTE-TU900': ['ZTE', 'T-U900'],\n 'ZTE-T U960': ['ZTE', 'T-U960'],\n 'ZTE-TU960s': ['ZTE', 'T-U960'],\n 'ZTE-T U960s': ['ZTE', 'T-U960'],\n 'ZTE U N720': ['ZTE', 'U-N720'],\n 'ZTE-U V856': ['ZTE', 'U-V856'],\n 'ZTE-U V857': ['ZTE', 'U-V857'],\n 'ZTE-U V881': ['ZTE', 'U-V881'],\n 'ZTE-U X850': ['ZTE', 'U-X850'],\n 'ZTE-U X876': ['ZTE', 'U-X876'],\n 'ZTE-X876': ['ZTE', 'U-X876'],\n 'ZTE-C R750': ['ZTE', 'C-R750'],\n 'ZTE-C N600': ['ZTE', 'C-N600'],\n 'ZTE-C N600+': ['ZTE', 'C-N600'],\n 'ZTE-C N606': ['ZTE', 'C-N606'],\n 'ZTE-C N700': ['ZTE', 'C-N700'],\n 'ZTE-C N760': ['ZTE', 'C-N760'],\n 'ZTE-C N880': ['ZTE', 'C-N880'],\n 'ZTE-C N880S': ['ZTE', 'C-N880'],\n 'ZTE-C N880s': ['ZTE', 'C-N880'],\n 'ZTE-C X500': ['ZTE', 'C-X500'],\n 'ZTE-C X920': ['ZTE', 'C-X920'],\n 'ZXY-ZTE-C X920': ['ZTE', 'C-X920'],\n 'ZTE GV821': ['ZTE', 'G-V821'],\n 'ZTE N880E': ['ZTE', 'N880E'],\n 'ZTE-N880E': ['ZTE', 'N880E'],\n 'MIUI N880S': ['ZTE', 'N880S'],\n 'ZTE N882E': ['ZTE', 'N882E'],\n 'ZTE N855D': ['ZTE', 'N855D'],\n 'ZTE-N910': ['ZTE', 'N910'],\n 'E810': ['ZTE', 'E810'],\n 'u880': ['ZTE', 'U880'],\n 'ZTE U880E': ['ZTE', 'U880E'],\n 'U880': ['ZTE', 'U880'],\n 'ZTE U970': ['ZTE', 'U970'],\n 'ZTE V768': ['ZTE', 'V768'],\n 'ZTE-V856': ['ZTE', 'V856'],\n 'ZTE V877b': ['ZTE', 'V877'],\n 'ZTE V889D': ['ZTE', 'V889'],\n 'ZTE-Z990': ['ZTE', 'Z990'],\n 'ZTEU790': ['ZTE', 'U790'],\n '003Z': ['ZTE', 'Softbank 003Z'],\n '008Z': ['ZTE', 'Softbank 008Z'],\n '009Z': ['ZTE', 'Softbank Star7'],\n 'i-mobile i691': ['i-Mobile', 'i691'],\n 'i-mobile i695': ['i-Mobile', 'i695'],\n 'i-mobile i858': ['i-Mobile', 'i858'],\n 'i-mobile 3G 8500': ['i-Mobile', '3G 8500'],\n 'i-mobile I-Note': ['i-Mobile', 'i-Note', 'tablet'],\n 'Optimus Boston': ['Optimus', 'Boston'],\n 'Optimus San Francisco': ['Optimus', 'San Francisco'],\n 'Optimus Monte Carlo': ['Optimus', 'Monte Carlo'],\n 'Orange Boston': ['Orange', 'Boston'],\n 'Orange Monte Carlo': ['Orange', 'Monte Carlo'],\n 'San Francisco': ['Orange', 'San Francisco'],\n 'San Francisco for Orange': ['Orange', 'San Francisco'],\n 'Orange San Francisco': ['Orange', 'San Francisco'],\n 'MOVE': ['T-Mobile', 'MOVE'],\n 'T-Mobile G1': ['T-Mobile', 'G1'],\n 'T-Mobile G2': ['T-Mobile', 'G2'],\n 'T-Mobile G2 Touch': ['T-Mobile', 'G2'],\n 'LG-P999': ['T-Mobile', 'G2x'],\n 'LG-E739': ['T-Mobile', 'myTouch'],\n 'T-Mobile myTouch 3G': ['T-Mobile', 'myTouch 3G'],\n 'T-Mobile myTouch 3G Slide': ['T-Mobile', 'myTouch 3G Slide'],\n 'T-Mobile Espresso': ['T-Mobile', 'myTouch 3G Slide'],\n 'HTC myTouch 3G Slide': ['T-Mobile', 'myTouch 3G Slide'],\n 'T-Mobile myTouch 4G': ['T-Mobile', 'myTouch 4G'],\n 'HTC Glacier': ['T-Mobile', 'myTouch 4G'],\n 'HTC Panache': ['T-Mobile', 'myTouch 4G'],\n 'myTouch4G': ['T-Mobile', 'myTouch 4G'],\n 'My Touch 4G': ['T-Mobile', 'myTouch 4G'],\n 'HTC Mytouch 4G': ['T-Mobile', 'myTouch 4G'],\n 'HTC My Touch 4G': ['T-Mobile', 'myTouch 4G'],\n 'HTC mytouch4g': ['T-Mobile', 'myTouch 4G'],\n 'HTC myTouch 4G Slide': ['T-Mobile', 'myTouch 4G Slide'],\n 'myTouch 4G Slide': ['T-Mobile', 'myTouch 4G Slide'],\n 'T-Mobile myTouch Q': ['T-Mobile', 'myTouch Q'],\n 'LG-C800': ['T-Mobile', 'myTouch Q'],\n 'Pulse Mini': ['T-Mobile', 'Pulse Mini'],\n 'Vodafone 845': ['Vodafone', '845 Nova'],\n 'Vodafone 858': ['Vodafone', '858 Smart'],\n 'Vodafone 945': ['Vodafone', '945'],\n 'Vodafone Smart II': ['Vodafone', 'Smart II'],\n 'SmartTab10': ['Vodafone', 'SmartTab 10', 'tablet'],\n 'SCH-N719': ['Samsung', 'Galaxy Note II'],\n 'Coolpad 8190': ['Coolpad', '8190'],\n 'U705T': ['Oppo', 'Ulike2'],\n 'Coolpad 8020+': ['Coolpad', '8020'],\n 'Huawei Y310-5000': ['Huawei', 'Y310'],\n 'GT-S7572': ['Samsung', 'Galaxy Trend Duos II'],\n 'Lenovo A278t': ['Lenovo', 'A278t'],\n 'Lenovo A690': ['Lenovo', 'A690'],\n 'GT-I8262D': ['Samsung', 'LePhone I8262D'],\n 'Lenovo A278t': ['Lenovo', 'A278t'],\n 'MI 2C': ['Xiaomi', 'MI-TWO'],\n 'Coolpad 8070': ['Coolpad', '8070'],\n 'R813T': ['Oppo', 'R813T'],\n 'ZTE U930': ['ZTE', 'U930'],\n 'Lenovo A360': ['Lenovo', 'LePhone A360'],\n 'SCH-N719': ['Samsung', 'Galaxy Note II'],\n 'Coolpad 8010': ['Coolpad', '8010'],\n 'LENOVO-Lenovo-A288t': ['Lenovo', 'A288t'],\n 'U701T': ['Oppo', 'U701T'],\n 'ZTEU795': ['Coolpad', 'U795'],\n 'Haier-HT-I617': ['Haier', 'I617'],\n 'ZTEU880s': ['ZTE', 'T-U880'],\n 'GT-S6352': ['Samsung', 'GT-S6352'],\n 'GT-S7568': ['Samsung', 'GT-S7568'],\n 'K-Touch T619+': ['K-Touch', 'T619'],\n 'MI 2A': ['Xiaomi', 'MI-TWO A'],\n 'GT-N7108': ['Samsung', 'Galaxy Note II'],\n 'K-Touch T621': ['K-Touch', 'T621'],\n 'LENOVO-Lenovo-A298t': ['Lenovo', 'A298'],\n 'Coolpad 8150': ['Coolpad', '8150'],\n '5860S': ['Coolpad', '5860'],\n 'ZTEU807': ['ZTE', 'U807'],\n 'SCH-I739': ['Samsung', 'SCH-I739'],\n 'SCH-I829': ['Samsung', 'SCH-I829'],\n 'HS-E830': ['Hisense', 'E830'],\n 'HS-E920': ['Hisense', 'E920'],\n 'Lenovo S720': ['Lenovo', 'S720'],\n 'MI 2C': ['Xiaomi', 'MI-TWO'],\n 'OPPO R813T': ['Oppo', 'R813'],\n 'SCH-I879': ['Samsung', 'Galaxy Note'],\n 'GT-S6102E': ['Samsung', 'Galaxy Y Duos']\n }\n\n var BLACKBERRY_MODELS = {\n '9600': 'Bold',\n '9650': 'Bold',\n '9700': 'Bold',\n '9780': 'Bold',\n '9790': 'Bold',\n '9900': 'Bold',\n '9930': 'Bold',\n '8300': 'Curve',\n '8310': 'Curve',\n '8320': 'Curve',\n '8330': 'Curve',\n '8350i': 'Curve',\n '8520': 'Curve',\n '8530': 'Curve',\n '8900': 'Curve',\n '9220': 'Curve',\n '9300': 'Curve',\n '9330': 'Curve',\n '9350': 'Curve',\n '9360': 'Curve',\n '9370': 'Curve',\n '9380': 'Curve',\n '8100': 'Pearl',\n '8110': 'Pearl',\n '8120': 'Pearl',\n '8130': 'Pearl',\n '8220': 'Pearl',\n '8230': 'Pearl',\n '9100': 'Pearl',\n '9105': 'Pearl',\n '9530': 'Storm',\n '9550': 'Storm',\n '9670': 'Style',\n '9800': 'Torch',\n '9810': 'Torch',\n '9850': 'Torch',\n '9860': 'Torch',\n '9630': 'Tour',\n '9981': 'Porsche P'\n };\n\n\n var Version = function () {\n this.initialize.apply(this, Array.prototype.slice.call(arguments))\n };\n Version.prototype = {\n initialize: function (v) {\n this.original = v.value || null;\n this.alias = v.alias || null;\n \n }\n }\n\n var Detected = function () {\n this.initialize.apply(this, arguments)\n };\n Detected.prototype = {\n initialize: function (ua, options) {\n this.options = {\n useFeatures: options && options.useFeatures || false,\n detectCamouflage: options && options.detectCamouflage || true\n }\n\n this.browser = {\n 'stock': true,\n 'hidden': false,\n 'channel': ''\n };\n this.engine = {};\n this.os = {};\n this.device = {\n 'type': 'desktop',\n 'identified': false\n };\n\n this.camouflage = false;\n this.features = [];\n this.detect(ua);\n },\n\n detect: function (ua) {\n\n /****************************************************\n * Unix\n */\n\n if (ua.match('Unix')) {\n this.os.name = 'Unix';\n }\n\n /****************************************************\n * FreeBSD\n */\n\n if (ua.match('FreeBSD')) {\n this.os.name = 'FreeBSD';\n }\n\n /****************************************************\n * OpenBSD\n */\n\n if (ua.match('OpenBSD')) {\n this.os.name = 'OpenBSD';\n }\n\n /****************************************************\n * NetBSD\n */\n\n if (ua.match('NetBSD')) {\n this.os.name = 'NetBSD';\n }\n\n /****************************************************\n * SunOS\n */\n\n if (ua.match('SunOS')) {\n this.os.name = 'Solaris';\n }\n\n /****************************************************\n * Linux\n */\n\n if (ua.match('Linux')) {\n this.os.name = 'Linux';\n\n if (ua.match('CentOS')) {\n this.os.name = 'CentOS';\n if (match = /CentOS\\/[0-9\\.\\-]+el([0-9_]+)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1].replace(/_/g, '.')\n });\n }\n }\n\n if (ua.match('Debian')) {\n this.os.name = 'Debian';\n }\n\n if (ua.match('Fedora')) {\n this.os.name = 'Fedora';\n if (match = /Fedora\\/[0-9\\.\\-]+fc([0-9]+)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n }\n\n if (ua.match('Gentoo')) {\n this.os.name = 'Gentoo';\n }\n\n if (ua.match('Kubuntu')) {\n this.os.name = 'Kubuntu';\n }\n\n if (ua.match('Mandriva Linux')) {\n this.os.name = 'Mandriva';\n if (match = /Mandriva Linux\\/[0-9\\.\\-]+mdv([0-9]+)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n }\n\n if (ua.match('Mageia')) {\n this.os.name = 'Mageia';\n if (match = /Mageia\\/[0-9\\.\\-]+mga([0-9]+)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n }\n\n if (ua.match('Red Hat')) {\n this.os.name = 'Red Hat';\n if (match = /Red Hat[^\\/]*\\/[0-9\\.\\-]+el([0-9_]+)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1].replace(/_/g, '.')\n });\n }\n }\n\n if (ua.match('Slackware')) {\n this.os.name = 'Slackware';\n }\n\n if (ua.match('SUSE')) {\n this.os.name = 'SUSE';\n }\n\n if (ua.match('Turbolinux')) {\n this.os.name = 'Turbolinux';\n }\n\n if (ua.match('Ubuntu')) {\n this.os.name = 'Ubuntu';\n if (match = /Ubuntu\\/([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n }\n }\n\n /****************************************************\n * iOS\n */\n\n if (ua.match('iPhone( Simulator)?;') || ua.match('iPad;') || ua.match('iPod;') || ua.match(/iPhone\\s*\\d*s?[cp]?;/i)) {\n this.os.name = 'iOS';\n this.os.version = new Version({\n value: '1.0'\n });\n\n if (match = /OS (.*) like Mac OS X/.exec(ua)) {\n this.os.version = new Version({\n value: match[1].replace(/_/g, '.')\n });\n }\n\n if (ua.match('iPhone Simulator;')) {\n this.device.type = 'emulator';\n } else if (ua.match('iPod;')) {\n this.device.type = 'media';\n this.device.manufacturer = 'Apple';\n this.device.model = 'iPod Touch';\n } else if (ua.match('iPhone;') || ua.match(/iPhone\\s*\\d*s?[cp]?;/i)) {\n this.device.type = 'mobile';\n this.device.manufacturer = 'Apple';\n this.device.model = 'iPhone';\n } else {\n this.device.type = 'tablet';\n this.device.manufacturer = 'Apple';\n this.device.model = 'iPad';\n }\n\n this.device.identified = true;\n }\n\n /****************************************************\n * MacOS X\n */\n\n else if (ua.match('Mac OS X')) {\n this.os.name = 'Mac OS X';\n\n if (match = /Mac OS X (10[0-9\\._]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1].replace(/_/g, '.')\n });\n }\n }\n\n /****************************************************\n * Windows\n */\n\n if (ua.match('Windows')) {\n this.os.name = 'Windows';\n\n if (match = /Windows NT ([0-9]\\.[0-9])/.exec(ua)) {\n this.os.version = parseVersion(match[1]);\n\n switch (match[1]) {\n case '6.2':\n this.os.version = new Version({\n value: match[1],\n alias: '8'\n });\n break;\n case '6.1':\n this.os.version = new Version({\n value: match[1],\n alias: '7'\n });\n break;\n case '6.0':\n this.os.version = new Version({\n value: match[1],\n alias: 'Vista'\n });\n break;\n case '5.2':\n this.os.version = new Version({\n value: match[1],\n alias: 'Server 2003'\n });\n break;\n case '5.1':\n this.os.version = new Version({\n value: match[1],\n alias: 'XP'\n });\n break;\n case '5.0':\n this.os.version = new Version({\n value: match[1],\n alias: '2000'\n });\n break;\n default:\n this.os.version = new Version({\n value: match[1],\n alias: 'NT ' + this.os.version\n });\n }\n }\n\n if (ua.match('Windows 95') || ua.match('Win95') || ua.match('Win 9x 4.00')) {\n this.os.version = new Version({\n value: '4.0',\n alias: '95'\n });\n }\n\n if (ua.match('Windows 98') || ua.match('Win98') || ua.match('Win 9x 4.10')) {\n this.os.version = new Version({\n value: '4.1',\n alias: '98'\n });\n }\n\n if (ua.match('Windows ME') || ua.match('WinME') || ua.match('Win 9x 4.90')) {\n this.os.version = new Version({\n value: '4.9',\n alias: 'ME'\n });\n }\n\n if (ua.match('Windows XP') || ua.match('WinXP')) {\n this.os.name = new Version({\n value: '5.1',\n alias: 'XP'\n });\n }\n\n if (ua.match('WP7')) {\n this.os.name = 'Windows Phone';\n this.os.version = new Version({\n value: '7.0',\n details: 2\n });\n this.device.type = 'mobile';\n this.browser.mode = 'desktop';\n }\n\n if (ua.match('Windows CE') || ua.match('WinCE') || ua.match('WindowsCE')) {\n if (ua.match(' IEMobile')) {\n this.os.name = 'Windows Mobile';\n\n if (ua.match(' IEMobile 8')) {\n this.os.version = new Version({\n value: '6.5',\n details: 2\n });\n }\n\n if (ua.match(' IEMobile 7')) {\n this.os.version = new Version({\n value: '6.1',\n details: 2\n });\n }\n\n if (ua.match(' IEMobile 6')) {\n this.os.version = new Version({\n value: '6.0',\n details: 2\n });\n }\n } else {\n this.os.name = 'Windows CE';\n\n if (match = /WindowsCEOS\\/([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1],\n details: 2\n });\n }\n\n if (match = /Windows CE ([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1],\n details: 2\n });\n }\n }\n\n this.device.type = 'mobile';\n }\n\n if (ua.match('Windows Mobile')) {\n this.os.name = 'Windows Mobile';\n this.device.type = 'mobile';\n }\n\n if (match = /WindowsMobile\\/([0-9.]*)/.exec(ua)) {\n this.os.name = 'Windows Mobile';\n this.os.version = new Version({\n value: match[1],\n details: 2\n });\n this.device.type = 'mobile';\n }\n\n if (ua.match('Windows Phone [0-9]')) {\n this.os.name = 'Windows Mobile';\n this.os.version = new Version({\n value: ua.match(/Windows Phone ([0-9.]*)/)[1],\n details: 2\n });\n this.device.type = 'mobile';\n }\n\n if (ua.match('Windows Phone OS')) {\n this.os.name = 'Windows Phone';\n this.os.version = new Version({\n value: ua.match(/Windows Phone OS ([0-9.]*)/)[1],\n details: 2\n });\n\n if (this.os.version < 7) {\n this.os.name = 'Windows Mobile';\n }\n\n if (match = /IEMobile\\/[^;]+; ([^;]+); ([^;]+)[;|\\)]/.exec(ua)) {\n this.device.manufacturer = match[1];\n this.device.model = match[2];\n }\n\n this.device.type = 'mobile';\n\n var manufacturer = this.device.manufacturer;\n var model = cleanupModel(this.device.model);\n\n if (typeof WINDOWS_PHONE_MODELS[manufacturer] !== 'undefined' && typeof WINDOWS_PHONE_MODELS[manufacturer][model] !== 'undefined') {\n this.device.manufacturer = WINDOWS_PHONE_MODELS[manufacturer][model][0];\n this.device.model = WINDOWS_PHONE_MODELS[manufacturer][model][1];\n this.device.identified = true;\n }\n\n if (manufacturer === 'Microsoft' && model === 'XDeviceEmulator') {\n this.device.manufacturer = null;\n this.device.model = null;\n this.device.type = 'emulator';\n this.device.identified = true;\n }\n }\n }\n\n /****************************************************\n * Android\n */\n if (ua.match('Android')) {\n this.os.name = 'Android';\n this.os.version = null;\n\n if (match = /Android(?: )?(?:AllPhone_|CyanogenMod_)?(?:\\/)?v?([0-9.]+)/.exec(ua.replace('-update', '.'))) {\n this.os.version = new Version({\n value: match[1],\n details: 3\n })\n }\n\n if (ua.match('Android Eclair')) {\n this.os.version = new Version({\n value: '2.0',\n details: 3\n });\n }\n\n this.device.type = 'mobile';\n if (this.os.version >= 3) this.device.type = 'tablet';\n if (this.os.version >= 4 && ua.match('Mobile')) this.device.type = 'mobile';\n\n if (match = /Eclair; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?) Build\\/([^\\/]*)\\//.exec(ua)) {\n this.device.model = match[1];\n } else if (match = /; ([^;]*[^;\\s])\\s+Build/.exec(ua)) {\n this.device.model = match[1];\n } else if (match = /[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; ([^;]*[^;\\s]);\\s+Build/.exec(ua)) {\n this.device.model = match[1];\n } else if (match = /\\(([^;]+);U;Android\\/[^;]+;[0-9]+\\*[0-9]+;CTC\\/2.0\\)/.exec(ua)) {\n this.device.model = match[1];\n } else if (match = /;\\s?([^;]+);\\s?[0-9]+\\*[0-9]+;\\s?CTC\\/2.0/.exec(ua)) {\n this.device.model = match[1];\n } else if (match = /zh-cn;\\s*(.*?)(\\/|build)/i.exec(ua)) {\n this.device.model = match[1];\n } else if (match = /Android [^;]+; (?:[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?; )?([^)]+)\\)/.exec(ua)) {\n if (!ua.match(/[a-zA-Z][a-zA-Z](?:[-_][a-zA-Z][a-zA-Z])?/)) {\n this.device.model = match[1];\n }\n } else if (match = /^(.+?)\\/\\S+/i.exec(ua)) {\n this.device.model = match[1];\n }\n\n\n /* Sometimes we get a model name that starts with Android, in that case it is a mismatch and we should ignore it */\n if (this.device.model && this.device.model.substring(0, 7) === 'Android') {\n this.device.model = null;\n }\n\n if (this.device.model) {\n var model = cleanupModel(this.device.model);\n\n if (typeof ANDROID_MODELS[model] !== 'undefined') {\n this.device.manufacturer = ANDROID_MODELS[model][0];\n this.device.model = ANDROID_MODELS[model][1];\n if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n this.device.identified = true;\n }\n\n if (model === 'Emulator' || model === 'x86 Emulator' || model === 'x86 VirtualBox' || model === 'vm') {\n this.device.manufacturer = null;\n this.device.model = null;\n this.device.type = 'emulator';\n this.device.identified = true;\n }\n }\n\n if (ua.match('HP eStation')) {\n this.device.manufacturer = 'HP';\n this.device.model = 'eStation';\n this.device.type = 'tablet';\n this.device.identified = true;\n }\n if (ua.match('Pre\\/1.0')) {\n this.device.manufacturer = 'Palm';\n this.device.model = 'Pre';\n this.device.identified = true;\n }\n if (ua.match('Pre\\/1.1')) {\n this.device.manufacturer = 'Palm';\n this.device.model = 'Pre Plus';\n this.device.identified = true;\n }\n if (ua.match('Pre\\/1.2')) {\n this.device.manufacturer = 'Palm';\n this.device.model = 'Pre 2';\n this.device.identified = true;\n }\n if (ua.match('Pre\\/3.0')) {\n this.device.manufacturer = 'HP';\n this.device.model = 'Pre 3';\n this.device.identified = true;\n }\n if (ua.match('Pixi\\/1.0')) {\n this.device.manufacturer = 'Palm';\n this.device.model = 'Pixi';\n this.device.identified = true;\n }\n if (ua.match('Pixi\\/1.1')) {\n this.device.manufacturer = 'Palm';\n this.device.model = 'Pixi Plus';\n this.device.identified = true;\n }\n if (ua.match('P160UN?A?\\/1.0')) {\n this.device.manufacturer = 'HP';\n this.device.model = 'Veer';\n this.device.identified = true;\n }\n }\n\n /****************************************************\n * Google TV\n */\n\n if (ua.match('GoogleTV')) {\n this.os.name = 'Google TV';\n\n if (ua.match('Chrome/5.')) {\n this.os.version = new Version({\n value: '1'\n });\n }\n\n if (ua.match('Chrome/11.')) {\n this.os.version = new Version({\n value: '2'\n });\n }\n\n this.device.type = 'television';\n }\n\n /****************************************************\n * WoPhone\n */\n\n if (ua.match('WoPhone')) {\n this.os.name = 'WoPhone';\n\n if (match = /WoPhone\\/([0-9\\.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n this.device.type = 'mobile';\n }\n\n /****************************************************\n * BlackBerry\n */\n\n if (ua.match('BlackBerry')) {\n this.os.name = 'BlackBerry OS';\n\n if (!ua.match('Opera')) {\n if (match = /BlackBerry([0-9]*)\\/([0-9.]*)/.exec(ua)) {\n this.device.model = match[1];\n this.os.version = new Version({\n value: match[2],\n details: 2\n });\n }\n\n if (match = /; BlackBerry ([0-9]*);/.exec(ua)) {\n this.device.model = match[1];\n }\n\n if (match = /Version\\/([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1],\n details: 2\n });\n }\n\n if (this.os.version >= 10) {\n this.os.name = 'BlackBerry';\n }\n\n if (typeof this.device.model !== 'undefined') {\n if (typeof BLACKBERRY_MODELS[this.device.model] !== 'undefined') {\n this.device.model = 'BlackBerry ' + BLACKBERRY_MODELS[this.device.model] + ' ' + this.device.model;\n } else {\n this.device.model = 'BlackBerry ' + this.device.model;\n }\n } else {\n this.device.model = 'BlackBerry';\n }\n } else {\n this.device.model = 'BlackBerry';\n }\n\n this.device.manufacturer = 'RIM';\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n /****************************************************\n * BlackBerry PlayBook\n */\n\n if (ua.match('RIM Tablet OS')) {\n this.os.name = 'BlackBerry Tablet OS';\n this.os.version = new Version({\n value: ua.match(/RIM Tablet OS ([0-9.]*)/)[1],\n details: 2\n });\n\n this.device.manufacturer = 'RIM';\n this.device.model = 'BlackBerry PlayBook';\n this.device.type = 'tablet';\n this.device.identified = true;\n } else if (ua.match('PlayBook')) {\n if (match = /Version\\/(10[0-9.]*)/.exec(ua)) {\n this.os.name = 'BlackBerry';\n this.os.version = new Version({\n value: match[1],\n details: 2\n });\n\n this.device.manufacturer = 'RIM';\n this.device.model = 'BlackBerry PlayBook';\n this.device.type = 'tablet';\n this.device.identified = true;\n }\n }\n\n\n /****************************************************\n * WebOS\n */\n\n if (ua.match('(?:web|hpw)OS')) {\n this.os.name = 'webOS';\n this.os.version = new Version({\n value: ua.match(/(?:web|hpw)OS\\/([0-9.]*)/)[1]\n });\n\n if (ua.match('tablet')) this.device.type = 'tablet';\n else this.device.type = 'mobile';\n\n this.device.manufacturer = ua.match('hpwOS') ? 'HP' : 'Palm';\n if (ua.match('Pre\\/1.0')) this.device.model = 'Pre';\n if (ua.match('Pre\\/1.1')) this.device.model = 'Pre Plus';\n if (ua.match('Pre\\/1.2')) this.device.model = 'Pre2';\n if (ua.match('Pre\\/3.0')) this.device.model = 'Pre3';\n if (ua.match('Pixi\\/1.0')) this.device.model = 'Pixi';\n if (ua.match('Pixi\\/1.1')) this.device.model = 'Pixi Plus';\n if (ua.match('P160UN?A?\\/1.0')) this.device.model = 'Veer';\n if (ua.match('TouchPad\\/1.0')) this.device.model = 'TouchPad';\n\n if (ua.match('Emulator\\/') || ua.match('Desktop\\/')) {\n this.device.type = 'emulator';\n this.device.manufacturer = null;\n this.device.model = null;\n }\n\n this.device.identified = true;\n }\n\n /****************************************************\n * S60\n */\n\n if (ua.match('Symbian') || ua.match('Series[ ]?60') || ua.match('S60')) {\n this.os.name = 'Series60';\n\n if (ua.match('SymbianOS/9.1') && !ua.match('Series60')) {\n this.os.version = new Version({\n value: '3.0'\n });\n }\n\n if (match = /Series60\\/([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n if (match = /Nokia([^\\/;]+)[\\/|;]/.exec(ua)) {\n if (match[1] !== 'Browser') {\n this.device.manufacturer = 'Nokia';\n this.device.model = match[1];\n this.device.identified = true;\n }\n }\n\n if (match = /Vertu([^\\/;]+)[\\/|;]/.exec(ua)) {\n this.device.manufacturer = 'Vertu';\n this.device.model = match[1];\n this.device.identified = true;\n }\n\n if (match = /Symbian; U; ([^;]+); [a-z][a-z]\\-[a-z][a-z]/i.exec(ua)) {\n this.device.manufacturer = 'Nokia';\n this.device.model = match[1];\n this.device.identified = true;\n }\n\n if (match = /Samsung\\/([^;]*);/.exec(ua)) {\n this.device.manufacturer = STRINGS_SAMSUNG;\n this.device.model = match[1];\n this.device.identified = true;\n }\n\n this.device.type = 'mobile';\n }\n\n /****************************************************\n * S40\n */\n\n if (ua.match('Series40')) {\n this.os.name = 'Series40';\n\n if (match = /Nokia([^\\/]+)\\//.exec(ua)) {\n this.device.manufacturer = 'Nokia';\n this.device.model = match[1];\n this.device.identified = true;\n }\n\n this.device.type = 'mobile';\n }\n\n /****************************************************\n * MeeGo\n */\n\n if (ua.match('MeeGo')) {\n this.os.name = 'MeeGo';\n this.device.type = 'mobile';\n\n if (match = /Nokia([^\\)]+)\\)/.exec(ua)) {\n this.device.manufacturer = 'Nokia';\n this.device.model = match[1];\n this.device.identified = true;\n }\n }\n\n /****************************************************\n * Maemo\n */\n\n if (ua.match('Maemo')) {\n this.os.name = 'Maemo';\n this.device.type = 'mobile';\n\n if (match = /(N[0-9]+)/.exec(ua)) {\n this.device.manufacturer = 'Nokia';\n this.device.model = match[1];\n this.device.identified = true;\n }\n }\n\n /****************************************************\n * Tizen\n */\n\n if (ua.match('Tizen')) {\n this.os.name = 'Tizen';\n\n if (match = /Tizen[\\/ ]([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n this.device.type = 'mobile';\n\n if (match = /\\(([^;]+); ([^\\/]+)\\//.exec(ua)) {\n if (match[1] !== 'Linux') {\n this.device.manufacturer = match[1];\n this.device.model = match[2];\n\n if (typeof TIZEN_MODELS[this.device.manufacturer] !== 'undefined' && typeof TIZEN_MODELS[this.device.manufacturer][this.device.model] !== 'undefined') {\n var manufacturer = this.device.manufacturer;\n var model = cleanupModel(this.device.model);\n\n this.device.manufacturer = TIZEN_MODELS[manufacturer][model][0];\n this.device.model = TIZEN_MODELS[manufacturer][model][1];\n this.device.identified = true;\n }\n }\n }\n }\n\n /****************************************************\n * Bada\n */\n\n if (ua.match('[b|B]ada')) {\n this.os.name = 'Bada';\n\n if (match = /[b|B]ada\\/([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n this.device.type = 'mobile';\n\n if (match = /\\(([^;]+); ([^\\/]+)\\//.exec(ua)) {\n this.device.manufacturer = match[1];\n this.device.model = cleanupModel(match[2]);\n }\n\n if (typeof BADA_MODELS[this.device.manufacturer] !== 'undefined' && typeof BADA_MODELS[this.device.manufacturer][this.device.model] !== 'undefined') {\n var manufacturer = this.device.manufacturer;\n var model = cleanupModel(this.device.model);\n\n this.device.manufacturer = BADA_MODELS[manufacturer][model][0];\n this.device.model = BADA_MODELS[manufacturer][model][1];\n this.device.identified = true;\n }\n }\n\n /****************************************************\n * Brew\n */\n\n if (ua.match(/BREW/i) || ua.match('BMP; U')) {\n this.os.name = 'Brew';\n this.device.type = 'mobile';\n\n if (match = /BREW; U; ([0-9.]*)/i.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n } else if (match = /;BREW\\/([0-9.]*)/i.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n\n if (match = /\\(([^;]+);U;REX\\/[^;]+;BREW\\/[^;]+;(?:.*;)?[0-9]+\\*[0-9]+;CTC\\/2.0\\)/.exec(ua)) {\n this.device.model = match[1];\n }\n\n if (this.device.model) {\n var model = cleanupModel(this.device.model);\n\n if (typeof BREW_MODELS[model] !== 'undefined') {\n this.device.manufacturer = BREW_MODELS[model][0];\n this.device.model = BREW_MODELS[model][1];\n this.device.identified = true;\n }\n }\n }\n\n /****************************************************\n * MTK\n */\n\n if (ua.match(/\\(MTK;/)) {\n this.os.name = 'MTK';\n this.device.type = 'mobile';\n }\n\n /****************************************************\n * CrOS\n */\n\n if (ua.match('CrOS')) {\n this.os.name = 'Chrome OS';\n this.device.type = 'desktop';\n }\n\n /****************************************************\n * Joli OS\n */\n\n if (ua.match('Joli OS')) {\n this.os.name = 'Joli OS';\n this.device.type = 'desktop';\n\n if (match = /Joli OS\\/([0-9.]*)/i.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Haiku\n */\n\n if (ua.match('Haiku')) {\n this.os.name = 'Haiku';\n this.device.type = 'desktop';\n }\n\n /****************************************************\n * QNX\n */\n\n if (ua.match('QNX')) {\n this.os.name = 'QNX';\n this.device.type = 'mobile';\n }\n\n /****************************************************\n * OS/2 Warp\n */\n\n if (ua.match('OS\\/2; Warp')) {\n this.os.name = 'OS/2 Warp';\n this.device.type = 'desktop';\n\n if (match = /OS\\/2; Warp ([0-9.]*)/i.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Grid OS\n */\n\n if (ua.match('Grid OS')) {\n this.os.name = 'Grid OS';\n this.device.type = 'tablet';\n\n if (match = /Grid OS ([0-9.]*)/i.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * AmigaOS\n */\n\n if (ua.match(/AmigaOS/i)) {\n this.os.name = 'AmigaOS';\n this.device.type = 'desktop';\n\n if (match = /AmigaOS ([0-9.]*)/i.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n }\n\n /****************************************************\n * MorphOS\n */\n\n if (ua.match(/MorphOS/i)) {\n this.os.name = 'MorphOS';\n this.device.type = 'desktop';\n\n if (match = /MorphOS ([0-9.]*)/i.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n }\n\n /****************************************************\n * Kindle\n */\n\n if (ua.match('Kindle') && !ua.match('Fire')) {\n this.os.name = '';\n\n this.device.manufacturer = 'Amazon';\n this.device.model = 'Kindle';\n this.device.type = 'ereader';\n\n if (ua.match('Kindle\\/2.0')) this.device.model = 'Kindle 2';\n if (ua.match('Kindle\\/3.0')) this.device.model = 'Kindle 3 or later';\n\n this.device.identified = true;\n }\n\n /****************************************************\n * NOOK\n */\n\n if (ua.match('nook browser')) {\n this.os.name = 'Android';\n\n this.device.manufacturer = 'Barnes & Noble';\n this.device.model = 'NOOK';\n this.device.type = 'ereader';\n this.device.identified = true;\n }\n\n /****************************************************\n * Bookeen\n */\n\n if (ua.match('bookeen\\/cybook')) {\n this.os.name = '';\n\n this.device.manufacturer = 'Bookeen';\n this.device.model = 'Cybook';\n this.device.type = 'ereader';\n\n if (ua.match('Orizon')) {\n this.device.model = 'Cybook Orizon';\n }\n\n this.device.identified = true;\n }\n\n /****************************************************\n * Sony Reader\n */\n\n if (ua.match('EBRD1101')) {\n this.os.name = '';\n\n this.device.manufacturer = 'Sony';\n this.device.model = 'Reader';\n this.device.type = 'ereader';\n this.device.identified = true;\n }\n\n /****************************************************\n * iRiver\n */\n\n if (ua.match('Iriver ;')) {\n this.os.name = '';\n\n this.device.manufacturer = 'iRiver';\n this.device.model = 'Story';\n this.device.type = 'ereader';\n\n if (ua.match('EB07')) {\n this.device.model = 'Story HD EB07';\n }\n\n this.device.identified = true;\n }\n\n /****************************************************\n * Nintendo\n *\n * Opera/9.30 (Nintendo Wii; U; ; 3642; en)\n * Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)\n * Opera/9.50 (Nintendo DSi; Opera/507; U; en-US)\n * Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7455.US\n * Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7455.EU\n */\n\n if (ua.match('Nintendo Wii')) {\n this.os.name = '';\n\n this.device.manufacturer = 'Nintendo';\n this.device.model = 'Wii';\n this.device.type = 'gaming';\n this.device.identified = true;\n }\n\n if (ua.match('Nintendo DSi')) {\n this.os.name = '';\n\n this.device.manufacturer = 'Nintendo';\n this.device.model = 'DSi';\n this.device.type = 'gaming';\n this.device.identified = true;\n }\n\n if (ua.match('Nintendo 3DS')) {\n this.os.name = '';\n\n this.device.manufacturer = 'Nintendo';\n this.device.model = '3DS';\n this.device.type = 'gaming';\n\n if (match = /Version\\/([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n this.device.identified = true;\n }\n\n\n if (ua.match('PlayStation Portable')) {\n this.os.name = '';\n\n this.device.manufacturer = 'Sony';\n this.device.model = 'Playstation Portable';\n this.device.type = 'gaming';\n this.device.identified = true;\n }\n\n if (ua.match('PlayStation Vita')) {\n this.os.name = '';\n\n if (match = /PlayStation Vita ([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n this.device.manufacturer = 'Sony';\n this.device.model = 'PlayStation Vita';\n this.device.type = 'gaming';\n this.device.identified = true;\n }\n\n if (ua.match(/PlayStation 3/i)) {\n this.os.name = '';\n\n if (match = /PLAYSTATION 3;? ([0-9.]*)/.exec(ua)) {\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n this.device.manufacturer = 'Sony';\n this.device.model = 'Playstation 3';\n this.device.type = 'gaming';\n this.device.identified = true;\n }\n\n /****************************************************\n * Panasonic Smart Viera\n *\n * Mozilla/5.0 (FreeBSD; U; Viera; ja-JP) AppleWebKit/535.1 (KHTML, like Gecko) Viera/1.2.4 Chrome/14.0.835.202 Safari/535.1\n */\n\n if (ua.match('Viera')) {\n this.os.name = '';\n this.device.manufacturer = 'Panasonic';\n this.device.model = 'Smart Viera';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n\n /****************************************************\n * Sharp AQUOS TV\n *\n * Mozilla/5.0 (DTV) AppleWebKit/531.2 (KHTML, like Gecko) AQUOSBrowser/1.0 (US00DTV;V;0001;0001)\n * Mozilla/5.0 (DTV) AppleWebKit/531.2+ (KHTML, like Gecko) Espial/6.0.4 AQUOSBrowser/1.0 (CH00DTV;V;0001;0001)\n * Opera/9.80 (Linux armv6l; U; en) Presto/2.8.115 Version/11.10 AQUOS-AS/1.0 LC-40LE835X\n */\n\n if (ua.match('AQUOSBrowser') || ua.match('AQUOS-AS')) {\n this.os.name = '';\n this.device.manufacturer = STRINGS_SHARP;\n this.device.model = 'Aquos TV';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n\n /****************************************************\n * Samsung Smart TV\n *\n * Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV; Maple2012) AppleWebKit/534.7 (KHTML, like Gecko) SmartTV Safari/534.7\n * Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+\n */\n\n if (ua.match('SMART-TV')) {\n this.os.name = '';\n this.device.manufacturer = STRINGS_SAMSUNG;\n this.device.model = 'Smart TV';\n this.device.type = 'television';\n this.device.identified = true;\n\n if (match = /Maple([0-9]*)/.exec(ua)) {\n this.device.model += ' ' + match[1];\n }\n }\n\n /****************************************************\n * Sony Internet TV\n *\n * Opera/9.80 (Linux armv7l; U; InettvBrowser/2.2(00014A;SonyDTV115;0002;0100) KDL-46EX640; CC/USA; en) Presto/2.8.115 Version/11.10\n * Opera/9.80 (Linux armv7l; U; InettvBrowser/2.2(00014A;SonyDTV115;0002;0100) KDL-40EX640; CC/USA; en) Presto/2.10.250 Version/11.60\n * Opera/9.80 (Linux armv7l; U; InettvBrowser/2.2(00014A;SonyDTV115;0002;0100) N/A; CC/USA; en) Presto/2.8.115 Version/11.10\n * Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) ; CC/JPN; en) Presto/2.9.167 Version/11.50\n * Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) AZ2CVT2; CC/CAN; en) Presto/2.7.61 Version/11.00\n * Opera/9.80 (Linux armv6l; Opera TV Store/4207; U; (SonyBDP/BDV11); en) Presto/2.9.167 Version/11.50\n * Opera/9.80 (Linux armv6l ; U; (SonyBDP/BDV11); en) Presto/2.6.33 Version/10.60\n * Opera/9.80 (Linux armv6l; U; (SonyBDP/BDV11); en) Presto/2.8.115 Version/11.10\n */\n\n if (ua.match('SonyDTV|SonyBDP|SonyCEBrowser')) {\n this.os.name = '';\n this.device.manufacturer = 'Sony';\n this.device.model = 'Internet TV';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * Philips Net TV\n *\n * Opera/9.70 (Linux armv6l ; U; CE-HTML/1.0 NETTV/2.0.2; en) Presto/2.2.1\n * Opera/9.80 (Linux armv6l ; U; CE-HTML/1.0 NETTV/3.0.1;; en) Presto/2.6.33 Version/10.60\n * Opera/9.80 (Linux mips; U; CE-HTML/1.0 NETTV/3.0.1; PHILIPS-AVM-2012; en) Presto/2.9.167 Version/11.50\n * Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.6.33 Version/10.70\n * Opera/9.80 (Linux i686; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.9.167 Version/11.50\n */\n\n if (ua.match('NETTV\\/')) {\n this.os.name = '';\n this.device.manufacturer = 'Philips';\n this.device.model = 'Net TV';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * LG NetCast TV\n *\n * Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ LG Browser/5.00.00(+mouse+3D+SCREEN+TUNER; LGE; GLOBAL-PLAT4; 03.09.22; 0x00000001;); LG NetCast.TV-2012\n * Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ LG Browser/5.00.00(+SCREEN+TUNER; LGE; GLOBAL-PLAT4; 01.00.00; 0x00000001;); LG NetCast.TV-2012\n * Mozilla/5.0 (DirectFB; U; Linux armv6l; en) AppleWebKit/531.2 (KHTML, like Gecko) Safari/531.2 LG Browser/4.1.4( BDP; LGE; Media/BD660; 6970; abc;); LG NetCast.Media-2011\n * Mozilla/5.0 (DirectFB; U; Linux 7631; en) AppleWebKit/531.2 (KHTML, like Gecko) Safari/531.2 LG Browser/4.1.4( NO_NUM; LGE; Media/SP520; ST.3.97.409.F; 0x00000001;); LG NetCast.Media-2011\n * Mozilla/5.0 (DirectFB; U; Linux 7630; en) AppleWebKit/531.2 (KHTML, like Gecko) Safari/531.2 LG Browser/4.1.4( 3D BDP NO_NUM; LGE; Media/ST600; LG NetCast.Media-2011\n * (LGSmartTV/1.0) AppleWebKit/534.23 OBIGO-T10/2.0\n */\n\n if (match = /LG NetCast\\.(?:TV|Media)-([0-9]*)/.exec(ua)) {\n this.os.name = '';\n this.device.manufacturer = STRINGS_LG;\n this.device.model = 'NetCast TV ' + match[1];\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n if (match = /LGSmartTV/.exec(ua)) {\n this.os.name = '';\n this.device.manufacturer = STRINGS_LG;\n this.device.model = 'Smart TV';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * Toshiba Smart TV\n *\n * Mozilla/5.0 (Linux mipsel; U; HbbTV/1.1.1 (; TOSHIBA; DTV_RL953; 56.7.66.7; t12; ) ; ToshibaTP/1.3.0 (+VIDEO_MP4+VIDEO_X_MS_ASF+AUDIO_MPEG+AUDIO_MP4+DRM+NATIVELAUNCH) ; en) AppleWebKit/534.1 (KHTML, like Gecko)\n * Mozilla/5.0 (DTV; TSBNetTV/T32013713.0203.7DD; TVwithVideoPlayer; like Gecko) NetFront/4.1 DTVNetBrowser/2.2 (000039;T32013713;0203;7DD) InettvBrowser/2.2 (000039;T32013713;0203;7DD)\n * Mozilla/5.0 (Linux mipsel; U; HbbTV/1.1.1 (; TOSHIBA; 40PX200; 0.7.3.0.; t12; ) ; Toshiba_TP/1.3.0 (+VIDEO_MP4+AUDIO_MPEG+AUDIO_MP4+VIDEO_X_MS_ASF+OFFLINEAPP) ; en) AppleWebKit/534.1 (KHTML, like Gec\n */\n\n if (ua.match('Toshiba_?TP\\/') || ua.match('TSBNetTV\\/')) {\n this.os.name = '';\n this.device.manufacturer = 'Toshiba';\n this.device.model = 'Smart TV';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * MachBlue XT\n */\n\n if (match = /mbxtWebKit\\/([0-9.]*)/.exec(ua)) {\n this.os.name = '';\n this.browser.name = 'MachBlue XT'\n this.browser.version = new Version({\n value: match[1],\n details: 2\n });\n this.device.type = 'television';\n }\n\n /****************************************************\n * ADB\n */\n\n if (match = /\\(ADB; ([^\\)]+)\\)/.exec(ua)) {\n this.os.name = '';\n this.device.manufacturer = 'ADB';\n this.device.model = (match[1] !== 'Unknown' ? match[1].replace('ADB', '') + ' ' : '') + 'IPTV receiver';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * MStar\n */\n\n if (ua.match(/Mstar;OWB/)) {\n this.os.name = '';\n this.device.manufacturer = 'MStar';\n this.device.model = 'PVR';\n this.device.type = 'television';\n this.device.identified = true;\n\n this.browser.name = 'Origyn Web Browser';\n }\n\n /****************************************************\n * TechniSat\n */\n\n if (match = /\\TechniSat ([^;]+);/.exec(ua)) {\n this.os.name = '';\n this.device.manufacturer = 'TechniSat';\n this.device.model = match[1];\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * Technicolor\n */\n\n if (match = /\\Technicolor_([^;]+);/.exec(ua)) {\n this.os.name = '';\n this.device.manufacturer = 'Technicolor';\n this.device.model = match[1];\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * Winbox Evo2\n */\n\n if (match = /Winbox Evo2/.exec(ua)) {\n this.os.name = '';\n this.device.manufacturer = 'Winbox';\n this.device.model = 'Evo2';\n this.device.type = 'television';\n this.device.identified = true;\n }\n\n /****************************************************\n * Roku\n */\n\n if (match = /^Roku\\/DVP-([0-9]+)/.exec(ua)) {\n this.device.manufacturer = 'Roku';\n this.device.type = 'television';\n\n switch (match[1]) {\n case '2000':\n this.device.model = 'HD';\n break;\n case '2050':\n this.device.model = 'XD';\n break;\n case '2100':\n this.device.model = 'XDS';\n break;\n case '2400':\n this.device.model = 'LT';\n break;\n case '3000':\n this.device.model = '2 HD';\n break;\n case '3050':\n this.device.model = '2 XD';\n break;\n case '3100':\n this.device.model = '2 XS';\n break;\n }\n\n this.device.identified = true;\n }\n\n if (match = /HbbTV\\/1.1.1 \\([^;]*;\\s*([^;]*)\\s*;\\s*([^;]*)\\s*;/.exec(ua)) {\n var vendorName = match[1].trim();\n var modelName = match[2].trim();\n\n if (!this.device.manufacturer && vendorName !== '' && vendorName !== 'vendorName') {\n switch (vendorName) {\n case 'LGE':\n this.device.manufacturer = 'LG';\n break;\n case 'TOSHIBA':\n this.device.manufacturer = 'Toshiba';\n break;\n case 'smart':\n this.device.manufacturer = 'Smart';\n break;\n case 'tv2n':\n this.device.manufacturer = 'TV2N';\n break;\n default:\n this.device.manufacturer = vendorName;\n }\n\n if (!this.device.model && modelName !== '' && modelName !== 'modelName') {\n switch (modelName) {\n case 'GLOBAL_PLAT3':\n this.device.model = 'NetCast TV';\n break;\n case 'SmartTV2012':\n this.device.model = 'Smart TV 2012';\n break;\n case 'videoweb':\n this.device.model = 'Videoweb';\n break;\n default:\n this.device.model = modelName;\n }\n\n if (vendorName === 'Humax') {\n this.device.model = this.device.model.toUpperCase();\n }\n\n this.device.identified = true;\n this.os.name = '';\n }\n }\n\n this.device.type = 'television';\n }\n\n /****************************************************\n * Detect type based on common identifiers\n */\n\n if (ua.match('InettvBrowser')) {\n this.device.type = 'television';\n }\n\n if (ua.match('MIDP')) {\n this.device.type = 'mobile';\n }\n\n /****************************************************\n * Try to detect any devices based on common\n * locations of model ids\n */\n\n if (!this.device.model && !this.device.manufacturer) {\n var candidates = [];\n\n if (!ua.match(/^(Mozilla|Opera)/)) if (match = /^(?:MQQBrowser\\/[0-9\\.]+\\/)?([^\\s]+)/.exec(ua)) {\n match[1] = match[1].replace(/_TD$/, '');\n match[1] = match[1].replace(/_CMCC$/, '');\n match[1] = match[1].replace(/[_ ]Mozilla$/, '');\n match[1] = match[1].replace(/ Linux$/, '');\n match[1] = match[1].replace(/ Opera$/, '');\n match[1] = match[1].replace(/\\/[0-9].*$/, '');\n\n candidates.push(match[1]);\n }\n\n if (match = /[0-9]+x[0-9]+; ([^;]+)/.exec(ua)) {\n candidates.push(match[1]);\n }\n\n if (match = /[0-9]+X[0-9]+ ([^;\\/\\(\\)]+)/.exec(ua)) {\n candidates.push(match[1]);\n }\n\n if (match = /Windows NT 5.1; ([^;]+); Windows Phone/.exec(ua)) {\n candidates.push(match[1]);\n }\n\n if (match = /\\) PPC; (?:[0-9]+x[0-9]+; )?([^;\\/\\(\\)]+)/.exec(ua)) {\n candidates.push(match[1]);\n }\n\n if (match = /\\(([^;]+); U; Windows Mobile/.exec(ua)) {\n candidates.push(match[1]);\n }\n\n if (match = /Vodafone\\/1.0\\/([^\\/]+)/.exec(ua)) {\n candidates.push(match[1]);\n }\n\n if (match = /\\ ([^\\s]+)$/.exec(ua)) {\n candidates.push(match[1]);\n }\n\n for (var i = 0; i < candidates.length; i++) {\n\n if (!this.device.model && !this.device.manufacturer) {\n var model = cleanupModel(candidates[i]);\n var result = false;\n\n if (this.os.name === 'Android') {\n if (typeof ANDROID_MODELS[model] !== 'undefined') {\n this.device.manufacturer = ANDROID_MODELS[model][0];\n this.device.model = ANDROID_MODELS[model][1];\n if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n this.device.identified = true;\n\n result = true;\n }\n }\n\n if (!this.os.name || this.os.name === 'Windows' || this.os.name === 'Windows Mobile' || this.os.name === 'Windows CE') {\n if (typeof WINDOWS_MOBILE_MODELS[model] !== 'undefined') {\n this.device.manufacturer = WINDOWS_MOBILE_MODELS[model][0];\n this.device.model = WINDOWS_MOBILE_MODELS[model][1];\n this.device.type = 'mobile';\n this.device.identified = true;\n\n if (this.os.name !== 'Windows Mobile') {\n this.os.name = 'Windows Mobile';\n this.os.version = null;\n }\n\n result = true;\n }\n }\n }\n\n if (!result) {\n if (match = /^GIONEE-([^\\s]+)/.exec(candidates[i])) {\n this.device.manufacturer = 'Gionee';\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /^HTC_?([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n this.device.manufacturer = STRINGS_HTC;\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /^HUAWEI-([^\\/]*)/.exec(candidates[i])) {\n this.device.manufacturer = STRINGS_HUAWEI;\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /(?:^|\\()LGE?(?:\\/|-|_|\\s)([^\\s]*)/.exec(candidates[i])) {\n this.device.manufacturer = STRINGS_LG;\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /^MOT-([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n this.device.manufacturer = STRINGS_MOTOROLA;\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /^Motorola_([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n this.device.manufacturer = STRINGS_MOTOROLA;\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /^Nokia([^\\/]+)(?:\\/|$)/.exec(candidates[i])) {\n this.device.manufacturer = 'Nokia';\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n\n if (!this.os.name) {\n this.os.name = 'Series40';\n }\n }\n\n if (match = /^SonyEricsson([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n this.device.manufacturer = STRINGS_SONY_ERICSSON;\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /^SAMSUNG-([^\\/_]+)(?:\\/|_|$)/.exec(candidates[i])) {\n this.device.manufacturer = STRINGS_SAMSUNG;\n this.device.model = cleanupModel(match[1]);\n this.device.type = 'mobile';\n\n if (this.os.name === 'Bada') {\n var manufacturer = 'SAMSUNG';\n var model = cleanupModel(this.device.model);\n\n if (typeof BADA_MODELS[manufacturer] !== 'undefined' && typeof BADA_MODELS[manufacturer][model] !== 'undefined') {\n this.device.manufacturer = BADA_MODELS[manufacturer][model][0];\n this.device.model = BADA_MODELS[manufacturer][model][1];\n this.device.identified = true;\n }\n } else if (match = /Jasmine\\/([0-9.]*)/.exec(ua)) {\n var version = match[1];\n var manufacturer = 'SAMSUNG';\n var model = cleanupModel(this.device.model);\n\n if (typeof TOUCHWIZ_MODELS[manufacturer] !== 'undefined' && typeof TOUCHWIZ_MODELS[manufacturer][model] !== 'undefined') {\n this.device.manufacturer = TOUCHWIZ_MODELS[manufacturer][model][0];\n this.device.model = TOUCHWIZ_MODELS[manufacturer][model][1];\n this.device.identified = true;\n\n this.os.name = 'Touchwiz';\n this.os.version = new Version({\n value: '2.0'\n });\n }\n } else if (match = /Dolfin\\/([0-9.]*)/.exec(ua)) {\n var version = match[1];\n var manufacturer = 'SAMSUNG';\n var model = cleanupModel(this.device.model);\n\n if (typeof BADA_MODELS[manufacturer] !== 'undefined' && typeof BADA_MODELS[manufacturer][model] !== 'undefined') {\n this.device.manufacturer = BADA_MODELS[manufacturer][model][0];\n this.device.model = BADA_MODELS[manufacturer][model][1];\n this.device.identified = true;\n\n this.os.name = 'Bada';\n\n switch (version) {\n case '2.0':\n this.os.version = new Version({\n value: '1.0'\n });\n break;\n case '2.2':\n this.os.version = new Version({\n value: '1.2'\n });\n break;\n case '3.0':\n this.os.version = new Version({\n value: '2.0'\n });\n break;\n }\n }\n\n if (typeof TOUCHWIZ_MODELS[manufacturer] !== 'undefined' && typeof TOUCHWIZ_MODELS[manufacturer][model] !== 'undefined') {\n this.device.manufacturer = TOUCHWIZ_MODELS[manufacturer][model][0];\n this.device.model = TOUCHWIZ_MODELS[manufacturer][model][1];\n this.device.identified = true;\n\n this.os.name = 'Touchwiz';\n\n switch (version) {\n case '1.0':\n this.os.version = new Version({\n value: '1.0'\n });\n break;\n case '1.5':\n this.os.version = new Version({\n value: '2.0'\n });\n break;\n case '2.0':\n this.os.version = new Version({\n value: '3.0'\n });\n break;\n }\n }\n }\n }\n }\n }\n }\n\n\n if (match = /\\((?:LG[-|\\/])(.*) (?:Browser\\/)?AppleWebkit/.exec(ua)) {\n this.device.manufacturer = STRINGS_LG;\n this.device.model = match[1];\n this.device.type = 'mobile';\n this.device.identified = true;\n }\n\n if (match = /^Mozilla\\/5.0 \\((?:Nokia|NOKIA)(?:\\s?)([^\\)]+)\\)UC AppleWebkit\\(like Gecko\\) Safari\\/530$/.exec(ua)) {\n this.device.manufacturer = 'Nokia';\n this.device.model = match[1];\n this.device.type = 'mobile';\n this.device.identified = true;\n\n this.os.name = 'Series60';\n }\n\n\n\n /****************************************************\n * Safari\n */\n\n if (ua.match('Safari')) {\n if (this.os.name === 'iOS') {\n this.browser.stock = true;\n this.browser.hidden = true;\n this.browser.name = 'Safari';\n this.browser.version = null;\n }\n\n\n\n if (this.os.name === 'Mac OS X' || this.os.name === 'Windows') {\n this.browser.name = 'Safari';\n this.browser.stock = this.os.name === 'Mac OS X';\n\n if (match = /Version\\/([0-9\\.]+)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n if (ua.match(/AppleWebKit\\/[0-9\\.]+\\+/)) {\n this.browser.name = 'WebKit Nightly Build';\n this.browser.version = null;\n }\n }\n }\n\n /****************************************************\n * Internet Explorer\n */\n\n if (ua.match('MSIE')) {\n this.browser.name = 'Internet Explorer';\n\n if (ua.match('IEMobile') || ua.match('Windows CE') || ua.match('Windows Phone') || ua.match('WP7')) {\n this.browser.name = 'Mobile Internet Explorer';\n }\n\n if (match = /MSIE ([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Opera\n */\n\n if (ua.match(/Opera/i)) {\n this.browser.stock = false;\n this.browser.name = 'Opera';\n\n if (match = /Opera[\\/| ]([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n if (match = /Version\\/([0-9.]*)/.exec(ua)) {\n if (parseFloat(match[1]) >= 10) {\n this.browser.version = new Version({\n value: match[1]\n });\n } else {\n this.browser.version = null;\n }\n }\n\n if (this.browser.version && ua.match('Edition Labs')) {\n this.browser.version.type = 'alpha';\n this.browser.channel = 'Labs';\n }\n\n if (this.browser.version && ua.match('Edition Next')) {\n this.browser.version.type = 'alpha';\n this.browser.channel = 'Next';\n }\n\n if (ua.match('Opera Tablet')) {\n this.browser.name = 'Opera Mobile';\n this.device.type = 'tablet';\n }\n\n if (ua.match('Opera Mobi')) {\n this.browser.name = 'Opera Mobile';\n this.device.type = 'mobile';\n }\n\n if (match = /Opera Mini;/.exec(ua)) {\n this.browser.name = 'Opera Mini';\n this.browser.version = null;\n this.browser.mode = 'proxy';\n this.device.type = 'mobile';\n }\n\n if (match = /Opera Mini\\/(?:att\\/)?([0-9.]*)/.exec(ua)) {\n this.browser.name = 'Opera Mini';\n this.browser.version = new Version({\n value: match[1],\n details: -1\n });\n this.browser.mode = 'proxy';\n this.device.type = 'mobile';\n }\n\n if (this.browser.name === 'Opera' && this.device.type === 'mobile') {\n this.browser.name = 'Opera Mobile';\n\n if (ua.match(/BER/)) {\n this.browser.name = 'Opera Mini';\n this.browser.version = null;\n }\n }\n\n if (ua.match('InettvBrowser')) {\n this.device.type = 'television';\n }\n\n if (ua.match('Opera TV') || ua.match('Opera-TV')) {\n this.browser.name = 'Opera';\n this.device.type = 'television';\n }\n\n if (ua.match('Linux zbov')) {\n this.browser.name = 'Opera Mobile';\n this.browser.mode = 'desktop';\n\n this.device.type = 'mobile';\n\n this.os.name = null;\n this.os.version = null;\n }\n\n if (ua.match('Linux zvav')) {\n this.browser.name = 'Opera Mini';\n this.browser.version = null;\n this.browser.mode = 'desktop';\n\n this.device.type = 'mobile';\n\n this.os.name = null;\n this.os.version = null;\n }\n }\n\n /****************************************************\n * Firefox\n */\n\n if (ua.match('Firefox')) {\n this.browser.stock = false;\n this.browser.name = 'Firefox';\n\n if (match = /Firefox\\/([0-9ab.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n if (this.browser.version.type === 'alpha') {\n this.browser.channel = 'Aurora';\n }\n\n if (this.browser.version.type === 'beta') {\n this.browser.channel = 'Beta';\n }\n\n if (ua.match('Fennec')) {\n this.device.type = 'mobile';\n }\n\n if (ua.match('Mobile; rv')) {\n this.device.type = 'mobile';\n }\n\n if (ua.match('Tablet; rv')) {\n this.device.type = 'tablet';\n }\n\n if (this.device.type === 'mobile' || this.device.type === 'tablet') {\n this.browser.name = 'Firefox Mobile';\n }\n }\n\n if (ua.match('Namoroka')) {\n this.browser.stock = false;\n this.browser.name = 'Firefox';\n\n if (match = /Namoroka\\/([0-9ab.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n this.browser.channel = 'Namoroka';\n }\n\n if (ua.match('Shiretoko')) {\n this.browser.stock = false;\n this.browser.name = 'Firefox';\n\n if (match = /Shiretoko\\/([0-9ab.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n this.browser.channel = 'Shiretoko';\n }\n\n if (ua.match('Minefield')) {\n this.browser.stock = false;\n this.browser.name = 'Firefox';\n\n if (match = /Minefield\\/([0-9ab.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n this.browser.channel = 'Minefield';\n }\n\n if (ua.match('Firebird')) {\n this.browser.stock = false;\n this.browser.name = 'Firebird';\n\n if (match = /Firebird\\/([0-9ab.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * SeaMonkey\n */\n\n if (ua.match('SeaMonkey')) {\n this.browser.stock = false;\n this.browser.name = 'SeaMonkey';\n\n if (match = /SeaMonkey\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Netscape\n */\n\n if (ua.match('Netscape')) {\n this.browser.stock = false;\n this.browser.name = 'Netscape';\n\n if (match = /Netscape[0-9]?\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Konqueror\n */\n\n if (ua.match('[k|K]onqueror/')) {\n this.browser.name = 'Konqueror';\n\n if (match = /[k|K]onqueror\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Chrome\n */\n\n if (match = /(?:Chrome|CrMo|CriOS)\\/([0-9.]*)/.exec(ua)) {\n this.browser.stock = false;\n this.browser.name = 'Chrome';\n this.browser.version = new Version({\n value: match[1]\n });\n\n if (this.os.name === 'Android') {\n switch (match[1].split('.', 3).join('.')) {\n case '16.0.912':\n this.browser.channel = 'Beta';\n break;\n case '18.0.1025':\n this.browser.version.details = 1;\n break;\n default:\n this.browser.channel = 'Nightly';\n break;\n }\n } else {\n switch (match[1].split('.', 3).join('.')) {\n case '0.2.149':\n case '0.3.154':\n case '0.4.154':\n case '1.0.154':\n case '2.0.172':\n case '3.0.195':\n case '4.0.249':\n case '4.1.249':\n case '5.0.375':\n case '6.0.472':\n case '7.0.517':\n case '8.0.552':\n case '9.0.597':\n case '10.0.648':\n case '11.0.696':\n case '12.0.742':\n case '13.0.782':\n case '14.0.835':\n case '15.0.874':\n case '16.0.912':\n case '17.0.963':\n case '18.0.1025':\n case '19.0.1084':\n case '20.0.1132':\n case '21.0.1180':\n if (this.browser.version.minor === 0) this.browser.version.details = 1;\n else this.browser.version.details = 2;\n\n break;\n default:\n this.browser.channel = 'Nightly';\n break;\n }\n }\n }\n\n /****************************************************\n * Chrome Frame\n */\n\n if (ua.match('chromeframe')) {\n this.browser.stock = false;\n this.browser.name = 'Chrome Frame';\n\n if (match = /chromeframe\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Chromium\n */\n\n if (ua.match('Chromium')) {\n this.browser.stock = false;\n this.browser.channel = '';\n this.browser.name = 'Chromium';\n\n if (match = /Chromium\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * BrowserNG\n */\n\n if (ua.match('BrowserNG')) {\n this.browser.name = 'Nokia Browser';\n\n if (match = /BrowserNG\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1],\n details: 3,\n builds: false\n });\n }\n }\n\n /****************************************************\n * Nokia Browser\n */\n\n if (ua.match('NokiaBrowser')) {\n this.browser.name = 'Nokia Browser';\n\n if (match = /NokiaBrowser\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1],\n details: 3\n });\n }\n }\n\n /****************************************************\n * MicroB\n */\n\n if (ua.match('Maemo[ |_]Browser')) {\n this.browser.name = 'MicroB';\n\n if (match = /Maemo[ |_]Browser[ |_]([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1],\n details: 3\n });\n }\n }\n\n\n /****************************************************\n * NetFront\n */\n\n if (ua.match('NetFront')) {\n this.browser.name = 'NetFront';\n this.device.type = 'mobile';\n\n if (match = /NetFront\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n if (ua.match('InettvBrowser')) {\n this.device.type = 'television';\n }\n }\n\n /****************************************************\n * Silk\n */\n\n if (ua.match('Silk')) {\n if (ua.match('Silk-Accelerated')) {\n this.browser.name = 'Silk';\n\n if (match = /Silk\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1],\n details: 2\n });\n }\n\n this.device.manufacturer = 'Amazon';\n this.device.model = 'Kindle Fire';\n this.device.type = 'tablet';\n this.device.identified = true;\n\n if (this.os.name !== 'Android') {\n this.os.name = 'Android';\n this.os.version = null;\n }\n }\n }\n\n /****************************************************\n * Dolfin\n */\n\n if (ua.match('Dolfin')) {\n this.browser.name = 'Dolfin';\n\n if (match = /Dolfin\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n\n /****************************************************\n * Iris\n */\n\n if (ua.match('Iris')) {\n this.browser.name = 'Iris';\n\n this.device.type = 'mobile';\n this.device.model = null;\n this.device.manufacturer = null;\n\n this.os.name = 'Windows Mobile';\n this.os.version = null;\n\n if (match = /Iris\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n if (match = / WM([0-9]) /.exec(ua)) {\n this.os.version = new Version({\n value: match[1] + '.0'\n });\n } else {\n this.browser.mode = 'desktop';\n }\n }\n\n /****************************************************\n * Jasmine\n */\n\n if (ua.match('Jasmine')) {\n this.browser.name = 'Jasmine';\n\n if (match = /Jasmine\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Boxee\n */\n\n if (ua.match('Boxee')) {\n this.browser.name = 'Boxee';\n this.device.type = 'television';\n\n if (match = /Boxee\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Espial\n */\n\n if (ua.match('Espial')) {\n this.browser.name = 'Espial';\n\n this.os.name = '';\n this.os.version = null;\n\n if (this.device.type !== 'television') {\n this.device.type = 'television';\n this.device.model = null;\n this.device.manufacturer = null;\n }\n\n if (match = /Espial\\/([0-9.]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * ANT Galio\n */\n if (match = /ANTGalio\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'ANT Galio';\n this.browser.version = new Version({\n value: match[1],\n details: 3\n });\n this.device.type = 'television';\n }\n\n /****************************************************\n * NetFront NX\n */\n if (match = /NX\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'NetFront NX';\n this.browser.version = new Version({\n value: match[1],\n details: 2\n });\n if (match = /DTV/i.exec(ua)) {\n this.device.type = 'television';\n } else if (match = /mobile/i.exec(ua)) {\n this.device.type = 'mobile';\n } else {\n this.device.type = 'desktop';\n }\n\n this.os.name = null;\n this.os.version = null;\n }\n\n /****************************************************\n * Obigo\n */\n\n if (ua.match(/Obigo/i)) {\n this.browser.name = 'Obigo';\n\n if (match = /Obigo\\/([0-9.]*)/i.exec(ua)) {\n this.browser.version = new Version({\n value: match[1]\n });\n }\n\n if (match = /Obigo\\/([A-Z])([0-9.]*)/i.exec(ua)) {\n this.browser.name = 'Obigo ' + match[1];\n this.browser.version = new Version({\n value: match[2]\n });\n }\n\n if (match = /Obigo-([A-Z])([0-9.]*)\\//i.exec(ua)) {\n this.browser.name = 'Obigo ' + match[1];\n this.browser.version = new Version({\n value: match[2]\n });\n }\n }\n\n /****************************************************\n * UC Web\n */\n\n if (ua.match('UCWEB')) {\n this.browser.stock = false;\n this.browser.name = 'UC Browser';\n\n if (match = /UCWEB([0-9]*[.][0-9]*)/.exec(ua)) {\n this.browser.version = new Version({\n value: match[1],\n details: 3\n });\n }\n\n if (this.os.name === 'Linux') {\n this.os.name = '';\n }\n\n this.device.type = 'mobile';\n\n if (match = /^IUC \\(U;\\s?iOS ([0-9\\.]+);/.exec(ua)) {\n this.os.name = 'iOS';\n this.os.version = new Version({\n value: match[1]\n });\n }\n\n if (match = /^JUC \\(Linux; U; ([0-9\\.]+)[^;]*; [^;]+; ([^;]*[^\\s])\\s*; [0-9]+\\*[0-9]+\\)/.exec(ua)) {\n var model = cleanupModel(match[2]);\n\n this.os.name = 'Android';\n this.os.version = new Version({\n value: match[1]\n });\n\n if (typeof ANDROID_MODELS[model] !== 'undefined') {\n this.device.manufacturer = ANDROID_MODELS[model][0];\n this.device.model = ANDROID_MODELS[model][1];\n if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n this.device.identified = true;\n }\n }\n }\n\n if (ua.match(/\\) UC /)) {\n this.browser.stock = false;\n this.browser.name = 'UC Browser';\n }\n\n if (match = /UCBrowser\\/([0-9.]*)/.exec(ua)) {\n this.browser.stock = false;\n this.browser.name = 'UC Browser';\n this.browser.version = new Version({\n value: match[1],\n details: 2\n });\n }\n\n /****************************************************\n * NineSky\n */\n\n if (match = /Ninesky(?:-android-mobile(?:-cn)?)?\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'NineSky';\n this.browser.version = new Version({\n value: match[1]\n });\n\n if (this.os.name !== 'Android') {\n this.os.name = 'Android';\n this.os.version = null;\n\n this.device.manufacturer = null;\n this.device.model = null;\n }\n }\n\n /****************************************************\n * Skyfire\n */\n\n if (match = /Skyfire\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'Skyfire';\n this.browser.version = new Version({\n value: match[1]\n });\n\n this.device.type = 'mobile';\n\n this.os.name = 'Android';\n this.os.version = null;\n }\n\n /****************************************************\n * Dolphin HD\n */\n\n if (match = /DolphinHDCN\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'Dolphin';\n this.browser.version = new Version({\n value: match[1]\n });\n\n this.device.type = 'mobile';\n\n if (this.os.name !== 'Android') {\n this.os.name = 'Android';\n this.os.version = null;\n }\n }\n\n if (match = /Dolphin\\/INT/.exec(ua)) {\n this.browser.name = 'Dolphin';\n this.device.type = 'mobile';\n }\n\n /****************************************************\n * QQ Browser\n */\n\n if (match = /(M?QQBrowser)\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'QQ Browser';\n\n var version = match[2];\n if (version.match(/^[0-9][0-9]$/)) version = version[0] + '.' + version[1];\n\n this.browser.version = new Version({\n value: version,\n details: 2\n });\n this.browser.channel = ''\n\n if (!this.os.name && match[1] === 'QQBrowser') {\n this.os.name = 'Windows';\n }\n }\n\n /****************************************************\n * iBrowser\n */\n\n if (match = /(iBrowser)\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'iBrowser';\n\n var version = match[2];\n if (version.match(/[0-9][0-9]/)) version = version[0] + '.' + version[1];\n\n this.browser.version = new Version({\n value: version,\n details: 2\n });\n this.browser.channel = ''\n }\n\n /****************************************************\n * Puffin\n */\n\n if (match = /Puffin\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'Puffin';\n this.browser.version = new Version({\n value: match[1],\n details: 2\n });\n\n this.device.type = 'mobile';\n\n if (this.os.name === 'Linux') {\n this.os.name = null;\n this.os.version = null;\n }\n }\n\n /****************************************************\n * 360 Extreme Explorer\n */\n\n if (ua.match('360EE')) {\n this.browser.stock = false;\n this.browser.name = '360 Extreme Explorer';\n this.browser.version = null;\n }\n\n /****************************************************\n * Midori\n */\n\n if (match = /Midori\\/([0-9.]*)/.exec(ua)) {\n this.browser.name = 'Midori';\n this.browser.version = new Version({\n value: match[1]\n });\n\n if (this.os.name !== 'Linux') {\n this.os.name = 'Linux';\n this.os.version = null;\n }\n\n this.device.manufacturer = null;\n this.device.model = null;\n this.device.type = 'desktop';\n }\n\n /****************************************************\n * Others\n */\n\n var browsers = [{\n name: 'AdobeAIR',\n regexp: /AdobeAIR\\/([0-9.]*)/\n }, {\n name: 'Awesomium',\n regexp: /Awesomium\\/([0-9.]*)/\n }, {\n name: 'Canvace',\n regexp: /Canvace Standalone\\/([0-9.]*)/\n }, {\n name: 'Ekioh',\n regexp: /Ekioh\\/([0-9.]*)/\n }, {\n name: 'JavaFX',\n regexp: /JavaFX\\/([0-9.]*)/\n }, {\n name: 'GFXe',\n regexp: /GFXe\\/([0-9.]*)/\n }, {\n name: 'LuaKit',\n regexp: /luakit/\n }, {\n name: 'Titanium',\n regexp: /Titanium\\/([0-9.]*)/\n }, {\n name: 'OpenWebKitSharp',\n regexp: /OpenWebKitSharp/\n }, {\n name: 'Prism',\n regexp: /Prism\\/([0-9.]*)/\n }, {\n name: 'Qt',\n regexp: /Qt\\/([0-9.]*)/\n }, {\n name: 'QtEmbedded',\n regexp: /QtEmbedded/\n }, {\n name: 'QtEmbedded',\n regexp: /QtEmbedded.*Qt\\/([0-9.]*)/\n }, {\n name: 'RhoSimulator',\n regexp: /RhoSimulator/\n }, {\n name: 'UWebKit',\n regexp: /UWebKit\\/([0-9.]*)/\n },\n\n {\n name: 'PhantomJS',\n regexp: /PhantomJS\\/([0-9.]*)/\n }, {\n name: 'Google Web Preview',\n regexp: /Google Web Preview/\n },\n\n {\n name: 'Google Earth',\n regexp: /Google Earth\\/([0-9.]*)/\n }, {\n name: 'EA Origin',\n regexp: /Origin\\/([0-9.]*)/\n }, {\n name: 'SecondLife',\n regexp: /SecondLife\\/([0-9.]*)/\n }, {\n name: 'Valve Steam',\n regexp: /Valve Steam/\n },\n\n {\n name: 'Songbird',\n regexp: /Songbird\\/([0-9.]*)/\n }, {\n name: 'Thunderbird',\n regexp: /Thunderbird\\/([0-9.]*)/\n },\n\n {\n name: 'Abrowser',\n regexp: /Abrowser\\/([0-9.]*)/\n }, {\n name: 'arora',\n regexp: /[Aa]rora\\/([0-9.]*)/\n }, {\n name: 'Baidu Browser',\n regexp: /M?BaiduBrowser\\/([0-9.]*)/i\n }, {\n name: 'Camino',\n regexp: /Camino\\/([0-9.]*)/\n }, {\n name: 'Canure',\n regexp: /Canure\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'CometBird',\n regexp: /CometBird\\/([0-9.]*)/\n }, {\n name: 'Comodo Dragon',\n regexp: /Comodo_Dragon\\/([0-9.]*)/,\n details: 2\n }, {\n name: 'Conkeror',\n regexp: /[Cc]onkeror\\/([0-9.]*)/\n }, {\n name: 'CoolNovo',\n regexp: /(?:CoolNovo|CoolNovoChromePlus)\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'ChromePlus',\n regexp: /ChromePlus(?:\\/([0-9.]*))?$/,\n details: 3\n }, {\n name: 'Daedalus',\n regexp: /Daedalus ([0-9.]*)/,\n details: 2\n }, {\n name: 'Demobrowser',\n regexp: /demobrowser\\/([0-9.]*)/\n }, {\n name: 'Dooble',\n regexp: /Dooble(?:\\/([0-9.]*))?/\n }, {\n name: 'DWB',\n regexp: /dwb(?:-hg)?(?:\\/([0-9.]*))?/\n }, {\n name: 'Epiphany',\n regexp: /Epiphany\\/([0-9.]*)/\n }, {\n name: 'FireWeb',\n regexp: /FireWeb\\/([0-9.]*)/\n }, {\n name: 'Flock',\n regexp: /Flock\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'Galeon',\n regexp: /Galeon\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'Helium',\n regexp: /HeliumMobileBrowser\\/([0-9.]*)/\n }, {\n name: 'iCab',\n regexp: /iCab\\/([0-9.]*)/\n }, {\n name: 'Iceape',\n regexp: /Iceape\\/([0-9.]*)/\n }, {\n name: 'IceCat',\n regexp: /IceCat ([0-9.]*)/\n }, {\n name: 'Iceweasel',\n regexp: /Iceweasel\\/([0-9.]*)/\n }, {\n name: 'InternetSurfboard',\n regexp: /InternetSurfboard\\/([0-9.]*)/\n }, {\n name: 'Iron',\n regexp: /Iron\\/([0-9.]*)/,\n details: 2\n }, {\n name: 'Isis',\n regexp: /BrowserServer/\n }, {\n name: 'Jumanji',\n regexp: /jumanji/\n }, {\n name: 'Kazehakase',\n regexp: /Kazehakase\\/([0-9.]*)/\n }, {\n name: 'KChrome',\n regexp: /KChrome\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'K-Meleon',\n regexp: /K-Meleon\\/([0-9.]*)/\n }, {\n name: 'Leechcraft',\n regexp: /Leechcraft(?:\\/([0-9.]*))?/,\n details: 2\n }, {\n name: 'Lightning',\n regexp: /Lightning\\/([0-9.]*)/\n }, {\n name: 'Lunascape',\n regexp: /Lunascape[\\/| ]([0-9.]*)/,\n details: 3\n }, {\n name: 'iLunascape',\n regexp: /iLunascape\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'Maxthon',\n regexp: /Maxthon[\\/ ]([0-9.]*)/,\n details: 3\n }, {\n name: 'MiniBrowser',\n regexp: /MiniBr?owserM\\/([0-9.]*)/\n }, {\n name: 'MiniBrowser',\n regexp: /MiniBrowserMobile\\/([0-9.]*)/\n }, {\n name: 'MixShark',\n regexp: /MixShark\\/([0-9.]*)/\n }, {\n name: 'Motorola WebKit',\n regexp: /MotorolaWebKit\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'NetFront LifeBrowser',\n regexp: /NetFrontLifeBrowser\\/([0-9.]*)/\n }, {\n name: 'Netscape Navigator',\n regexp: /Navigator\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'Odyssey',\n regexp: /OWB\\/([0-9.]*)/\n }, {\n name: 'OmniWeb',\n regexp: /OmniWeb/\n }, {\n name: 'Orca',\n regexp: /Orca\\/([0-9.]*)/\n }, {\n name: 'Origyn',\n regexp: /Origyn Web Browser/\n }, {\n name: 'Palemoon',\n regexp: /Pale[mM]oon\\/([0-9.]*)/\n }, {\n name: 'Phantom',\n regexp: /Phantom\\/V([0-9.]*)/\n }, {\n name: 'Polaris',\n regexp: /Polaris\\/v?([0-9.]*)/i,\n details: 2\n }, {\n name: 'QtCreator',\n regexp: /QtCreator\\/([0-9.]*)/\n }, {\n name: 'QtQmlViewer',\n regexp: /QtQmlViewer/\n }, {\n name: 'QtTestBrowser',\n regexp: /QtTestBrowser\\/([0-9.]*)/\n }, {\n name: 'QtWeb',\n regexp: /QtWeb Internet Browser\\/([0-9.]*)/\n }, {\n name: 'QupZilla',\n regexp: /QupZilla\\/([0-9.]*)/\n }, {\n name: 'Roccat',\n regexp: /Roccat\\/([0-9]\\.[0-9.]*)/\n }, {\n name: 'Raven for Mac',\n regexp: /Raven for Mac\\/([0-9.]*)/\n }, {\n name: 'rekonq',\n regexp: /rekonq/\n }, {\n name: 'RockMelt',\n regexp: /RockMelt\\/([0-9.]*)/,\n details: 2\n }, {\n name: 'Sleipnir',\n regexp: /Sleipnir\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'SMBrowser',\n regexp: /SMBrowser/\n }, {\n name: 'Sogou Explorer',\n regexp: /SE 2.X MetaSr/\n }, {\n name: 'Snowshoe',\n regexp: /Snowshoe\\/([0-9.]*)/,\n details: 2\n }, {\n name: 'Sputnik',\n regexp: /Sputnik\\/([0-9.]*)/i,\n details: 3\n }, {\n name: 'Stainless',\n regexp: /Stainless\\/([0-9.]*)/\n }, {\n name: 'SunChrome',\n regexp: /SunChrome\\/([0-9.]*)/\n }, {\n name: 'Surf',\n regexp: /Surf\\/([0-9.]*)/\n }, {\n name: 'TaoBrowser',\n regexp: /TaoBrowser\\/([0-9.]*)/,\n details: 2\n }, {\n name: 'TaomeeBrowser',\n regexp: /TaomeeBrowser\\/([0-9.]*)/,\n details: 2\n }, {\n name: 'TazWeb',\n regexp: /TazWeb/\n }, {\n name: 'Viera',\n regexp: /Viera\\/([0-9.]*)/\n }, {\n name: 'Villanova',\n regexp: /Villanova\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'Wavelink Velocity',\n regexp: /Wavelink Velocity Browser\\/([0-9.]*)/,\n details: 2\n }, {\n name: 'WebPositive',\n regexp: /WebPositive/\n }, {\n name: 'WebRender',\n regexp: /WebRender/\n }, {\n name: 'Wyzo',\n regexp: /Wyzo\\/([0-9.]*)/,\n details: 3\n }, {\n name: 'Zetakey',\n regexp: /Zetakey Webkit\\/([0-9.]*)/\n }, {\n name: 'Zetakey',\n regexp: /Zetakey\\/([0-9.]*)/\n }]\n\n for (var b = 0; b < browsers.length; b++) {\n if (match = browsers[b].regexp.exec(ua)) {\n this.browser.name = browsers[b].name;\n this.browser.channel = '';\n this.browser.stock = false;\n\n if (match[1]) {\n this.browser.version = new Version({\n value: match[1],\n details: browsers[b].details || null\n });\n } else {\n this.browser.version = null;\n }\n }\n }\n\n\n\n /****************************************************\n * WebKit\n */\n\n if (match = /WebKit\\/([0-9.]*)/i.exec(ua)) {\n this.engine.name = 'Webkit';\n this.engine.version = new Version({\n value: match[1]\n });\n }\n\n if (match = /Browser\\/AppleWebKit([0-9.]*)/i.exec(ua)) {\n this.engine.name = 'Webkit';\n this.engine.version = new Version({\n value: match[1]\n });\n }\n\n /****************************************************\n * KHTML\n */\n\n if (match = /KHTML\\/([0-9.]*)/.exec(ua)) {\n this.engine.name = 'KHTML';\n this.engine.version = new Version({\n value: match[1]\n });\n }\n\n /****************************************************\n * Gecko\n */\n\n if (/Gecko/.exec(ua) && !/like Gecko/i.exec(ua)) {\n this.engine.name = 'Gecko';\n\n if (match = /; rv:([^\\)]+)\\)/.exec(ua)) {\n this.engine.version = new Version({\n value: match[1]\n });\n }\n }\n\n /****************************************************\n * Presto\n */\n\n if (match = /Presto\\/([0-9.]*)/.exec(ua)) {\n this.engine.name = 'Presto';\n this.engine.version = new Version({\n value: match[1]\n });\n }\n\n /****************************************************\n * Trident\n */\n\n if (match = /Trident\\/([0-9.]*)/.exec(ua)) {\n this.engine.name = 'Trident';\n this.engine.version = new Version({\n value: match[1]\n });\n\n if (this.browser.name === 'Internet Explorer') {\n if (parseVersion(this.engine.version) === 6 && parseFloat(this.browser.version) < 10) {\n this.browser.version = new Version({\n value: '10.0'\n });\n this.browser.mode = 'compat';\n }\n\n if (parseVersion(this.engine.version) === 5 && parseFloat(this.browser.version) < 9) {\n this.browser.version = new Version({\n value: '9.0'\n });\n this.browser.mode = 'compat';\n }\n\n if (parseVersion(this.engine.version) === 4 && parseFloat(this.browser.version) < 8) {\n this.browser.version = new Version({\n value: '8.0'\n });\n this.browser.mode = 'compat';\n }\n }\n\n if (this.os.name === 'Windows Phone') {\n if (parseVersion(this.engine.version) === 5 && parseFloat(this.os.version) < 7.5) {\n this.os.version = new Version({\n value: '7.5'\n });\n }\n }\n }\n\n\n /****************************************************\n * Corrections\n */\n\n if (this.os.name === 'Android' && this.browser.stock) {\n this.browser.hidden = true;\n }\n\n if (this.os.name === 'iOS' && this.browser.name === 'Opera Mini') {\n this.os.version = null;\n }\n\n if (this.browser.name === 'Midori' && this.engine.name !== 'Webkit') {\n this.engine.name = 'Webkit';\n this.engine.version = null;\n }\n\n if (this.device.type === 'television' && this.browser.name === 'Opera') {\n this.browser.name = 'Opera Devices';\n switch (true) {\n case this.engine.version.is('2.10'):\n this.browser.version = new Version({\n value: 3.2\n });\n break;\n case this.engine.version.is('2.9'):\n this.browser.version = new Version({\n value: 3.1\n });\n break;\n case this.engine.version.is('2.8'):\n this.browser.version = new Version({\n value: 3.0\n });\n break;\n case this.engine.version.is('2.7'):\n this.browser.version = new Version({\n value: 2.9\n });\n break;\n case this.engine.version.is('2.6'):\n this.browser.version = new Version({\n value: 2.8\n });\n break;\n case this.engine.version.is('2.4'):\n this.browser.version = new Version({\n value: 10.3\n });\n break;\n case this.engine.version.is('2.3'):\n this.browser.version = new Version({\n value: 10\n });\n break;\n case this.engine.version.is('2.2'):\n this.browser.version = new Version({\n value: 9.7\n });\n break;\n case this.engine.version.is('2.1'):\n this.browser.version = new Version({\n value: 9.6\n });\n break;\n default:\n this.browser.version = null;\n }\n\n this.os.name = null;\n this.os.version = null;\n }\n\n\n /****************************************************\n * Camouflage\n */\n\n if (this.options.detectCamouflage) {\n\n if (match = /Mac OS X 10_6_3; ([^;]+); [a-z]{2}-(?:[a-z]{2})?\\)/.exec(ua)) {\n this.browser.name = '';\n this.browser.version = null;\n this.browser.mode = 'desktop';\n\n this.os.name = 'Android';\n this.os.version = null;\n\n this.engine.name = 'Webkit';\n this.engine.version = null;\n\n this.device.model = match[1];\n this.device.type = 'mobile';\n\n var model = cleanupModel(this.device.model);\n if (typeof ANDROID_MODELS[model] !== 'undefined') {\n this.device.manufacturer = ANDROID_MODELS[model][0];\n this.device.model = ANDROID_MODELS[model][1];\n if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n this.device.identified = true;\n }\n\n this.features.push('foundDevice');\n }\n\n if (match = /Linux Ventana; [a-z]{2}-[a-z]{2}; (.+) Build/.exec(ua)) {\n this.browser.name = '';\n this.browser.version = null;\n this.browser.mode = 'desktop';\n\n this.os.name = 'Android';\n this.os.version = null;\n\n this.engine.name = 'Webkit';\n this.engine.version = null;\n\n this.device.model = match[1];\n this.device.type = 'mobile';\n\n var model = cleanupModel(this.device.model);\n if (typeof ANDROID_MODELS[model] !== 'undefined') {\n this.device.manufacturer = ANDROID_MODELS[model][0];\n this.device.model = ANDROID_MODELS[model][1];\n if (typeof ANDROID_MODELS[model][2] !== 'undefined') this.device.type = ANDROID_MODELS[model][2];\n this.device.identified = true;\n }\n\n this.features.push('foundDevice');\n }\n\n if (this.browser.name === 'Safari') {\n if (this.os.name !== 'iOS' && /AppleWebKit\\/([0-9]+.[0-9]+)/i.exec(ua)[1] !== /Safari\\/([0-9]+.[0-9]+)/i.exec(ua)[1]) {\n this.features.push('safariMismatch');\n this.camouflage = true;\n }\n\n if (this.os.name === 'iOS' && !ua.match(/^Mozilla/)) {\n this.features.push('noMozillaPrefix');\n this.camouflage = true;\n }\n\n if (!/Version\\/[0-9\\.]+/.exec(ua)) {\n this.features.push('noVersion');\n this.camouflage = true;\n }\n }\n\n if (this.browser.name === 'Chrome') {\n if (!/(?:Chrome|CrMo|CriOS)\\/([0-9]{1,2}\\.[0-9]\\.[0-9]{3,4}\\.[0-9]+)/.exec(ua)) {\n this.features.push('wrongVersion');\n this.camouflage = true;\n }\n }\n\n\n if (this.options.useFeatures) {\n /* If it claims not to be Trident, but it is probably Trident running camouflage mode */\n if (window.ActiveXObject) {\n this.features.push('trident');\n\n if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Trident') {\n this.camouflage = typeof this.browser.name === 'undefined' || this.browser.name !== 'Maxthon';\n }\n }\n\n /* If it claims not to be Opera, but it is probably Opera running camouflage mode */\n if (window.opera) {\n this.features.push('presto');\n\n if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Presto') {\n this.camouflage = true;\n }\n\n if (this.browser.name === 'Internet Explorer') {\n this.camouflage = true;\n }\n }\n\n /* If it claims not to be Gecko, but it is probably Gecko running camouflage mode */\n if ('getBoxObjectFor' in document || 'mozInnerScreenX' in window) {\n this.features.push('gecko');\n\n if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Gecko') {\n this.camouflage = true;\n }\n\n if (this.browser.name === 'Internet Explorer') {\n this.camouflage = true;\n }\n }\n\n /* If it claims not to be Webkit, but it is probably Webkit running camouflage mode */\n if ('WebKitCSSMatrix' in window || 'WebKitPoint' in window || 'webkitStorageInfo' in window || 'webkitURL' in window) {\n this.features.push('webkit');\n\n if (typeof this.engine.name !== 'undefined' && this.engine.name !== 'Webkit') {\n this.camouflage = true;\n }\n\n if (this.browser.name === 'Internet Explorer') {\n this.camouflage = true;\n }\n }\n\n\n\n /* If it claims to be Safari and uses V8, it is probably an Android device running camouflage mode */\n if (this.engine.name === 'Webkit' && ({}.toString).toString().indexOf('\\n') === -1) {\n this.features.push('v8');\n\n if (this.browser !== null && this.browser.name === 'Safari') {\n this.camouflage = true;\n }\n }\n\n\n\n /* If we have an iPad that is not 768 x 1024, we have an imposter */\n if (this.device.model === 'iPad') {\n if ((screen.width !== 0 && screen.height !== 0) && (screen.width !== 768 && screen.height !== 1024) && (screen.width !== 1024 && screen.height !== 768)) {\n this.features.push('sizeMismatch');\n this.camouflage = true;\n }\n }\n\n /* If we have an iPhone or iPod that is not 320 x 480, we have an imposter */\n if (this.device.model === 'iPhone' || this.device.model === 'iPod') {\n if ((screen.width !== 0 && screen.height !== 0) && (screen.width !== 320 && screen.height !== 480) && (screen.width !== 480 && screen.height !== 320)) {\n this.features.push('sizeMismatch');\n this.camouflage = true;\n }\n }\n\n\n if (this.os.name === 'iOS' && this.os.version) {\n\n if (this.os.version.isOlder('4.0') && 'sandbox' in document.createElement('iframe')) {\n this.features.push('foundSandbox');\n this.camouflage = true;\n }\n\n if (this.os.version.isOlder('4.2') && 'WebSocket' in window) {\n this.features.push('foundSockets');\n this.camouflage = true;\n }\n\n if (this.os.version.isOlder('5.0') && !! window.Worker) {\n this.features.push('foundWorker');\n this.camouflage = true;\n }\n\n if (this.os.version.isNewer('2.1') && !window.applicationCache) {\n this.features.push('noAppCache');\n this.camouflage = true;\n }\n }\n\n if (this.os.name !== 'iOS' && this.browser.name === 'Safari' && this.browser.version) {\n\n if (this.browser.version.isOlder('4.0') && !! window.applicationCache) {\n this.features.push('foundAppCache');\n this.camouflage = true;\n }\n\n if (this.browser.version.isOlder('4.1') && !! (window.history && history.pushState)) {\n this.features.push('foundHistory');\n this.camouflage = true;\n }\n\n if (this.browser.version.isOlder('5.1') && !! document.documentElement.webkitRequestFullScreen) {\n this.features.push('foundFullscreen');\n this.camouflage = true;\n }\n\n if (this.browser.version.isOlder('5.2') && 'FileReader' in window) {\n this.features.push('foundFileReader');\n this.camouflage = true;\n }\n }\n }\n }\n }\n };\n\n function cleanupModel(s) {\n s = typeof s === 'undefined' ? '' : s;\n\n s = s.replace(/_TD$/, '');\n s = s.replace(/_CMCC$/, '');\n\n s = s.replace(/_/g, ' ');\n s = s.replace(/^\\s+|\\s+$/g, '');\n s = s.replace(/\\/[^/]+$/, '');\n s = s.replace(/\\/[^/]+ Android\\/.*/, '');\n\n s = s.replace(/^tita on /, '');\n s = s.replace(/^Android on /, '');\n s = s.replace(/^Android for /, '');\n s = s.replace(/^ICS AOSP on /, '');\n s = s.replace(/^Full AOSP on /, '');\n s = s.replace(/^Full Android on /, '');\n s = s.replace(/^Full Cappuccino on /, '');\n s = s.replace(/^Full MIPS Android on /, '');\n s = s.replace(/^Full Android/, '');\n\n s = s.replace(/^Acer ?/i, '');\n s = s.replace(/^Iconia /, '');\n s = s.replace(/^Ainol /, '');\n s = s.replace(/^Coolpad ?/i, 'Coolpad ');\n s = s.replace(/^ALCATEL /, '');\n s = s.replace(/^Alcatel OT-(.*)/, 'one touch $1');\n s = s.replace(/^YL-/, '');\n s = s.replace(/^Novo7 ?/i, 'Novo7 ');\n s = s.replace(/^GIONEE /, '');\n s = s.replace(/^HW-/, '');\n s = s.replace(/^Huawei[ -]/i, 'Huawei ');\n s = s.replace(/^SAMSUNG[ -]/i, '');\n s = s.replace(/^SonyEricsson/, '');\n s = s.replace(/^Lenovo Lenovo/, 'Lenovo');\n s = s.replace(/^LNV-Lenovo/, 'Lenovo');\n s = s.replace(/^Lenovo-/, 'Lenovo ');\n s = s.replace(/^(LG)[ _\\/]/, '$1-');\n s = s.replace(/^(HTC.*)\\s(?:v|V)?[0-9.]+$/, '$1');\n s = s.replace(/^(HTC)[-\\/]/, '$1 ');\n s = s.replace(/^(HTC)([A-Z][0-9][0-9][0-9])/, '$1 $2');\n s = s.replace(/^(Motorola[\\s|-])/, '')\n s = s.replace(/^(Moto|MOT-)/, '')\n\n s = s.replace(/-?(orange(-ls)?|vodafone|bouygues)$/i, '');\n s = s.replace(/http:\\/\\/.+$/i, '');\n\n s = s.replace(/^\\s+|\\s+$/g, '');\n\n return s;\n }\n\n function parseVersion(version) {\n version = version.toString();\n var components = version.split('.');\n var major = components.shift();\n return parseFloat(major + '.' + components.join(''));\n }\n\n return Detected;\n\n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3VhLWRldmljZUAwLjEuMTBAdWEtZGV2aWNlL2xpYi91c2VyYWdlbnQtYmFzZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdWEtZGV2aWNlQDAuMS4xMEB1YS1kZXZpY2UvbGliL3VzZXJhZ2VudC1iYXNlLmpzPzA1ZDkiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBTVFJJTkdTX1NBTVNVTkcgPSAnU2Ftc3VuZycsXG4gICAgICAgIFNUUklOR1NfU0hBUlAgPSAnU2hhcnAnLFxuICAgICAgICBTVFJJTkdTX1NPTllfRVJJQ1NTT04gPSAnU29ueSBFcmljc3NvbicsXG4gICAgICAgIFNUUklOR1NfTU9UT1JPTEEgPSAnTW90b3JvbGEnLFxuICAgICAgICBTVFJJTkdTX0xHID0gJ0xHJyxcbiAgICAgICAgU1RSSU5HU19IVUFXRUkgPSAnSHVhd2VpJyxcbiAgICAgICAgU1RSSU5HU19IVEMgPSAnSFRDJyxcbiAgICAgICAgU1RSSU5HU19DT09MUEFEID0gJ0Nvb2xwYWQnLFxuICAgICAgICBTVFJJTkdTX0FTVVMgPSAnQXN1cycsXG4gICAgICAgIFNUUklOR1NfQUNFUiA9ICdBY2VyJztcbiAgICB2YXIgU1RSSU5HU19CQVNFRCA9ICcgYmFzZWQgZGV2aWNlJztcblxuICAgIHZhciBUT1VDSFdJWl9NT0RFTFMgPSB7XG4gICAgICAgICdTQU1TVU5HJzoge1xuICAgICAgICAgICAgJ0dULVMzMzcwQyc6IFtTVFJJTkdTX1NBTVNVTkcsICdDb3JieSAzRyddLFxuICAgICAgICAgICAgJ0dULVMzNjUwJzogW1NUUklOR1NfU0FNU1VORywgJ0NvcmJ5J10sXG4gICAgICAgICAgICAnR1QtUzM2NTMnOiBbU1RSSU5HU19TQU1TVU5HLCAnQ29yYnknXSxcbiAgICAgICAgICAgICdHVC1TMzg1MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdDb3JieSBJSSddLFxuICAgICAgICAgICAgJ0dULVM1MjMwJzogW1NUUklOR1NfU0FNU1VORywgJ1N0YXInXSxcbiAgICAgICAgICAgICdHVC1TNTIzMFcnOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RhciddLFxuICAgICAgICAgICAgJ0dULVM1MjMzJzogW1NUUklOR1NfU0FNU1VORywgJ1N0YXInXSxcbiAgICAgICAgICAgICdHVC1TNTI2MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdTdGFyIElJJ10sXG4gICAgICAgICAgICAnR1QtUzU1NjAnOiBbU1RSSU5HU19TQU1TVU5HLCAnTWFydmVsJ10sXG4gICAgICAgICAgICAnR1QtUzU2MjAnOiBbU1RSSU5HU19TQU1TVU5HLCAnTW9udGUnXSxcbiAgICAgICAgICAgICdHVC1TNzU1MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdCbHVlIEVhcnRoJ10sXG4gICAgICAgICAgICAnR1QtUzgwMDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnSmV0J10sXG4gICAgICAgICAgICAnR1QtUzgwMDMnOiBbU1RSSU5HU19TQU1TVU5HLCAnSmV0J10sXG4gICAgICAgICAgICAnU0dILUY0ODAnOiBbU1RSSU5HU19TQU1TVU5HLCAnVG9jY28nXSxcbiAgICAgICAgICAgICdTR0gtVDUyOGcnOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RyYWlnaHQgVGFsayddLFxuICAgICAgICAgICAgJ0dULUIzNDEwJzogW1NUUklOR1NfU0FNU1VORywgJ1N0YXIgUXdlcnR5J10sXG4gICAgICAgICAgICAnR1QtQjUzMTAnOiBbU1RSSU5HU19TQU1TVU5HLCAnQ29yYnkgUHJvJ10sXG4gICAgICAgICAgICAnR1QtQjc3MjInOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RhciBEdW9zJ10sXG4gICAgICAgICAgICAnR1QtQzY3MTInOiBbU1RSSU5HU19TQU1TVU5HLCAnU3RhciBJSSBEdW9zJ11cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBCQURBX01PREVMUyA9IHtcbiAgICAgICAgJ1NBTVNVTkcnOiB7XG4gICAgICAgICAgICAnR1QtIFM1MjUwJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgNTI1J10sXG4gICAgICAgICAgICAnR1QtUzUyNTAnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA1MjUnXSxcbiAgICAgICAgICAgICdHVC1TNTI1Myc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIDUyNSddLFxuICAgICAgICAgICAgJ0dULVM1MzMwJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgNTMzJ10sXG4gICAgICAgICAgICAnR1QtUzUzODAnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSBZJ10sXG4gICAgICAgICAgICAnR1QtUzUzODBEJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgWSddLFxuICAgICAgICAgICAgJ0dULVM1MzgwSyc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIFknXSxcbiAgICAgICAgICAgICdHVC1TNTc1MEUnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA1NzUnXSxcbiAgICAgICAgICAgICdHVC1TNTc1M0UnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA1NzUnXSxcbiAgICAgICAgICAgICdHVC1TNzIzMEInOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA3MjMnXSxcbiAgICAgICAgICAgICdHVC1TNzIzMEUnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA3MjMnXSxcbiAgICAgICAgICAgICdHVC1TNzIzM0UnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSA3MjMnXSxcbiAgICAgICAgICAgICdHVC1TNzI1MCc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIE0nXSxcbiAgICAgICAgICAgICdHVC1TNzI1MEQnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSBNJ10sXG4gICAgICAgICAgICAnR1QtUzg1MDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSddLFxuICAgICAgICAgICAgJ0dULVM4NTAwQyc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlJ10sXG4gICAgICAgICAgICAnR1QtUzg1MDBSJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUnXSxcbiAgICAgICAgICAgICdHVC1TODUwMFQnOiBbU1RSSU5HU19TQU1TVU5HLCAnV2F2ZSddLFxuICAgICAgICAgICAgJ0dULVM4NTMwJzogW1NUUklOR1NfU0FNU1VORywgJ1dhdmUgSUknXSxcbiAgICAgICAgICAgICdHVC1TODYwMCc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIDMnXSxcbiAgICAgICAgICAgICdTSFctTTQxMCc6IFtTVFJJTkdTX1NBTVNVTkcsICdXYXZlIDMnXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFRJWkVOX01PREVMUyA9IHtcbiAgICAgICAgJ1NBTVNVTkcnOiB7XG4gICAgICAgICAgICAnR1QtSTk1MDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnR1QtSTk1MDAnXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIEJSRVdfTU9ERUxTID0ge1xuICAgICAgICAnQ29vbHBhZCBENTA4JzogW1NUUklOR1NfQ09PTFBBRCwgJ0Q1MDgnXSxcbiAgICAgICAgJ0Nvb2xwYWQgRTYwMCc6IFtTVFJJTkdTX0NPT0xQQUQsICdFNjAwJ10sXG4gICAgICAgICdTQ0gtRjgzOSc6IFtTVFJJTkdTX1NBTVNVTkcsICdTQ0gtRjgzOSddXG4gICAgfVxuXG4gICAgdmFyIFdJTkRPV1NfTU9CSUxFX01PREVMUyA9IHtcbiAgICAgICAgJ0RYOTAwJzogW1NUUklOR1NfQUNFUiwgJ1RlbXBvIERYOTAwJ10sXG4gICAgICAgICdGOTAwJzogW1NUUklOR1NfQUNFUiwgJ1RlbXBvIEY5MDAnXSxcbiAgICAgICAgJ0Nvb2xwYWQgRjgwMCc6IFtTVFJJTkdTX0NPT0xQQUQsICdGODAwJ10sXG4gICAgICAgICdnYXJtaW4tYXN1cy1OdXZpZm9uZS1NMTAnOiBbJ0dhcm1pbi1Bc3VzJywgJ051dmlmb25lIE0xMCddLFxuICAgICAgICAnSFAgaVBBUSA1MTAnOiBbJ0hQJywgJ2lQQVEgNTEwJ10sXG4gICAgICAgICdIRCBtaW5pIFQ1NTU1JzogW1NUUklOR1NfSFRDLCAnSEQgbWluaSddLFxuICAgICAgICAnSFRDIEhEIG1pbmknOiBbU1RSSU5HU19IVEMsICdIRCBtaW5pJ10sXG4gICAgICAgICdIVEMgSEQgbWluaSBUNTU1NSc6IFtTVFJJTkdTX0hUQywgJ0hEIG1pbmknXSxcbiAgICAgICAgJ0hUQyBIRDInOiBbU1RSSU5HU19IVEMsICdIRDInXSxcbiAgICAgICAgJ0hUQyBIRDIgVDg1ODUnOiBbU1RSSU5HU19IVEMsICdIRDInXSxcbiAgICAgICAgJ0hEMiBUODU4NSc6IFtTVFJJTkdTX0hUQywgJ0hEMiddLFxuICAgICAgICAnVC1Nb2JpbGUgTEVPJzogW1NUUklOR1NfSFRDLCAnSEQyJ10sXG4gICAgICAgICdkb3BvZFQ1NTg4JzogW1NUUklOR1NfSFRDLCAnSGVuZ3NoYW4nXSxcbiAgICAgICAgJ0hUQyBNZWdhLVQzMzMzJzogW1NUUklOR1NfSFRDLCAnTWVnYSddLFxuICAgICAgICAnSFRDIFNuYXAgUzUyMSc6IFtTVFJJTkdTX0hUQywgJ1NuYXAnXSxcbiAgICAgICAgJ0hUQyBUb3VjaDIgVDMzMjAnOiBbU1RSSU5HU19IVEMsICdUb3VjaCAyJ10sXG4gICAgICAgICdIVEMgVG91Y2gyIFQzMzMzJzogW1NUUklOR1NfSFRDLCAnVG91Y2ggMiddLFxuICAgICAgICAnSFRDIFRvdWNoMiBUMzMzNSc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIDInXSxcbiAgICAgICAgJ0hUQyBQMzcwMCc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIERpYW1vbmQnXSxcbiAgICAgICAgJ0hUQyBUb3VjaCBEaWFtb25kMiBUNTM1Myc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIERpYW1vbmQgMiddLFxuICAgICAgICAnSFRDIFRvdWNoIEhEIFQ4MjgyJzogW1NUUklOR1NfSFRDLCAnVG91Y2ggSEQnXSxcbiAgICAgICAgJ0hUQyBUb3VjaCBIRCBUODI4Myc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIEhEJ10sXG4gICAgICAgICdIVEMgVG91Y2ggSEQyIFQ4NTg1JzogW1NUUklOR1NfSFRDLCAnVG91Y2ggSEQyJ10sXG4gICAgICAgICdIVEMgVG91Y2ggUHJvMiBUNzM3Myc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIFBybyAyJ10sXG4gICAgICAgICdUNzM4MCc6IFtTVFJJTkdTX0hUQywgJ1RvdWNoIFBybyAyJ10sXG4gICAgICAgICdIVEMgVHlUTiBJSSc6IFtTVFJJTkdTX0hUQywgJ1R5VE4gSUknXSxcbiAgICAgICAgJ0dULUI3MzAwJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIExpdGUnXSxcbiAgICAgICAgJ0dULUI3NjEwJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIFBybyddLFxuICAgICAgICAnR1QtaTgwMDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgMiddLFxuICAgICAgICAnR1QtSTgwMDAnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgMiddLFxuICAgICAgICAnR1QtSTgwMDBVJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIDInXSxcbiAgICAgICAgJ00xaSc6IFtTVFJJTkdTX1NPTllfRVJJQ1NTT04sICdNMWkgQXNwZW4nXVxuICAgIH1cblxuICAgIHZhciBXSU5ET1dTX1BIT05FX01PREVMUyA9IHtcbiAgICAgICAgJ0FjZXInOiB7XG4gICAgICAgICAgICAnQWxsZWdybyc6IFtTVFJJTkdTX0FDRVIsICdBbGxlZ3JvJ10sXG4gICAgICAgICAgICAnTTMxMCc6IFtTVFJJTkdTX0FDRVIsICdBbGxlZ3JvJ11cbiAgICAgICAgfSxcblxuICAgICAgICAnQXN1cyc6IHtcbiAgICAgICAgICAgICdHYWxheHk2JzogW1NUUklOR1NfQVNVUywgJ0dhbGF4eSA2J11cbiAgICAgICAgfSxcblxuICAgICAgICAnREVMTCc6IHtcbiAgICAgICAgICAgICdWZW51ZSBQcm8nOiBbJ0RlbGwnLCAnVmVudWUgUHJvJ11cbiAgICAgICAgfSxcblxuICAgICAgICAnRnVqaXRzdVRvc2hpYmFNb2JpbGVDb21tdW4nOiB7XG4gICAgICAgICAgICAnSVMxMlQnOiBbJ0Z1aml0c3UgVG9zaGliYScsICdJUzEyVCddXG4gICAgICAgIH0sXG5cbiAgICAgICAgJ0hUQyc6IHtcbiAgICAgICAgICAgICc3IE1vemFydCc6IFtTVFJJTkdTX0hUQywgJzcgTW96YXJ0J10sXG4gICAgICAgICAgICAnNyBNb3phcnQgVDg2OTgnOiBbU1RSSU5HU19IVEMsICc3IE1vemFydCddLFxuICAgICAgICAgICAgJ1Q4Njk3JzogW1NUUklOR1NfSFRDLCAnNyBNb3phcnQnXSxcbiAgICAgICAgICAgICdUODY5OCc6IFtTVFJJTkdTX0hUQywgJzcgTW96YXJ0J10sXG4gICAgICAgICAgICAnUEQ2NzEwMCc6IFtTVFJJTkdTX0hUQywgJzcgTW96YXJ0J10sXG4gICAgICAgICAgICAnTW96YXJ0IFQ4Njk4JzogW1NUUklOR1NfSFRDLCAnNyBNb3phcnQnXSxcbiAgICAgICAgICAgICdNb3phcnQnOiBbU1RSSU5HU19IVEMsICc3IE1vemFydCddLFxuICAgICAgICAgICAgJ1VTQ0NIVEMtUEM5MzEwMCc6IFtTVFJJTkdTX0hUQywgJ0Fycml2ZSddLFxuICAgICAgICAgICAgJ0dvbGQnOiBbU1RSSU5HU19IVEMsICdHb2xkICddLFxuICAgICAgICAgICAgJ0hEMic6IFtTVFJJTkdTX0hUQywgJ0hEMiddLFxuICAgICAgICAgICAgJ0hENyc6IFtTVFJJTkdTX0hUQywgJ0hENyddLFxuICAgICAgICAgICAgJ0hENyBUOTI5Mic6IFtTVFJJTkdTX0hUQywgJ0hENyddLFxuICAgICAgICAgICAgJ1Q5Mjk1JzogW1NUUklOR1NfSFRDLCAnSEQ3J10sXG4gICAgICAgICAgICAnVDkyOTYnOiBbU1RSSU5HU19IVEMsICdIRDcnXSxcbiAgICAgICAgICAgICdIRDcgSW5maW5pdHknOiBbU1RSSU5HU19IVEMsICdIRDcnXSxcbiAgICAgICAgICAgICdUNzU3NSc6IFtTVFJJTkdTX0hUQywgJzcgUHJvJ10sXG4gICAgICAgICAgICAnNyBQcm8gVDc1NzYnOiBbU1RSSU5HU19IVEMsICc3IFBybyddLFxuICAgICAgICAgICAgJ213cDY5ODUnOiBbU1RSSU5HU19IVEMsICdUcm9waHknXSxcbiAgICAgICAgICAgICc3IFRyb3BoeSBUODY4Nic6IFtTVFJJTkdTX0hUQywgJ1Ryb3BoeSddLFxuICAgICAgICAgICAgJzcgVHJvcGh5JzogW1NUUklOR1NfSFRDLCAnVHJvcGh5J10sXG4gICAgICAgICAgICAnUEM0MDEwMCc6IFtTVFJJTkdTX0hUQywgJ1Ryb3BoeSddLFxuICAgICAgICAgICAgJ1RvdWNoLUlUIFRyb3BoeSc6IFtTVFJJTkdTX0hUQywgJ1Ryb3BoeSddLFxuICAgICAgICAgICAgJ1JhZGFyJzogW1NUUklOR1NfSFRDLCAnUmFkYXInXSxcbiAgICAgICAgICAgICdSYWRhciA0Ryc6IFtTVFJJTkdTX0hUQywgJ1JhZGFyJ10sXG4gICAgICAgICAgICAnUmFkYXIgQzExMGUnOiBbU1RSSU5HU19IVEMsICdSYWRhciddLFxuICAgICAgICAgICAgJ01hemFhJzogW1NUUklOR1NfSFRDLCAnTWF6YWEnXSxcbiAgICAgICAgICAgICdNb25kcmlhbic6IFtTVFJJTkdTX0hUQywgJ01vbmRyaWFuJ10sXG4gICAgICAgICAgICAnU2NodWJlcnQnOiBbU1RSSU5HU19IVEMsICdTY2h1YmVydCddLFxuICAgICAgICAgICAgJzcgU2NodWJlcnQgVDkyOTInOiBbU1RSSU5HU19IVEMsICdTY2h1YmVydCddLFxuICAgICAgICAgICAgJ1NwYXJrJzogW1NUUklOR1NfSFRDLCAnU3BhcmsnXSxcbiAgICAgICAgICAgICdUODc4OCc6IFtTVFJJTkdTX0hUQywgJ1N1cnJvdW5kJ10sXG4gICAgICAgICAgICAnVElUQU4gWDMxMGUnOiBbU1RSSU5HU19IVEMsICdUaXRhbiddLFxuICAgICAgICAgICAgJ1gzMTBlJzogW1NUUklOR1NfSFRDLCAnVGl0YW4nXSxcbiAgICAgICAgICAgICdQSTM5MTAwJzogW1NUUklOR1NfSFRDLCAnVGl0YW4nXSxcbiAgICAgICAgICAgICdQSTg2MTAwJzogW1NUUklOR1NfSFRDLCAnVGl0YW4gSUknXSxcbiAgICAgICAgICAgICdVbHRpbWF0ZSc6IFtTVFJJTkdTX0hUQywgJ1VsdGltYXRlJ11cbiAgICAgICAgfSxcblxuICAgICAgICAnTEcnOiB7XG4gICAgICAgICAgICAnR1c5MTAnOiBbU1RSSU5HU19MRywgJ09wdGltdXMgNyddLFxuICAgICAgICAgICAgJ0xHIEUtOTAwJzogW1NUUklOR1NfTEcsICdPcHRpbXVzIDcgRTkwMCddLFxuICAgICAgICAgICAgJ0xHLUU5MDAnOiBbU1RSSU5HU19MRywgJ09wdGltdXMgNyBFOTAwJ10sXG4gICAgICAgICAgICAnTEctRTkwMGgnOiBbU1RSSU5HU19MRywgJ09wdGltdXMgNyBFOTAwJ10sXG4gICAgICAgICAgICAnTEctQzkwMCc6IFtTVFJJTkdTX0xHLCAnT3B0aW11cyA3USddLFxuICAgICAgICAgICAgJ0xHLUM5MDBCJzogW1NUUklOR1NfTEcsICdRdWFudHVtJ10sXG4gICAgICAgICAgICAnTEctQzkwMGsnOiBbU1RSSU5HU19MRywgJ1F1YW50dW0nXVxuICAgICAgICB9LFxuXG4gICAgICAgICdub2tpYSc6IHtcbiAgICAgICAgICAgICdTZWFSYXknOiBbJ05va2lhJywgJ0x1bWlhIDgwMCddLFxuICAgICAgICAgICAgJzgwMEMnOiBbJ05va2lhJywgJ0x1bWlhIDgwMCddXG4gICAgICAgIH0sXG5cbiAgICAgICAgJ05PS0lBJzoge1xuICAgICAgICAgICAgJzcxMCc6IFsnTm9raWEnLCAnTHVtaWEgNzEwJ10sXG4gICAgICAgICAgICAnTm9raWEgNzEwJzogWydOb2tpYScsICdMdW1pYSA3MTAnXSxcbiAgICAgICAgICAgICdMdW1pYSA3MTAnOiBbJ05va2lhJywgJ0x1bWlhIDcxMCddLFxuICAgICAgICAgICAgJ0x1bWlhIDcxOSc6IFsnTm9raWEnLCAnTHVtaWEgNzE5J10sXG4gICAgICAgICAgICAnTHVtaWEgODAwJzogWydOb2tpYScsICdMdW1pYSA4MDAnXSxcbiAgICAgICAgICAgICc4MDAnOiBbJ05va2lhJywgJ0x1bWlhIDgwMCddLFxuICAgICAgICAgICAgJ0x1bWlhIDkwMCc6IFsnTm9raWEnLCAnTHVtaWEgOTAwJ10sXG4gICAgICAgICAgICAnWFhYJzogWydOb2tpYScsICdwcm90b3R5cGUnXVxuICAgICAgICB9LFxuXG4gICAgICAgICdTQU1TVU5HJzoge1xuICAgICAgICAgICAgJ0dULUk4MzUwJzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIFcnXSxcbiAgICAgICAgICAgICdHVC1JODM1MFQnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgVyddLFxuICAgICAgICAgICAgJ1NHSC1pNjc3JzogW1NUUklOR1NfU0FNU1VORywgJ0ZvY3VzIEZsYXNoJ10sXG4gICAgICAgICAgICAnU0dILWk3MDcnOiBbU1RSSU5HU19TQU1TVU5HLCAnVGF5bG9yJ10sXG4gICAgICAgICAgICAnU0dILWk5MTcnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgNyddLFxuICAgICAgICAgICAgJ1NHSC1JOTE3JzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIDcnXSxcbiAgICAgICAgICAgICdTR0gtaTkxNy4nOiBbU1RSSU5HU19TQU1TVU5HLCAnRm9jdXMnXSxcbiAgICAgICAgICAgICdTR0gtaTkxN1InOiBbU1RSSU5HU19TQU1TVU5HLCAnRm9jdXMnXSxcbiAgICAgICAgICAgICdTR0gtaTkzNyc6IFtTVFJJTkdTX1NBTVNVTkcsICdGb2N1cyBTJ10sXG4gICAgICAgICAgICAnT01OSUE3JzogW1NUUklOR1NfU0FNU1VORywgJ09tbmlhIDcnXSxcbiAgICAgICAgICAgICdPTUlOQTcnOiBbU1RSSU5HU19TQU1TVU5HLCAnT21uaWEgNyddLFxuICAgICAgICAgICAgJ1RheWxvcic6IFtTVFJJTkdTX1NBTVNVTkcsICdUYXlsb3InXVxuICAgICAgICB9LFxuXG4gICAgICAgICdUT1NISUJBJzoge1xuICAgICAgICAgICAgJ1RTVU5BR0knOiBbJ1Rvc2hpYmEnLCAnVHN1bmFnaSddXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIEFORFJPSURfTU9ERUxTID0ge1xuICAgICAgICAnQW5kcm9pZCc6IFtudWxsLCBudWxsXSxcbiAgICAgICAgJ2dvb2dsZSBzZGsnOiBbbnVsbCwgbnVsbF0sXG4gICAgICAgICdzZGsnOiBbbnVsbCwgbnVsbF0sXG4gICAgICAgICdnZW5lcmljJzogW251bGwsIG51bGxdLFxuICAgICAgICAnZ2VuZXJpYyB4ODYnOiBbbnVsbCwgbnVsbF0sXG4gICAgICAgICdhbWQgYnJhem9zJzogWydBTUQnLCAnRnVzaW9uYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdBbWxvZ2ljIE0xIHJlZmVyZW5jZSBib2FyZCc6IFsnQW1sb2dpYycsICdNMSByZWZlcmVuY2UgYm9hcmQnXSxcbiAgICAgICAgJ0FNTDg3MjZNJzogWydBbWxvZ2ljJywgJ0FNTDg3MjYtTWJhc2VkIGRldmljZSddLFxuICAgICAgICAndmV4cHJlc3MgYTknOiBbJ0FSTScsICdWZXJzYXRpbGUgRXhwcmVzcyBkZXZlbG9wbWVudCBwbGF0Zm9ybSddLFxuICAgICAgICAnYmNtNzIzMSc6IFsnQnJvYWRjb20nLCAnQkNNNzIzMWJhc2VkIGRldmljZScsICd0ZWxldmlzaW9uJ10sXG4gICAgICAgICdiY203NDI1JzogWydCcm9hZGNvbScsICdCQ003NDI1YmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ2JjbTc0MjknOiBbJ0Jyb2FkY29tJywgJ0JDTTc0MjliYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnaW14NTAgcmRwJzogWydGcmVlc2NhbGUnLCAnaS5NWDUwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdpbXg1MSBiYmcnOiBbJ0ZyZWVzY2FsZScsICdpLk1YNTFiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ2lteDUzIGxvY28nOiBbJ0ZyZWVzY2FsZScsICdpLk1YNTNiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ2lteDUzIG1wMjA0ZjMnOiBbJ0ZyZWVzY2FsZScsICdpLk1YNTNiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ2lteDUzIHNtZCc6IFsnRnJlZXNjYWxlJywgJ2kuTVg1M2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnaW14NTMgeWVhZ2xlJzogWydGcmVlc2NhbGUnLCAnaS5NWDUzYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdpbXg2cSc6IFsnRnJlZXNjYWxlJywgJ2kuTVg2UWJhc2VkIGRldmljZSddLFxuICAgICAgICAnT0RST0lELUEnOiBbJ0hhcmRrZXJuZWwnLCAnT0RST0lELUEgZGV2ZWxvcGVyIHRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ21mbGQgZHYxMCc6IFsnSW50ZWwnLCAnTWVkZmllbGRiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21mbGQgZHYyMCc6IFsnSW50ZWwnLCAnTWVkZmllbGRiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21mbGQgbHcwMCc6IFsnSW50ZWwnLCAnTWVkZmllbGRiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21mbGQgcHIyJzogWydJbnRlbCcsICdNZWRmaWVsZGJhc2VkIGRldmljZSddLFxuICAgICAgICAnbWZsZCBwcjMnOiBbJ0ludGVsJywgJ01lZGZpZWxkYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdiZXJsaW4gYmcyJzogWydNYXJ2ZWxsJywgJ0FybWFkYSAxMDAwYmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ01TdGFyIEFtYmVyMyc6IFsnTVN0YXInLCAnQW1iZXIzYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdLb25rYSBBbWJlcjMnOiBbJ01TdGFyJywgJ0FtYmVyM2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnbXQ1Mzk2JzogWydNZWRpYXRlaycsICdNVDUzOTZiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnYmlyZDc1djInOiBbJ01lZGlhdGVrJywgJ01UNjU3NWJhc2VkIGRldmljZSddLFxuICAgICAgICAnZWFnbGU3NXYxIDInOiBbJ01lZGlhdGVrJywgJ01UNjU3NWJhc2VkIGRldmljZSddLFxuICAgICAgICAnTUJYIERWQlQgcmVmZXJlbmNlIGJvYXJkIChjMDNyZWYpJzogWydNWEInLCAnRFZCVCByZWZlcmVuY2UgYm9hcmQnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnTlMyODE2JzogWydOdWZyb250JywgJ051U21hcnQgMjgxNmJhc2VkIGRldmljZSddLFxuICAgICAgICAnVmVudGFuYSc6IFsnblZpZGlhJywgJ1RlZ3JhIFZlbnRhbmEgZGV2ZWxvcG1lbnQga2l0J10sXG4gICAgICAgICdDYXJkaHUnOiBbJ25WaWRpYScsICdUZWdyYSAzYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdQYW5kYSc6IFsnUGFuZGFib2FyZCcsICdEZXZlbG9wbWVudCBLaXQnXSxcbiAgICAgICAgJ3BhbmRhYm9hcmQnOiBbJ1BhbmRhYm9hcmQnLCAnRGV2ZWxvcG1lbnQgS2l0J10sXG4gICAgICAgICdQYW5kYUJvYXJkJzogWydQYW5kYWJvYXJkJywgJ0RldmVsb3BtZW50IEtpdCddLFxuICAgICAgICAnTVNNJzogWydRdWFsY29tbScsICdTbmFwZHJhZ29uYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdtc203MjI3IGZmYSc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYyNyBzdXJmJzogWydRdWFsY29tbScsICdTbmFwZHJhZ29uIFMxYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdtc203NjI3YSc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYyN2Egc2t1MSc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYyN2Egc2t1Myc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMWJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtNzYzMCBmdXNpb24nOiBbJ1F1YWxjb21tJywgJ1NuYXBkcmFnb24gUzJiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21zbTc2MzAgc3VyZic6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTMmJhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtODY2MCBjb3VnYXInOiBbJ1F1YWxjb21tJywgJ1NuYXBkcmFnb24gUzNiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ21zbTg2NjAgc3VyZic6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTM2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnbXNtODk2MCc6IFsnUXVhbGNvbW0nLCAnU25hcGRyYWdvbiBTNGJhc2VkIGRldmljZSddLFxuICAgICAgICAncmsyODA4c2RrJzogWydSb2NrY2hpcCcsICdSSzI4MDhiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ1JLMjgxOCc6IFsnUm9ja2NoaXAnLCAnUksyODE4YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdyazI4MThzZGsnOiBbJ1JvY2tjaGlwJywgJ1JLMjgxOGJhc2VkIGRldmljZSddLFxuICAgICAgICAnQW5kcm9pZC1mb3ItUm9ja2NoaXAtMjgxOCc6IFsnUm9ja2NoaXAnLCAnUksyODE4YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdyazI5c2RrJzogWydSb2NrY2hpcCcsICdSSzI5YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdSazI5c2RrJzogWydSb2NrY2hpcCcsICdSSzI5YmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdyazMwc2RrJzogWydSb2NrY2hpcCcsICdSSzMwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdzM2M2NDEwJzogWydTYW1zdW5nJywgJ1MzQzY0MTBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ3NtZGs2NDEwJzogWydTYW1zdW5nJywgJ1MzQzY0MTBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ1NNREtDMTEwJzogWydTYW1zdW5nJywgJ0V4eW5vcyAzMTEwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdTTURLVjIxMCc6IFsnU2Ftc3VuZycsICdFeHlub3MgNDIxMGJhc2VkIGRldmljZSddLFxuICAgICAgICAnUzVQVjIxMCc6IFsnU2Ftc3VuZycsICdFeHlub3MgNDIxMGJhc2VkIGRldmljZSddLFxuICAgICAgICAnc2VjIHNtZGtjMjEwJzogWydTYW1zdW5nJywgJ0V4eW5vcyA0MjEwYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdTTURLNHgxMic6IFsnU2Ftc3VuZycsICdFeHlub3MgNDIxMiBvciA0NDEyYmFzZWQgZGV2aWNlJ10sXG4gICAgICAgICdzbXA4Nnh4JzogWydTaWdtYScsICdTTVA4Nnh4YmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ3N2ODg2MCc6IFsnU2t5dmlpYScsICdTVjg4NjBiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnc3RlIHU4NTAwJzogWydTVCBFcmljc3NvbicsICdOb3ZhdGhvciBVODUwMGJhc2VkIGRldmljZSddLFxuICAgICAgICAnVGVsZWNoaXBzIE04MDEgRXZhbHVhdGlvbiBCb2FyZCc6IFsnVGVsZWNoaXBzJywgJ004MDFiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnVGVsZWNoaXBzIFRDQzg5MDAgRXZhbHVhdGlvbiBCb2FyZCc6IFsnVGVsZWNoaXBzJywgJ1RDQzg5MDBiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnVENDODkyMCBTVEIgRVYnOiBbJ1RlbGVjaGlwcycsICdUQ0M4OTIwYmFzZWQgZGV2aWNlJywgJ3RlbGV2aXNpb24nXSxcbiAgICAgICAgJ09NQVAnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ09NQVBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ09NQVAgU1MnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ09NQVBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ0xvZ2ljUEQgWm9vbTInOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ09NQVBiYXNlZCBkZXZpY2UnXSxcbiAgICAgICAgJ29tYXAzZXZtJzogWydUZXhhcyBJbnN0cnVtZW50cycsICdPTUFQM2Jhc2VkIGRldmljZSddLFxuICAgICAgICAnT21hcDVzZXZtJzogWydUZXhhcyBJbnN0cnVtZW50cycsICdPTUFQNWJhc2VkIGRldmljZSddLFxuICAgICAgICAncG54ODQ3MyBraXJ5dW5nJzogWydUcmlkZW50JywgJ1BOWDg0NzNiYXNlZCBkZXZpY2UnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnY3Jlc3BvJzogWydHb29nbGUnLCAnTmV4dXMgUyddLFxuICAgICAgICAnQ3Jlc3BvJzogWydHb29nbGUnLCAnTmV4dXMgUyddLFxuICAgICAgICAnQ3Jlc3BvNEcnOiBbJ0dvb2dsZScsICdOZXh1cyBTJ10sXG4gICAgICAgICdQYXNzaW9uJzogWydHb29nbGUnLCAnTmV4dXMgT25lJ10sXG4gICAgICAgICdCcmF2byc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnZHJlYW0nOiBbJ0hUQycsICdEcmVhbSddLFxuICAgICAgICAnVm9ndWUnOiBbJ0hUQycsICdUb3VjaCddLFxuICAgICAgICAnVmVuZG9yIE9wdGltdXMnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ1N0aW5ncmF5JzogWydNb3Rvcm9sYScsICdYT09NJywgJ3RhYmxldCddLFxuICAgICAgICAnV2luZ3JheSc6IFsnTW90b3JvbGEnLCAnWE9PTScsICd0YWJsZXQnXSxcbiAgICAgICAgJ21hZ3Vybyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ01hZ3Vybyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ1Rvcm8tVlpXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOZXh1cyddLFxuICAgICAgICAnYmxhemUnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ0JsYXplIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0JsYXplJzogWydUZXhhcyBJbnN0cnVtZW50cycsICdCbGF6ZSBUYWJsZXQnLCAndGFibGV0J10sXG4gICAgICAgICdCbGF6ZSBUYWJsZXQnOiBbJ1RleGFzIEluc3RydW1lbnRzJywgJ0JsYXplIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0JsdWVTdGFja3MnOiBbJ0JsdWVTdGFja3MnLCAnQXBwIFBsYXllcicsICdkZXNrdG9wJ10sXG4gICAgICAgICd5b3V3YXZlIGN1c3RvbSc6IFsnWW91d2F2ZScsICdBbmRyb2lkIG9uIFBDJywgJ2Rlc2t0b3AnXSxcbiAgICAgICAgJ0ExMDAnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBMTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQTEwMSc6IFsnQWNlcicsICdJY29uaWEgVGFiIEExMDEnLCAndGFibGV0J10sXG4gICAgICAgICdBMjAwJzogWydBY2VyJywgJ0ljb25pYSBUYWIgQTIwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E1MDAnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBNTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQTUwMSc6IFsnQWNlcicsICdJY29uaWEgVGFiIEE1MDEnLCAndGFibGV0J10sXG4gICAgICAgICdBNTEwJzogWydBY2VyJywgJ0ljb25pYSBUYWIgQTUxMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E1MTEnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBNTExJywgJ3RhYmxldCddLFxuICAgICAgICAnQTcwMCc6IFsnQWNlcicsICdJY29uaWEgVGFiIEE3MDAnLCAndGFibGV0J10sXG4gICAgICAgICdBY2VyIEE4MDAnOiBbJ0FjZXInLCAnSWNvbmlhIFRhYiBBODAwJywgJ3RhYmxldCddLFxuICAgICAgICAnRTExMCc6IFsnQWNlcicsICdiZVRvdWNoIEUxMTAnXSxcbiAgICAgICAgJ0UxMjAnOiBbJ0FjZXInLCAnYmVUb3VjaCBFMTIwJ10sXG4gICAgICAgICdFMTMwJzogWydBY2VyJywgJ2JlVG91Y2ggRTEzMCddLFxuICAgICAgICAnRTE0MCc6IFsnQWNlcicsICdiZVRvdWNoIEUxNDAnXSxcbiAgICAgICAgJ0UyMTAnOiBbJ0FjZXInLCAnYmVUb3VjaCBFMjEwJ10sXG4gICAgICAgICdFMzEwJzogWydBY2VyJywgJ0xpcXVpZCBtaW5pJ10sXG4gICAgICAgICdFMzIwJzogWydBY2VyJywgJ0xpcXVpZCBFeHByZXNzJ10sXG4gICAgICAgICdFMzMwJzogWydBY2VyJywgJ0xpcXVpZCBHbG93J10sXG4gICAgICAgICdFNDAwJzogWydBY2VyJywgJ2JlVG91Y2ggRTQwMCddLFxuICAgICAgICAnRzEwMFcnOiBbJ0FjZXInLCAnRzEwMFcnXSxcbiAgICAgICAgJ1MxMDAnOiBbJ0FjZXInLCAnTGlxdWlkJ10sXG4gICAgICAgICdTMTEwJzogWydBY2VyJywgJ1N0cmVhbSddLFxuICAgICAgICAnUzEyMCc6IFsnQWNlcicsICdMaXF1aWQgbXQnXSxcbiAgICAgICAgJ1MzMDAnOiBbJ0FjZXInLCAnSWNvbmlhIFNtYXJ0J10sXG4gICAgICAgICdTNTAwJzogWydBY2VyJywgJ0Nsb3VkTW9iaWxlJ10sXG4gICAgICAgICdURDYwMCc6IFsnQWNlcicsICdiZVRvdWNoIFRENjAwJ10sXG4gICAgICAgICdMaXF1aWQnOiBbJ0FjZXInLCAnTGlxdWlkJ10sXG4gICAgICAgICdMaXF1aWQgRSc6IFsnQWNlcicsICdMaXF1aWQgRSddLFxuICAgICAgICAnTGlxdWlkIE10JzogWydBY2VyJywgJ0xpcXVpZCBtdCddLFxuICAgICAgICAnTGlxdWlkIE1UJzogWydBY2VyJywgJ0xpcXVpZCBtdCddLFxuICAgICAgICAnTGlxdWlkIE1ldGFsJzogWydBY2VyJywgJ0xpcXVpZCBtdCddLFxuICAgICAgICAnU3RyZWFtJzogWydBY2VyJywgJ1N0cmVhbSddLFxuICAgICAgICAnTjcwMCc6IFsnYWlnbycsICdONzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnTTgwMSc6IFsnYWlnbycsICdNODAxJywgJ3RhYmxldCddLFxuICAgICAgICAnTm92bzcnOiBbJ0Fpbm92bycsICdOb3ZvNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IEF1cm9yYSc6IFsnQWlub3ZvJywgJ05vdm83IEF1cm9yYScsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IEFkdmFuY2VkJzogWydBaW5vdm8nLCAnTm92bzcgQWR2YW5jZWQnLCAndGFibGV0J10sXG4gICAgICAgICdOb3ZvNyBBZHZhbmNlZDInOiBbJ0Fpbm92bycsICdOb3ZvNyBBZHZhbmNlZCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnTm92bzcgQmFzaWMnOiBbJ0Fpbm92bycsICdOb3ZvNyBCYXNpYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IEVMRic6IFsnQWlub3ZvJywgJ05vdm83IEVsZicsICd0YWJsZXQnXSxcbiAgICAgICAgJ05vdm83IFBBTEFESU4nOiBbJ0Fpbm92bycsICdOb3ZvNyBQYWxhZGluJywgJ3RhYmxldCddLFxuICAgICAgICAnTm92bzggQWR2YW5jZWQnOiBbJ0Fpbm92bycsICdOb3ZvOCBBZHZhbmNlZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA4OTAnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDg5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDg5MEQnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDg5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDg5MSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggODkxJ10sXG4gICAgICAgICdPTkUgVE9VQ0ggOTAzJzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5MDNTSFYtRTE3MEsnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5MDYnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkwNiddLFxuICAgICAgICAnb25lIHRvdWNoIDkwOCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTA4J10sXG4gICAgICAgICdvbmUgdG91Y2ggOTA4Ric6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTA4J10sXG4gICAgICAgICdvbmUgdG91Y2ggOTA4Uyc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTA4J10sXG4gICAgICAgICdvbmUgdG91Y2ggOTEwJzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5MTAnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5MTgnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDkxOEQnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnT05FIFRPVUNIIDkxOEQnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDkxOE0nOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDkxOE4nOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnb25lIHRvdWNoIDk4MCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTgwJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTgwQSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTgwJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTgxQSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTgxJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTg2JzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5ODYnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5OTAnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDk5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDk5MEEnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDk5MCddLFxuICAgICAgICAnb25lIHRvdWNoIDk5MSc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTkxJ10sXG4gICAgICAgICdvbmUgdG91Y2ggOTkxRCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTkxJ10sXG4gICAgICAgICdPTkUgVE9VQ0ggOTkzJzogWydBbGNhdGVsJywgJ09uZSBUb3VjaCA5OTMnXSxcbiAgICAgICAgJ29uZSB0b3VjaCA5OTUnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDk5NSddLFxuICAgICAgICAnVGVsZW5vciBPbmVUb3VjaCc6IFsnQWxjYXRlbCcsICdPbmUgVG91Y2ggOTkwJ10sXG4gICAgICAgICdPVCA5MTgnOiBbJ0FsY2F0ZWwnLCAnT25lIFRvdWNoIDkxOCddLFxuICAgICAgICAnVmVudHVyZSc6IFsnQWxjYXRlbCcsICdWZW50dXJlJ10sXG4gICAgICAgICdBbGx3aW5uZXIgQTEwJzogWydBbGxXaW5uZXInLCAnQTEwJywgJ3RhYmxldCddLFxuICAgICAgICAnOTdGQyc6IFsnQWxsV2lubmVyJywgJ0ExMCA5N0ZDJywgJ3RhYmxldCddLFxuICAgICAgICAnS2luZGxlIEZpcmUnOiBbJ0FtYXpvbicsICdLaW5kbGUgRmlyZScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FtYXpvbiBLaW5kbGUgRmlyZSc6IFsnQW1hem9uJywgJ0tpbmRsZSBGaXJlJywgJ3RhYmxldCddLFxuICAgICAgICAnQU1EMTIwJzogWydBbnlEQVRBJywgJ0FueVRBQiBBTUQxMjAnLCAndGFibGV0J10sXG4gICAgICAgICdNVzA4MTEnOiBbJ0FPQycsICdCcmVlemUgTVcwODExJywgJ3RhYmxldCddLFxuICAgICAgICAnTVcwODIxIFYyLjAnOiBbJ0FPQycsICdCcmVlemUgTVcwODIxJywgJ3RhYmxldCddLFxuICAgICAgICAnTVcwOTIyJzogWydBT0MnLCAnQnJlZXplIE1XMDkyMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FwYW5kYSBBNjAnOiBbJ0FwYW5kYScsICdBNjAnXSxcbiAgICAgICAgJ2FwYW5kYS1BNjAnOiBbJ0FwYW5kYScsICdBNjAnXSxcbiAgICAgICAgJ0E4MEtTQyc6IFsnQXJjaG9zJywgJ0Fybm92YSA4JywgJ3RhYmxldCddLFxuICAgICAgICAnQU43Q0cyJzogWydBcmNob3MnLCAnQXJub3ZhIDcnLCAndGFibGV0J10sXG4gICAgICAgICdBMTAxQic6IFsnQXJjaG9zJywgJ0Fybm92YSAxMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FOMTBCRzJEVCc6IFsnQXJjaG9zJywgJ0Fybm92YSAxMCBCJywgJ3RhYmxldCddLFxuICAgICAgICAnQU4xMEcyJzogWydBcmNob3MnLCAnQXJub3ZhIDEwIEcyJywgJ3RhYmxldCddLFxuICAgICAgICAnQTMyJzogWydBcmNob3MnLCAnMzInLCAnbWVkaWEnXSxcbiAgICAgICAgJ0EzNURFJzogWydBcmNob3MnLCAnMzUgU21hcnQgSG9tZSBQaG9uZSddLFxuICAgICAgICAnQTQzJzogWydBcmNob3MnLCAnNDMnLCAnbWVkaWEnXSxcbiAgICAgICAgJ0FyY2hvczUnOiBbJ0FyY2hvcycsICc1JywgJ21lZGlhJ10sXG4gICAgICAgICdBNzBIJzogWydBcmNob3MnLCAnNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3MEhCJzogWydBcmNob3MnLCAnNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3MEJIVCc6IFsnQXJjaG9zJywgJzcnLCAndGFibGV0J10sXG4gICAgICAgICdBNzBDSFQnOiBbJ0FyY2hvcycsICc3QycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3MFMnOiBbJ0FyY2hvcycsICc3MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E3RUInOiBbJ0FyY2hvcycsICc3MEInLCAndGFibGV0J10sXG4gICAgICAgICdBUkNIT1MgNzBpdDInOiBbJ0FyY2hvcycsICc3MCBJVCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnQVJDSE9TIDgwRzknOiBbJ0FyY2hvcycsICc4MCBHOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FSQ0hPUyAxMDFHOSc6IFsnQXJjaG9zJywgJzEwMSBHOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0ExMDFJVCc6IFsnQXJjaG9zJywgJzEwMSBJVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVFJJJzogWydBU1RSSScsICdlLXJlYWRlcicsICdlcmVhZGVyJ10sXG4gICAgICAgICdlZWVwYyc6IFsnQXN1cycsICdFZWUgUGMnXSxcbiAgICAgICAgJ2FzdXMgbGFwdG9wJzogWydBc3VzJywgJ0VlZSBQYyddLFxuICAgICAgICAnTUUxNzEnOiBbJ0FzdXMnLCAnRWVlIFBhZCBNZU1PJywgJ3RhYmxldCddLFxuICAgICAgICAnU2xpZGVyIFNMMTAxJzogWydBc3VzJywgJ0VlZSBQYWQgU2xpZGVyJywgJ3RhYmxldCddLFxuICAgICAgICAnRVBBRCc6IFsnQXN1cycsICdFZWUgUGFkIFRyYW5zZm9ybWVyJywgJ3RhYmxldCddLFxuICAgICAgICAnVEYxMDEnOiBbJ0FzdXMnLCAnRWVlIFBhZCBUcmFuc2Zvcm1lcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RyYW5zZm9ybWVyIFRGMTAxJzogWydBc3VzJywgJ0VlZSBQYWQgVHJhbnNmb3JtZXInLCAndGFibGV0J10sXG4gICAgICAgICdUcmFuc2Zvcm1lciBURjEwMUcnOiBbJ0FzdXMnLCAnRWVlIFBhZCBUcmFuc2Zvcm1lcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RGMjAxJzogWydBc3VzJywgJ0VlZSBQYWQgVHJhbnNmb3JtZXIgUHJpbWUnLCAndGFibGV0J10sXG4gICAgICAgICdUcmFuc2Zvcm1lciBQcmltZSBURjIwMSc6IFsnQXN1cycsICdFZWUgUGFkIFRyYW5zZm9ybWVyIFByaW1lJywgJ3RhYmxldCddLFxuICAgICAgICAnVHJhbnNmb3JtZXIgUHJpbWUnOiBbJ0FzdXMnLCAnRWVlIFBhZCBUcmFuc2Zvcm1lciBQcmltZScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RyYW5zZm9ybWVyIFBhZCBURjMwMFQnOiBbJ0FzdXMnLCAnVHJhbnNmb3JtZXIgUGFkIDMwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVVMgVHJhbnNmb3JtZXIgVEYzMDBUJzogWydBc3VzJywgJ1RyYW5zZm9ybWVyIFBhZCAzMDAnLCAndGFibGV0J10sXG4gICAgICAgICdBU1VTIFRyYW5zZm9ybWVyIFBhZCBURjMwMFQnOiBbJ0FzdXMnLCAnVHJhbnNmb3JtZXIgUGFkIDMwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVVMgVHJhbnNmb3JtZXIgUGFkIFRGMzAwVEcnOiBbJ0FzdXMnLCAnVHJhbnNmb3JtZXIgUGFkIDMwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FTVVMgVHJhbnNmb3JtZXIgUGFkIFRGNzAwVCc6IFsnQXN1cycsICdUcmFuc2Zvcm1lciBQYWQgSW5maW5pdHkgNzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVNVUyBUcmFuc2Zvcm1lciBQYWQgVEY3MDBLJzogWydBc3VzJywgJ1RyYW5zZm9ybWVyIFBhZCBJbmZpbml0eSA3MDAnLCAndGFibGV0J10sXG4gICAgICAgICdBU1VTIFRyYW5zZm9ybWVyIFRGNzAwSyc6IFsnQXN1cycsICdUcmFuc2Zvcm1lciBQYWQgSW5maW5pdHkgNzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnUGFkRm9uZSc6IFsnQXN1cycsICdQYWRmb25lJywgJ3RhYmxldCddLFxuICAgICAgICAnT01TIFRURCc6IFsnQXN1cycsICdFZWUgUGMgVDEwJ10sXG4gICAgICAgICdBU1VTIFQyMCc6IFsnQXN1cycsICdFZWUgUGMgVDIwJ10sXG4gICAgICAgICdFVEJXMTFBQSc6IFsnQXN1cycsICdUb3VnaCddLFxuICAgICAgICAnQVVYIFY5MDAnOiBbJ0FVWCcsICdWOTAwJ10sXG4gICAgICAgICdNOTEwQSc6IFsnQVVYJywgJ005MTAnXSxcbiAgICAgICAgJ1BJQ09wYWQtUUdOJzogWydBeGlvbycsICdQaWNvcGFkIFFHTicsICd0YWJsZXQnXSxcbiAgICAgICAgJ05PT0snOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0snLCAnZXJlYWRlciddLFxuICAgICAgICAnTm9va0NvbG9yJzogWydCYXJuZXMgJiBOb2JsZScsICdOT09LIENvbG9yJywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05PT0sgQk5SVjIwMCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBDb2xvcicsICdlcmVhZGVyJ10sXG4gICAgICAgICdOT09LIEJOUlYzMDAnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgQ29sb3InLCAnZXJlYWRlciddLFxuICAgICAgICAnTm9va1RhYmxldCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnTm9vayBUYWJsZXQnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgVGFibGV0JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05PT0sgQk5UVjI1MCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnTk9PSyBCTlRWMjUwQSc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnQk5UVjI1MCc6IFsnQmFybmVzICYgTm9ibGUnLCAnTk9PSyBUYWJsZXQnLCAnZXJlYWRlciddLFxuICAgICAgICAnQk5UVjI1MEEnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgVGFibGV0JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05PT0sgU2xhdGUnOiBbJ0Jhcm5lcyAmIE5vYmxlJywgJ05PT0sgVGFibGV0JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ0JlbldlZSA1MTAwJzogWydCZW5XZWUnLCAnNTEwMCddLFxuICAgICAgICAnQ0E5MDdBQUMwRyc6IFsnQmVzdGEnLCAnQ0E5MDdBQUMwRyddLFxuICAgICAgICAnQk05OTknOiBbJ0Jtb3JuJywgJ0JNOTk5JywgJ3RhYmxldCddLFxuICAgICAgICAnVjExJzogWydCbW9ybicsICdWMTEnLCAndGFibGV0J10sXG4gICAgICAgICdWOTknOiBbJ0Jtb3JuJywgJ1Y5OScsICd0YWJsZXQnXSxcbiAgICAgICAgJ2JxIERhVmluY2knOiBbJ2JxJywgJ0RhVmluY2knLCAndGFibGV0J10sXG4gICAgICAgICdDVDcwNCc6IFsnQ2FycmVmb3VyJywgJ0NUNzA0JywgJ3RhYmxldCddLFxuICAgICAgICAnQ1QxMDAyJzogWydDYXJyZWZvdXInLCAnQ1QxMDAyJywgJ3RhYmxldCddLFxuICAgICAgICAnQ2FtYW5naS1NYW5ncm92ZTcnOiBbJ0NhbWFuZ2knLCAnTWFuZ3JvdmUgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1dTMTcxJzogWydDYW1hbmdpJywgJ1dlYlN0YXRpb24nLCAndGFibGV0J10sXG4gICAgICAgICdJUzExQ0EnOiBbJ0Nhc2lvJywgJ0d6T25lIElTMTFDQSddLFxuICAgICAgICAnQzc3MSc6IFsnQ2FzaW8nLCAnR3pPbmUgQ29tbWFuZG8nXSxcbiAgICAgICAgJ0NBVCBOT1ZBJzogWydDYXQnLCAnTk9WQScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FSTU0zVic6IFsnY2hpbmFsZWFwJywgJ0FSTU0zVicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NJVVMtNyc6IFsnQ2lzY28nLCAnQ2l1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NJVVMtNy1BVCc6IFsnQ2lzY28nLCAnQ2l1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NTTCBTcGljZSBNSTMwMCc6IFsnQ1NMJywgJ1NwaWNlIE1JMzAwJ10sXG4gICAgICAgICdDU0wtTUk0MTAnOiBbJ0NTTCcsICdTcGljZSBNSTQxMCddLFxuICAgICAgICAnTUlEMTAyNCc6IFsnQ29ieScsICdLeXJvcyBNSUQxMDI0JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlEMTEyNSc6IFsnQ29ieScsICdLeXJvcyBNSUQxMTI1JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlEMTEyNic6IFsnQ29ieScsICdLeXJvcyBNSUQxMTI2JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxMCc6IFsnQ29ieScsICdLeXJvcyBNSUQ3MDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxMic6IFsnQ29ieScsICdLeXJvcyBNSUQ3MDEyJywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxNSc6IFsnQ29ieScsICdLeXJvcyBNSUQ3MDE1JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlENzAxNUEnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAxNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMTYnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAxNicsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjAnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjInOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjQnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyNCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcwMjUnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzAyNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDcxMjcnOiBbJ0NvYnknLCAnS3lyb3MgTUlENzEyNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDgwMjQnOiBbJ0NvYnknLCAnS3lyb3MgTUlEODAyNCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDgxMjUnOiBbJ0NvYnknLCAnS3lyb3MgTUlEODEyNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRDgxMjcnOiBbJ0NvYnknLCAnS3lyb3MgTUlEODEyNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1o3MSc6IFsnQ29tbXRpdmEnLCAnWjcxJ10sXG4gICAgICAgICdWLVQxMDAnOiBbJ0NvbW10aXZhJywgJ1YtVDEwMCddLFxuICAgICAgICAnRklILUZCMCc6IFsnQ29tbXRpdmEnLCAnSEQ3MDAnXSxcbiAgICAgICAgJ0Nvb2xwYWQgRDUxMCc6IFsnQ29vbHBhZCcsICdENTEwJ10sXG4gICAgICAgICdDb29scGFkIDgwMjAnOiBbJ0Nvb2xwYWQnLCAnODAyMCddLFxuICAgICAgICAnRDUzMCc6IFsnQ29vbHBhZCcsICdENTMwJ10sXG4gICAgICAgICdDb29scGFkIEQ1MzAnOiBbJ0Nvb2xwYWQnLCAnRDUzMCddLFxuICAgICAgICAnRDUzOSc6IFsnQ29vbHBhZCcsICdENTM5J10sXG4gICAgICAgICdDb29scGFkIEQ1MzknOiBbJ0Nvb2xwYWQnLCAnRDUzOSddLFxuICAgICAgICAnRTIzOSc6IFsnQ29vbHBhZCcsICdFMjM5J10sXG4gICAgICAgICdDb29scGFkIEUyMzknOiBbJ0Nvb2xwYWQnLCAnRTIzOSddLFxuICAgICAgICAnQ29vbHBhZCBOOTMwJzogWydDb29scGFkJywgJ045MzAnXSxcbiAgICAgICAgJ045MzAnOiBbJ0Nvb2xwYWQnLCAnTjkzMCddLFxuICAgICAgICAnQ29vbHBhZCBXNzA2JzogWydDb29scGFkJywgJ1c3MDYnXSxcbiAgICAgICAgJ0Nvb2xwYWQgVzcwNisnOiBbJ0Nvb2xwYWQnLCAnVzcwNiddLFxuICAgICAgICAnQ29vbHBhZCBXNzA4JzogWydDb29scGFkJywgJ1c3MDgnXSxcbiAgICAgICAgJ1c3MTEnOiBbJ0Nvb2xwYWQnLCAnVzcxMSddLFxuICAgICAgICAnQ29vbHBhZCA1MDEwJzogWydDb29scGFkJywgJzUwMTAnXSxcbiAgICAgICAgJ0Nvb2xwYWQgNTIxMCc6IFsnQ29vbHBhZCcsICc1MjEwJ10sXG4gICAgICAgICdDb29scGFkIDU4MjAnOiBbJ0Nvb2xwYWQnLCAnNTgyMCddLFxuICAgICAgICAnNTgzMic6IFsnQ29vbHBhZCcsICc1ODMyJ10sXG4gICAgICAgICdDb29scGFkIDU4MzInOiBbJ0Nvb2xwYWQnLCAnNTgzMiddLFxuICAgICAgICAnNTg1NSc6IFsnQ29vbHBhZCcsICc1ODU1J10sXG4gICAgICAgICdDb29scGFkIDU4NjAnOiBbJ0Nvb2xwYWQnLCAnNTg2MCddLFxuICAgICAgICAnQ29vbHBhZCA1ODYwKyc6IFsnQ29vbHBhZCcsICc1ODYwJ10sXG4gICAgICAgICdDb29scGFkIDU4NjBzJzogWydDb29scGFkJywgJzU4NjAnXSxcbiAgICAgICAgJzU4NjAnOiBbJ0Nvb2xwYWQnLCAnNTg2MCddLFxuICAgICAgICAnNTg2MEEnOiBbJ0Nvb2xwYWQnLCAnNTg2MCddLFxuICAgICAgICAnQ29vbHBhZCA1ODcwJzogWydDb29scGFkJywgJzU4NzAnXSxcbiAgICAgICAgJzU4NzAnOiBbJ0Nvb2xwYWQnLCAnNTg3MCddLFxuICAgICAgICAnQ29vbHBhZCA3MDA1JzogWydDb29scGFkJywgJzcwMDUnXSxcbiAgICAgICAgJzcyNjAnOiBbJ0Nvb2xwYWQnLCAnNzI2MCddLFxuICAgICAgICAnQ29vbHBhZCA3MDE5JzogWydDb29scGFkJywgJzcwMTknXSxcbiAgICAgICAgJ0Nvb2xwYWQgNzI2MCc6IFsnQ29vbHBhZCcsICc3MjYwJ10sXG4gICAgICAgICdDb29scGFkIDgwMTMnOiBbJ0Nvb2xwYWQnLCAnODAxMyddLFxuICAgICAgICAnQ29vbHBhZCA4ODA5JzogWydDb29scGFkJywgJzg4MDknXSxcbiAgICAgICAgJ0Nvb2xwYWQgODgxMCc6IFsnQ29vbHBhZCcsICc4ODEwJ10sXG4gICAgICAgICc4ODEwJzogWydDb29scGFkJywgJzg4MTAnXSxcbiAgICAgICAgJzgxNTAnOiBbJ0Nvb2xwYWQnLCAnODE1MCddLFxuICAgICAgICAnQ29vbHBhZCA4MTUwRCc6IFsnQ29vbHBhZCcsICc4MTUwJ10sXG5cbiAgICAgICAgJ0Nvb2xwYWQgODgxMSc6IFsnQ29vbHBhZCcsICc4ODExJ10sXG4gICAgICAgICdDb29scGFkIDk5MDAnOiBbJ0Nvb2xwYWQnLCAnOTkwMCddLFxuICAgICAgICAnQ29vbHBhZCA4MDUwJzogWydDb29scGFkJywgJzgwNTAnXSxcbiAgICAgICAgJ1ppaU83JzogWydDcmVhdGl2ZScsICdaaWlPIDcnLCAndGFibGV0J10sXG4gICAgICAgICdaaWlMQUJTIFppaU83JzogWydDcmVhdGl2ZScsICdaaWlPIDcnLCAndGFibGV0J10sXG4gICAgICAgICdaaWlMQUJTIFppaU8xMCAnOiBbJ0NyZWF0aXZlJywgJ1ppaU8gMTAnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIEs4R1QgQSc6IFsnQ3ViZScsICdLOEdUIEEnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIEs4R1QgQic6IFsnQ3ViZScsICdLOEdUIEInLCAndGFibGV0J10sXG4gICAgICAgICdLOEdUIEMnOiBbJ0N1YmUnLCAnSzhHVCBDJywgJ3RhYmxldCddLFxuICAgICAgICAnSzhHVCBIJzogWydDdWJlJywgJ0s4R1QgSCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NVQkUgSzhHVCBIJzogWydDdWJlJywgJ0s4R1QgSCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0s4R1QgVyc6IFsnQ3ViZScsICdLOEdUIFcnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIFU4R1QnOiBbJ0N1YmUnLCAnVThHVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NVQkUgVTlHVCc6IFsnQ3ViZScsICdVOUdUJywgJ3RhYmxldCddLFxuICAgICAgICAnQ1VCRSBVOUdUIDInOiBbJ0N1YmUnLCAnVTlHVCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnQ3ViZSBVOUdUMic6IFsnQ3ViZScsICdVOUdUIDInLCAndGFibGV0J10sXG4gICAgICAgICdVOUdUJzogWydDdWJlJywgJ1U5R1QnLCAndGFibGV0J10sXG4gICAgICAgICdVOUdUMiBGcm9tIG1vYWdlLmNvbSc6IFsnQ3ViZScsICdVOUdUIDInLCAndGFibGV0J10sXG4gICAgICAgICdOOTAgRnJvbSBtb2FnZS5jb20nOiBbJ0N1YmUnLCAnVTlHVCAyJywgJ3RhYmxldCddLFxuICAgICAgICAnVTlHVCBTJzogWydDdWJlJywgJ1U5R1QgUycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1U5R1QgUyBBJzogWydDdWJlJywgJ1U5R1QgU0EnLCAndGFibGV0J10sXG4gICAgICAgICdVOUdUUyBBJzogWydDdWJlJywgJ1U5R1QgU0EnLCAndGFibGV0J10sXG4gICAgICAgICdVMTBHVCAyJzogWydDdWJlJywgJ1UxMEdUIDInLCAndGFibGV0J10sXG4gICAgICAgICdVMTBHVCBTJzogWydDdWJlJywgJ1UxMEdUIFMnLCAndGFibGV0J10sXG4gICAgICAgICdVMzBHVC1IJzogWydDdWJlJywgJ1UzMEdUIEgnLCAndGFibGV0J10sXG4gICAgICAgICdDVUJFIFE3UFJPJzogWydDdWJlJywgJ1E3IFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0NVQkUgUTdQUk8gSic6IFsnQ3ViZScsICdRNyBQcm8nLCAndGFibGV0J10sXG4gICAgICAgICdDeWRsZSBNNyAodjAwMDUuMDQuMDMuMTIua28pJzogWydDeWRsZScsICdNNyBNdWx0aVBBRCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgQWVybyc6IFsnRGVsbCcsICdBZXJvJ10sXG4gICAgICAgICdEZWxsIE0wMU0nOiBbJ0RlbGwnLCAnTWluaSA1JywgJ3RhYmxldCddLFxuICAgICAgICAnRGVsbCBTdHJlYWsnOiBbJ0RlbGwnLCAnU3RyZWFrJywgJ3RhYmxldCddLFxuICAgICAgICAnMDAxREwnOiBbJ0RlbGwnLCAnU3RyZWFrJywgJ3RhYmxldCddLFxuICAgICAgICAnMTAxREwnOiBbJ0RlbGwnLCAnU3RyZWFrIFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dTMDEnOiBbJ0RlbGwnLCAnU3RyZWFrIFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgU3RyZWFrIFBybyc6IFsnRGVsbCcsICdTdHJlYWsgUHJvJywgJ3RhYmxldCddLFxuICAgICAgICAnc3RyZWFrNyc6IFsnRGVsbCcsICdTdHJlYWsgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgU3RyZWFrIDcnOiBbJ0RlbGwnLCAnU3RyZWFrIDcnLCAndGFibGV0J10sXG4gICAgICAgICdEZWxsIFN0cmVhayAxMCBQcm8nOiBbJ0RlbGwnLCAnU3RyZWFrIDEwIFBybycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgVjA0Qic6IFsnRGVsbCcsICdTdHJlYWsgVjA0QicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RlbGwgVmVudWUnOiBbJ0RlbGwnLCAnVmVudWUnXSxcbiAgICAgICAgJ0RlbGwgWENEMzUnOiBbJ0RlbGwnLCAnWENEMzUnXSxcbiAgICAgICAgJ1hDRDM1JzogWydEZWxsJywgJ1hDRDM1J10sXG4gICAgICAgICdpRHg3JzogWydEaWdtYScsICdpRHg3JywgJ3RhYmxldCddLFxuICAgICAgICAnaUR4MTAnOiBbJ0RpZ21hJywgJ2lEeDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnaUR4MTAgM0cnOiBbJ0RpZ21hJywgJ2lEeDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnRE0wMDlTSCc6IFsnRGlzbmV5IE1vYmlsZScsICdETTAwOVNIJ10sXG4gICAgICAgICdETTAxMFNIJzogWydEaXNuZXkgTW9iaWxlJywgJ0RNMDEwU0gnXSxcbiAgICAgICAgJ0RNMDEyU0gnOiBbJ0Rpc25leSBNb2JpbGUnLCAnRE0wMTJTSCddLFxuICAgICAgICAnRi0wOEQnOiBbJ0Rpc25leSBNb2JpbGUnLCAnRi0wOEQnXSxcbiAgICAgICAgJ1AtMDVEJzogWydEaXNuZXkgTW9iaWxlJywgJ1AtMDVEJ10sXG4gICAgICAgICdUYWJsZXQtUDI3JzogWydEcmFjb1RlaycsICdQMjcgVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnZWRnZWpyJzogWydFblRvdXJhZ2UnLCAnUG9ja2V0IGVER2UnLCAndGFibGV0J10sXG4gICAgICAgICdsOTdEJzogWydFUGFkJywgJ2w5N0QnLCAndGFibGV0J10sXG4gICAgICAgICdNNDMwMSc6IFsnRXN0b24nLCAnTUlEIE00MzAxJywgJ21lZGlhJ10sXG4gICAgICAgICdQMTBBTic6IFsnRXhwZXInLCAnRWFzeXBhZCBQMTBBTicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0ZJSC1GMFgnOiBbJ0ZJSCcsICdGMFgnXSxcbiAgICAgICAgJ0ZseSBJUTI2MCc6IFsnRmx5JywgJ0lRMjYwIEJsYWNrQmlyZCddLFxuICAgICAgICAnSVNXMTFGJzogWydGdWppdHN1JywgJ0Fycm93cyBaJ10sXG4gICAgICAgICdJU1cxM0YnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFonXSxcbiAgICAgICAgJ0lTMTJGJzogWydGdWppdHN1JywgJ0Fycm93cyBFUyddLFxuICAgICAgICAnRi0wMUQnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFRhYiBMVEUnLCAndGFibGV0J10sXG4gICAgICAgICdGLTAzRCc6IFsnRnVqaXRzdScsICdBcnJvd3MgS2lzcyddLFxuICAgICAgICAnRi0wNUQnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFggTFRFJ10sXG4gICAgICAgICdGLTA3RCc6IFsnRnVqaXRzdScsICdBcnJvd3MgXFx1MDBjM1xcdWZmZmRcXHUwMGMyXFx1MDBiYyddLFxuICAgICAgICAnRi0xMEQnOiBbJ0Z1aml0c3UnLCAnQXJyb3dzIFggRi0xMEQnXSxcbiAgICAgICAgJ0YtMTJDJzogWydGdWppdHN1JywgJ0dsb2JldHJvdHRlciddLFxuICAgICAgICAnZjEyYXJjJzogWydGdWppdHN1JywgJ0YxMmFyYyddLFxuICAgICAgICAnTTUzMic6IFsnRnVqaXRzdScsICdTdHlsaXN0aWMgTTUzMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dhcm1pbmZvbmUnOiBbJ0dhcm1pbi1Bc3VzJywgJ0dhcm1pbmZvbmUnXSxcbiAgICAgICAgJ0dhcm1pbi1Bc3VzIEExMCc6IFsnR2FybWluLUFzdXMnLCAnTnV2aWZvbmUgQTEwJ10sXG4gICAgICAgICdHYXJtaW4tQXN1cyBBNTAnOiBbJ0dhcm1pbi1Bc3VzJywgJ051dmlmb25lIEE1MCddLFxuICAgICAgICAnVFBBNjBXJzogWydHYXRld2F5JywgJ1RQQTYwVycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dlZWtzcGhvbmUgWkVSTyc6IFsnR2Vla3NwaG9uZScsICdaRVJPJ10sXG4gICAgICAgICdnZW1laSBHMic6IFsnR2VtZWknLCAnRzInLCAndGFibGV0J10sXG4gICAgICAgICdHZW1laSBHMic6IFsnR2VtZWknLCAnRzInLCAndGFibGV0J10sXG4gICAgICAgICdnZW1laSBHMyc6IFsnR2VtZWknLCAnRzMnLCAndGFibGV0J10sXG4gICAgICAgICdHZW1laSBHOSc6IFsnR2VtZWknLCAnRzknLCAndGFibGV0J10sXG4gICAgICAgICdHU21hcnQgRzEzMTdEJzogWydHaWdhYnl0ZScsICdHU21hcnQgRzEzMTdEJ10sXG4gICAgICAgICdHaWdhYnl0ZSBUQjEwMCc6IFsnR2lnYWJ5dGUnLCAnVEIxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdHTjEwMCc6IFsnR2lvbmVlJywgJ0dOMTAwJ10sXG4gICAgICAgICdHTjEwNSc6IFsnR2lvbmVlJywgJ0dOMTA1J10sXG4gICAgICAgICdHTjEwNic6IFsnR2lvbmVlJywgJ0dOMTA2J10sXG4gICAgICAgICdHTjIwMCc6IFsnR2lvbmVlJywgJ0dOMjAwJ10sXG4gICAgICAgICdHTjIwNSc6IFsnR2lvbmVlJywgJ0dOMjA1J10sXG4gICAgICAgICdHTjcwMFcnOiBbJ0dpb25lZScsICdHTjcwMFcnXSxcbiAgICAgICAgJ0dONzA4Vyc6IFsnR2lvbmVlJywgJ0dONzA4VyddLFxuICAgICAgICAnR29vZ2xlIElvbic6IFsnR29vZ2xlJywgJ0lvbiddLFxuICAgICAgICAnTmV4dXMgT25lJzogWydHb29nbGUnLCAnTmV4dXMgT25lJ10sXG4gICAgICAgICdOZXh1c09uZSc6IFsnR29vZ2xlJywgJ05leHVzIE9uZSddLFxuICAgICAgICAnSFRDIE5leHVzIE9uZSc6IFsnR29vZ2xlJywgJ05leHVzIE9uZSddLFxuICAgICAgICAnTmV4dXMgUyc6IFsnR29vZ2xlJywgJ05leHVzIFMnXSxcbiAgICAgICAgJ0dvb2dsZSBOZXh1cyBTJzogWydHb29nbGUnLCAnTmV4dXMgUyddLFxuICAgICAgICAnTmV4dXMgUyA0Ryc6IFsnR29vZ2xlJywgJ05leHVzIFMgNEcnXSxcbiAgICAgICAgJ0Rvb2RlcmJ1dHQtNC4wLjMtdjEnOiBbJ0dvb2dsZScsICdOZXh1cyBTIDRHJ10sXG4gICAgICAgICdOZXh1cyA3JzogWydHb29nbGUnLCAnTmV4dXMgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hhaWVyIEhXLVc5MTAnOiBbJ0hhaWVyJywgJ0hXLVc5MTAnXSxcbiAgICAgICAgJ1NOMTBUMSc6IFsnSEFOTnNwcmVlJywgJ0hBTk5TcGFkIFNOMTBUMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NOMTBUMic6IFsnSEFOTnNwcmVlJywgJ0hBTk5TcGFkIFNOMTBUMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hhbm5zQ29tYic6IFsnSEFOTnNwcmVlJywgJ0hBTk5TcGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnWDEnOiBbJ0hDTCcsICdNRSBYMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01JRCBTZXJhaWxzJzogWydIZXJvdGFiJywgJ0M4JywgJ3RhYmxldCddLFxuICAgICAgICAnTUlEIFNlcmlhbHMnOiBbJ0hlcm90YWInLCAnQzgnLCAndGFibGV0J10sXG4gICAgICAgICdDT1NNTyBEVU8nOiBbJ0hpc2NyZWVuJywgJ0Nvc21vIERVTycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hTLVU4JzogWydIaXNlbnNlJywgJ1U4J10sXG4gICAgICAgICdIUy1UOTInOiBbJ0hpc2Vuc2UnLCAnVDkyJ10sXG4gICAgICAgICdIUy1FODYwJzogWydIaXNlbnNlJywgJ0U4NjAnXSxcbiAgICAgICAgJ0hTLUU5MTAnOiBbJ0hpc2Vuc2UnLCAnRTkxMCddLFxuICAgICAgICAnSFMtRTkyNic6IFsnSGlzZW5zZScsICdFOTI2J10sXG5cbiAgICAgICAgJ0hTLUVHOTAwJzogWydIaXNlbnNlJywgJ0VHOTAwJ10sXG4gICAgICAgICdIUy1FVDkxOSc6IFsnSGlzZW5zZScsICdFVDkxOSddLFxuICAgICAgICAnRUc5NjhCJzogWydIaXNlbnNlJywgJ0VHOTY4QiddLFxuICAgICAgICAnSEtQSE9ORSBIOC0zRyc6IFsnSEtQaG9uZScsICdIOCAzRyddLFxuICAgICAgICAnSE9TSU4gVTInOiBbJ0hvc2luJywgJ1UyJ10sXG4gICAgICAgICdUb3VjaHBhZCc6IFsnSFAnLCAnVG91Y2hQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdIUCBUb3VjaHBhZCc6IFsnSFAnLCAnVG91Y2hQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdjbSB0ZW5kZXJsb2luJzogWydIUCcsICdUb3VjaFBhZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ2Fva3AgdGVuZGVybG9pbic6IFsnSFAnLCAnVG91Y2hQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdIVEMgQW1hemUgNEcnOiBbJ0hUQycsICdBbWF6ZSA0RyddLFxuICAgICAgICAnSFRDIFJ1YnknOiBbJ0hUQycsICdBbWF6ZSA0RyddLFxuICAgICAgICAnSFRDIEFtYXplIDRHKFJ1YnkpJzogWydIVEMnLCAnQW1hemUgNEcnXSxcbiAgICAgICAgJ0FtYXplIDRHJzogWydIVEMnLCAnQW1hemUgNEcnXSxcbiAgICAgICAgJ0hUQyBBcmlhJzogWydIVEMnLCAnQXJpYSddLFxuICAgICAgICAnSFRDIEFyaWEgQTYzODAnOiBbJ0hUQycsICdBcmlhJ10sXG4gICAgICAgICdIVEMgTGliZXJ0eSBBNjM4MCc6IFsnSFRDJywgJ0FyaWEnXSxcbiAgICAgICAgJ0hUQyBMaWJlcnR5JzogWydIVEMnLCAnQXJpYSddLFxuICAgICAgICAnSFRDIEE2MzY2JzogWydIVEMnLCAnQXJpYSddLFxuICAgICAgICAnSFRDIEJlZSc6IFsnSFRDJywgJ0JlZSddLFxuICAgICAgICAnSFRDIENoYUNoYSc6IFsnSFRDJywgJ0NoYUNoYSddLFxuICAgICAgICAnSFRDIENoYUNoYSBBODEwZSc6IFsnSFRDJywgJ0NoYUNoYSddLFxuICAgICAgICAnSFRDIENoYUNoYUNoYSBBODEwZSc6IFsnSFRDJywgJ0NoYUNoYSddLFxuICAgICAgICAnSFRDIEE4MTBlJzogWydIVEMnLCAnQ2hhQ2hhJ10sXG4gICAgICAgICdIVEMgQTkxODgnOiBbJ0hUQycsICdUaWFueGknXSxcbiAgICAgICAgJ0hUQyBCcmF2byc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBBODE4MSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBBODE4Myc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBCZWF0cyBBODE4MSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBDRE1BJzogWydIVEMnLCAnRGVzaXJlJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFNNUyc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBTLk0uUyc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnSFRDIERlc2lyZSBDJzogWydIVEMnLCAnRGVzaXJlIEMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmVIRCc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnSFRDIERlc2lyZUhEIEE5MTkxJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdIVEMgRGVzaXJlSEQgQTkxOTInOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgSEQgQTkxOTEnOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBBOTE5MSc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnSFRDIEE5MTkxIGZvciBBVCZUJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdIVEMgQTkxOTInOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgSEQnOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgSEQgd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnSFRDIERlc2lyZSBTJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmVTJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmVzUyc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlUyBTNTEwZSc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlUyBTNTEwYic6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFMgUzUxMGUnOiBbJ0hUQycsICdEZXNpcmUgUyddLFxuICAgICAgICAnSFRDIFM1MTBlJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgU2FnYSc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFYnOiBbJ0hUQycsICdEZXNpcmUgViddLFxuICAgICAgICAnSFRDIFQzMjh3JzogWydIVEMnLCAnRGVzaXJlIFYnXSxcbiAgICAgICAgJ0hUQyBEZXNpcmUgVkMnOiBbJ0hUQycsICdEZXNpcmUgVkMnXSxcbiAgICAgICAgJ0hUQyBUMzI4ZCc6IFsnSFRDJywgJ0Rlc2lyZSBWQyddLFxuICAgICAgICAnSFRDIFQzMjh0JzogWydIVEMnLCAnRGVzaXJlIFZUJ10sXG4gICAgICAgICdIVEMgRGVzaXJlIFonOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIERlc2lyZVonOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIERlc2lyZVogQTcyNzInOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIERlc2lyZSBaIEE3MjcyJzogWydIVEMnLCAnRGVzaXJlIFonXSxcbiAgICAgICAgJ0hUQyBWaXNpb24nOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnSFRDIEE3Mjc1JzogWydIVEMnLCAnRGVzaXJlIFonXSxcbiAgICAgICAgJ0hUQyBEcmVhbSc6IFsnSFRDJywgJ0RyZWFtJ10sXG4gICAgICAgICdIVEMgUzcxMGQnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0hUQyBJbmNyZWRpYmxlIDInOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0hUQyBYNTE1ZCc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIFg1MTVtJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgWDUxNUMnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFdm8gM0QnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFVk8gM0QnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFVk8gM0QgR1NNJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgRVZPIDNEIFg1MTVhJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgRVZPIDNEIEdTTSBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEVWTyAzRCBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEVWTyAzRCBYNTE1TSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEVWTzNEIFg1MTVhJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdIVEMgRVZPM0QgWDUxNW0nOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFdm8gM0QgWDUxNW0nOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0hUQyBFdm8gM0Qgd2l0aCBCZWF0cyBBdWRpbyBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnSFRDIEV2byA0Ryc6IFsnSFRDJywgJ0VWTyA0RyddLFxuICAgICAgICAnSFRDIEVWTyA0Ryc6IFsnSFRDJywgJ0VWTyA0RyddLFxuICAgICAgICAnSFRDIFg1MTVFJzogWydIVEMnLCAnRVZPIDRHKyddLFxuICAgICAgICAnSFRDIEVWTyA0RysgRm9yIFNwcmludCc6IFsnSFRDJywgJ0VWTyA0RysnXSxcbiAgICAgICAgJ0hUQyBFVk8gNEcrKyBGb3IgU3ByaW50JzogWydIVEMnLCAnRVZPIDRHKyddLFxuICAgICAgICAnSFRDIEM3MTVjJzogWydIVEMnLCAnRVZPIERlc2lnbiA0RyddLFxuICAgICAgICAnSFRDIERlc2lnbiA0Ryc6IFsnSFRDJywgJ0VWTyBEZXNpZ24gNEcnXSxcbiAgICAgICAgJ0hUQyBFVk8gZGVzaWduIDRHJzogWydIVEMnLCAnRVZPIERlc2lnbiA0RyddLFxuICAgICAgICAnSFRDIEVWTyBEZXNpZ24gNEcnOiBbJ0hUQycsICdFVk8gRGVzaWduIDRHJ10sXG4gICAgICAgICdIVEMgRXZvIFNoaWZ0JzogWydIVEMnLCAnRVZPIFNoaWZ0J10sXG4gICAgICAgICdIVEMgRVZPIFNoaWZ0IDRHJzogWydIVEMnLCAnRVZPIFNoaWZ0J10sXG4gICAgICAgICdIVEMgQTMxMGUnOiBbJ0hUQycsICdFeHBsb3JlciddLFxuICAgICAgICAnSFRDIEV4cGxvcmVyJzogWydIVEMnLCAnRXhwbG9yZXInXSxcbiAgICAgICAgJ0hUQyBFeHBsb3JlciBBMzEwYic6IFsnSFRDJywgJ0V4cGxvcmVyJ10sXG4gICAgICAgICdIVEMgRXhwbG9yZXIgQTMxMGUnOiBbJ0hUQycsICdFeHBsb3JlciddLFxuICAgICAgICAnSFRDIFA1MTBlJzogWydIVEMnLCAnRmx5ZXInLCAndGFibGV0J10sXG4gICAgICAgICdIVEMgRmx5ZXInOiBbJ0hUQycsICdGbHllcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBGbHllciBQNTEwZSc6IFsnSFRDJywgJ0ZseWVyJywgJ3RhYmxldCddLFxuICAgICAgICAnSFRDIEZseWVyIFA1MTInOiBbJ0hUQycsICdGbHllcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBGbHllciBQNTEyIE5BJzogWydIVEMnLCAnRmx5ZXInLCAndGFibGV0J10sXG4gICAgICAgICdIVEMgUDUxNUUnOiBbJ0hUQycsICdGbHllciA0RycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBHcmF0aWEgQTYzODAnOiBbJ0hUQycsICdHcmF0aWEnXSxcbiAgICAgICAgJ0hUQyBIRCc6IFsnSFRDJywgJ0hEJ10sXG4gICAgICAgICdIVEMgSEQyJzogWydIVEMnLCAnSEQyJ10sXG4gICAgICAgICdIVEMgSEQyIFQ4NTg1JzogWydIVEMnLCAnSEQyJ10sXG4gICAgICAgICdIVEMgSEQyKExlbyknOiBbJ0hUQycsICdIRDInXSxcbiAgICAgICAgJ0hUQyBIRDcnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBUOTI5OSsnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBIRDcgZm9yIFNwcmludCc6IFsnSFRDJywgJ0hENyddLFxuICAgICAgICAnSFRDIEhENyA0RyBUOTI5OSBGb3IgQVQmVCc6IFsnSFRDJywgJ0hENyddLFxuICAgICAgICAnSFRDIEhENyA0RyBUOTI5OSsgRm9yIEFUJlQnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBUOTI5OSsgRm9yIEFUJlQnOiBbJ0hUQycsICdIRDcnXSxcbiAgICAgICAgJ0hUQyBIRDdTIFQ5Mzk5Kyc6IFsnSFRDJywgJ0hEN3MnXSxcbiAgICAgICAgJ0hUQyBIRDdTIFQ5ODk5Kyc6IFsnSFRDJywgJ0hEN3MnXSxcbiAgICAgICAgJ0hUQyBUOTg5OSsgRm9yIEFUJlQnOiBbJ0hUQycsICdIRDdzJ10sXG4gICAgICAgICdWaXRNb2QgRXh0cmFMaXRlIDEuNi41LmZ1bGxvZGV4IGZvciBIVEMgSEQ3IFBybyc6IFsnSFRDJywgJ0hENyBQcm8nXSxcbiAgICAgICAgJ0hUQyBIZXJvJzogWydIVEMnLCAnSGVybyddLFxuICAgICAgICAnSFRDIEhFUk8nOiBbJ0hUQycsICdIZXJvJ10sXG4gICAgICAgICdIVEMgSGVybyBDRE1BJzogWydIVEMnLCAnSGVybyddLFxuICAgICAgICAnSFRDIEhFUk8gQ0RNQSc6IFsnSFRDJywgJ0hlcm8nXSxcbiAgICAgICAgJ0hUQyBIRVJPMjAwJzogWydIVEMnLCAnSGVybyAyMDAnXSxcbiAgICAgICAgJ0hUQyBIZXJvIFMnOiBbJ0hUQycsICdIZXJvIFMnXSxcbiAgICAgICAgJ0hUQyBJTUFHSU8nOiBbJ0hUQycsICdJbWFnaW8nXSxcbiAgICAgICAgJ0hUQyBJbmNyZWRpYmxlJzogWydIVEMnLCAnSW5jcmVkaWJsZSddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUzcxMEUnOiBbJ0hUQycsICdJbmNyZWRpYmxlIFMnXSxcbiAgICAgICAgJ0hUQyBTNzEwZSc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUyc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUyBTNzEwZSc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGUgUyBzNzEwZSc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSFRDIEluY3JlZGlibGVTIFM3MTBlJzogWydIVEMnLCAnSW5jcmVkaWJsZSBTJ10sXG4gICAgICAgICdIVEMgSW5jcmVkaWJsZSBTIHdpdGggQmVhdHMgQXVkaW8nOiBbJ0hUQycsICdJbmNyZWRpYmxlIFMnXSxcbiAgICAgICAgJ0hUQyBWaXZvJzogWydIVEMnLCAnSW5jcmVkaWJsZSBTJ10sXG4gICAgICAgICdIVEMgSW5ub3ZhdGlvbic6IFsnSFRDJywgJ0lubm92YXRpb24nXSxcbiAgICAgICAgJ0hUQyBJbnNwaXJlIDRHJzogWydIVEMnLCAnSW5zcGlyZSA0RyddLFxuICAgICAgICAnSFRDIEhENyBJbnNwaXJlIDRHIEZvciBWb2RhZm9uZSc6IFsnSFRDJywgJ0luc3BpcmUgNEcnXSxcbiAgICAgICAgJ0hUQyBQNzE1YSc6IFsnSFRDJywgJ0pldHN0cmVhbScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0hUQyBMZWdlbmQnOiBbJ0hUQycsICdMZWdlbmQnXSxcbiAgICAgICAgJ0hUQyBNYWdpYyc6IFsnSFRDJywgJ01hZ2ljJ10sXG4gICAgICAgICdIVEMgU2FwcGhpcmUnOiBbJ0hUQycsICdNYWdpYyddLFxuICAgICAgICAnSFRDIExleGlrb24nOiBbJ0hUQycsICdNZXJnZSddLFxuICAgICAgICAnSFRDIE9uZSBTJzogWydIVEMnLCAnT25lIFMnXSxcbiAgICAgICAgJ0hUQyBaNTIwZSc6IFsnSFRDJywgJ09uZSBTJ10sXG4gICAgICAgICdIVEMgT25lIFYnOiBbJ0hUQycsICdPbmUgViddLFxuICAgICAgICAnSFRDIFQzMjBlJzogWydIVEMnLCAnT25lIFYnXSxcbiAgICAgICAgJ0hUQyBPbmUgWCc6IFsnSFRDJywgJ09uZSBYJ10sXG4gICAgICAgICdIVEMgUzcyMGUnOiBbJ0hUQycsICdPbmUgWCddLFxuICAgICAgICAnSFRDIEVuZGVhdm91ci1MUyc6IFsnSFRDJywgJ09uZSBYJ10sXG4gICAgICAgICdIVEMgT25lIFhMJzogWydIVEMnLCAnT25lIFhMJ10sXG4gICAgICAgICdIVEMgWDcxMGEnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXInOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXIgWDcxMGUnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXIgWDcxMHMnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBSYWlkZXIgNEcgWDcxMGUnOiBbJ0hUQycsICdSYWlkZXIgNEcnXSxcbiAgICAgICAgJ0hUQyBQSDM5MTAwJzogWydIVEMnLCAnUmFpZGVyIDRHJ10sXG4gICAgICAgICdIVEMgSG9saWRheSc6IFsnSFRDJywgJ1JhaWRlciA0RyddLFxuICAgICAgICAnSFRDIFZlbG9jaXR5IDRHIFg3MTBzJzogWydIVEMnLCAnUmFpZGVyIDRHJ10sXG4gICAgICAgICdIVEMgUmV6b3VuZCc6IFsnSFRDJywgJ1Jlem91bmQnXSxcbiAgICAgICAgJ0hUQyBSaHltZSBTNTEwYic6IFsnSFRDJywgJ1JoeW1lJ10sXG4gICAgICAgICdIVEMgUzUxMGInOiBbJ0hUQycsICdSaHltZSddLFxuICAgICAgICAnSFRDIEJsaXNzJzogWydIVEMnLCAnUmh5bWUnXSxcbiAgICAgICAgJ0hUQyBCbGlzcyBTNTEwYic6IFsnSFRDJywgJ1JoeW1lJ10sXG4gICAgICAgICdIVEMgU2Fsc2EgQzUxMGUnOiBbJ0hUQycsICdTYWxzYSddLFxuICAgICAgICAnSFRDIEM1MTBlJzogWydIVEMnLCAnU2Fsc2EnXSxcbiAgICAgICAgJ0hUQyBaNzEwYSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFo3MTBlJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgWjcxMHQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24nOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWjcxMCc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwYSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwRSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwZSBGb3IgQVQmVCc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBaNzEwZSB3aXRoIEJlYXRzIEF1ZGlvJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIHdpdGggQmVhdHMgQXVkaW8gWjcxMGUnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBUYXN0ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFB5cmFtaWQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBQeXJhbWlkIFo3MTBhJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgUHlyYW1pZCBaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiA0Ryc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiA0RyB3aXRoIEJlYXRzIEF1ZGlvJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIEcxNCc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBHMTQgZm9yIEFUJlQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ0hUQyBHMTQgc2Vuc2F0aW9uJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdIVEMgWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb25YRSBCZWF0cyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvblhFIEJlYXRzIFo3MTVhJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uWEUgQmVhdHMgWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEUgWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb25YRSBaNzE1ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBYRSBCZWF0cyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvblhFIHdpdGggQmVhdHMgQXVkaW8nOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEUgd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBYRSB3aXRoIEJlYXRzIEF1ZGlvIFo3MTVhJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIEp1cmVkcm9pZCBYRSBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiBYRSB3aXRoIEJlYXRzIEF1ZGlvIFo3MTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIFhFIFdpdGggQmVhdHMgQXVkaW8gWjcxNWUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEUnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gNEcgWEUgd2l0aCBCZWF0cyBBdWRpbyc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYRSddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvbiB3aXRoIEJlYXRzIEF1ZGlvIFo3MTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdIVEMgWDMxNUUnOiBbJ0hUQycsICdTZW5zYXRpb24gWEwnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb25YTCBCZWF0cyBYMzE1Yic6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIFNlbnNhdGlvblhMIEJlYXRzIFgzMTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhMJ10sXG4gICAgICAgICdIVEMgU2Vuc2F0aW9uIFhMIHdpdGggQmVhdHMgQXVkaW8gWDMxNWInOiBbJ0hUQycsICdTZW5zYXRpb24gWEwnXSxcbiAgICAgICAgJ0hUQyBTZW5zYXRpb24gWEwgd2l0aCBCZWF0cyBBdWRpbyBYMzE1ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIFJ1bm55bWVkZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIEcyMSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnSFRDIFBIMDYxMzAnOiBbJ0hUQycsICdTdGF0dXMnXSxcbiAgICAgICAgJ0hUQyBTdGF0dXMnOiBbJ0hUQycsICdTdGF0dXMnXSxcbiAgICAgICAgJ0hUQyBUYXR0b28nOiBbJ0hUQycsICdUYXR0b28nXSxcbiAgICAgICAgJ0hUQyBUQVRUT08gQTMyODgnOiBbJ0hUQycsICdUYXR0b28nXSxcbiAgICAgICAgJ0hUQyBjbGljayc6IFsnSFRDJywgJ1RhdHRvbyddLFxuICAgICAgICAnSFRDIFgzMTBlJzogWydIVEMnLCAnVGl0YW4nXSxcbiAgICAgICAgJ0hUQyBUNzM3Myc6IFsnSFRDJywgJ1RvdWNoIFBybyBJSSddLFxuICAgICAgICAnSFRDIFRodW5kZXJCb2x0JzogWydIVEMnLCAnVGh1bmRlckJvbHQnXSxcbiAgICAgICAgJ0hUQyBNZWNoYSc6IFsnSFRDJywgJ1RodW5kZXJCb2x0J10sXG4gICAgICAgICdIVEMgVmVsb2NpdHkgNEcnOiBbJ0hUQycsICdWZWxvY2l0eSA0RyddLFxuICAgICAgICAnSFRDIFdpbGRmaXJlJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ0hUQyBXaWxkZmlyZSBBMzMzMyc6IFsnSFRDJywgJ1dpbGRmaXJlJ10sXG4gICAgICAgICdIVEMgQTMzNjYnOiBbJ0hUQycsICdXaWxkZmlyZSddLFxuICAgICAgICAnSFRDIEEzMzgwJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ0hUQyBXaWxkZmlyZVMnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmUgUyc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0h0YyBXaWxkZmlyZSBzJzogWydIVEMnLCAnV2lsZGZpcmUgUyddLFxuICAgICAgICAnSFRDIFdpbGRmaXJlIFMgQTUxMGUnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmUgUyBBNTEwYic6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBXaWxkZmlyZVMgQTUxMGUnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmVTIEE1MTBiJzogWydIVEMnLCAnV2lsZGZpcmUgUyddLFxuICAgICAgICAnaHRjIHdpbGRmaXJlIHMgYTUxMGUnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdIVEMgV2lsZGZpcmUgUyBBNTE1Yyc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBBNTEwYSc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBBNTEwZSc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQyBBNTEwYyc6IFsnSFRDJywgJ1dpbGRmaXJlIFMnXSxcbiAgICAgICAgJ0hUQ1gwNkhUJzogWydIVEMnLCAnRGVzaXJlJ10sXG4gICAgICAgICdIVEMgQTYzOTAnOiBbJ0hUQycsICdBNjM5MCddLFxuICAgICAgICAnSFRDIEE4MTgwJzogWydIVEMnLCAnQTgxODAnXSxcbiAgICAgICAgJ0hUQyBQRzc2Mic6IFsnSFRDJywgJ1BHNzYyJ10sXG4gICAgICAgICdIVEMgUzcxNWUnOiBbJ0hUQycsICdTNzE1ZSddLFxuICAgICAgICAnSFRDIFM3MjB0JzogWydIVEMnLCAnUzcyMHQnXSxcbiAgICAgICAgJ0hUQyBaNTEwZCc6IFsnSFRDJywgJ1o1MTBkJ10sXG4gICAgICAgICdIVEMgWjU2MGUnOiBbJ0hUQycsICdaNTYwZSddLFxuICAgICAgICAnSFRDIFZMRSBVJzogWydIVEMnLCAnT25lIFMnXSxcbiAgICAgICAgJ0hUQyBWTEUjVSc6IFsnSFRDJywgJ09uZSBTJ10sXG4gICAgICAgICdIVEMgVklFIFUnOiBbJ0hUQycsICdPbmUgUyddLFxuICAgICAgICAnSFRDIEVWQSBVTCc6IFsnSFRDJywgJ09uZSBWJ10sXG4gICAgICAgICdIVEMgRU5SIFUnOiBbJ0hUQycsICdPbmUgWCddLFxuICAgICAgICAnRU5SIFUnOiBbJ0hUQycsICdPbmUgWCddLFxuICAgICAgICAnRW5kZWF2b3JVJzogWydIVEMnLCAnT25lIFgnXSxcbiAgICAgICAgJ0xpYmVydHknOiBbJ0hUQycsICdBcmlhJ10sXG4gICAgICAgICdEZXNpcmUnOiBbJ0hUQycsICdEZXNpcmUnXSxcbiAgICAgICAgJ0Rlc2lyZSBBODE4MSc6IFsnSFRDJywgJ0Rlc2lyZSddLFxuICAgICAgICAnZGVzaXJlIGhkJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdEZXNpcmUgSEQnOiBbJ0hUQycsICdEZXNpcmUgSEQnXSxcbiAgICAgICAgJ0RlZGlyZSBIRCc6IFsnSFRDJywgJ0Rlc2lyZSBIRCddLFxuICAgICAgICAnRGVzaXJlIEhkIChhY2UpJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdEZXNpcmUgUyc6IFsnSFRDJywgJ0Rlc2lyZSBTJ10sXG4gICAgICAgICdEZXNpcmVTJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0Rlc2lyZSBTYWdhJzogWydIVEMnLCAnRGVzaXJlIFMnXSxcbiAgICAgICAgJ0Rlc2lyZSBaJzogWydIVEMnLCAnRGVzaXJlIFonXSxcbiAgICAgICAgJ0RyZWFtJzogWydIVEMnLCAnRHJlYW0nXSxcbiAgICAgICAgJ0Ryb2lkIEluY3JlZGlibGUnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdFVk8nOiBbJ0hUQycsICdFVk8nXSxcbiAgICAgICAgJ0V2byBIRDInOiBbJ0hUQycsICdFVk8gSEQnXSxcbiAgICAgICAgJ0V2byAzRCBCZWF0cyBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnRXZvIDNEIEdTTSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnRVZPIDNEIFg1MTVtJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdFVk8zRCBYNTE1bSc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnRXZvIDRHJzogWydIVEMnLCAnRVZPIDRHJ10sXG4gICAgICAgICdFVk8gNEcnOiBbJ0hUQycsICdFVk8gNEcnXSxcbiAgICAgICAgJ3Bob3Rvbic6IFsnSFRDJywgJ0hEIG1pbmknXSxcbiAgICAgICAgJ0dpbkRyZWFtXFwvR2luTWFnaWMnOiBbJ0hUQycsICdEcmVhbSddLFxuICAgICAgICAnSEQyJzogWydIVEMnLCAnSEQyJ10sXG4gICAgICAgICdIRDcgIFBybyc6IFsnSFRDJywgJ0hENyBQcm8nXSxcbiAgICAgICAgJ0hlcm8nOiBbJ0hUQycsICdIZXJvJ10sXG4gICAgICAgICdIRVJPIENETUEnOiBbJ0hUQycsICdIZXJvJ10sXG4gICAgICAgICdIRVJPMjAwJzogWydIVEMnLCAnSGVybyAyMDAnXSxcbiAgICAgICAgJ0luY3JlZGlibGUnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdJbmNyZWRpYmxlIDInOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0luY3JlZGlibGUgUyc6IFsnSFRDJywgJ0luY3JlZGlibGUgUyddLFxuICAgICAgICAnSW5jcmVkaWJsZVMgUzcxMGUnOiBbJ0hUQycsICdJbmNyZWRpYmxlIFMnXSxcbiAgICAgICAgJ0luY3JlZGlibGVTJzogWydIVEMnLCAnSW5jcmVkaWJsZSBTJ10sXG4gICAgICAgICdJbnNwaXJlIEhEJzogWydIVEMnLCAnSW5zcGlyZSA0RyddLFxuICAgICAgICAnSW5zcGlyZSA0Ryc6IFsnSFRDJywgJ0luc3BpcmUgNEcnXSxcbiAgICAgICAgJ0xlZ2VuZCc6IFsnSFRDJywgJ0xlZ2VuZCddLFxuICAgICAgICAnTmV4dXNIRDInOiBbJ0hUQycsICdIRDInXSxcbiAgICAgICAgJ05leHVzIEhEMic6IFsnSFRDJywgJ0hEMiddLFxuICAgICAgICAnRG9jb21vIEhULTAzQSc6IFsnSFRDJywgJ01hZ2ljJ10sXG4gICAgICAgICdNSVVJLnVzIFNlbnNhdGlvbiA0Ryc6IFsnSFRDJywgJ1NlbnNhdGlvbiA0RyddLFxuICAgICAgICAnU2lSRiBEcmVhbSc6IFsnSFRDJywgJ0RyZWFtJ10sXG4gICAgICAgICdQeXJhbWlkJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdTZW5zYXRpb24nOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ1NlbnNhdGlvbiBaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnU2Vuc2F0aW9uIDRHJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdTZW5zYXRpb24gNGcnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ1RyaXBOaUNFIFB5cmFtaWQnOiBbJ0hUQycsICdTZW5zYXRpb24nXSxcbiAgICAgICAgJ1NlbnNhdGlvblhFIEJlYXRzIFo3MTVlJzogWydIVEMnLCAnU2Vuc2F0aW9uIFhFJ10sXG4gICAgICAgICdTZW5zYXRpb25YTCBCZWF0cyBYMzE1ZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiBYTCddLFxuICAgICAgICAnQ2xpY2snOiBbJ0hUQycsICdUYXR0b28nXSxcbiAgICAgICAgJ1dpbGRmaXJlJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ1dpbGRmaXJlIFMnOiBbJ0hUQycsICdXaWxkZmlyZSBTJ10sXG4gICAgICAgICdXaWxkZmlyZSBTIEE1MTBlJzogWydIVEMnLCAnV2lsZGZpcmUgUyddLFxuICAgICAgICAnU3ByaW50IEFQWDUxNUNLVCc6IFsnSFRDJywgJ0VWTyAzRCddLFxuICAgICAgICAnU3ByaW50IEFQQTkyOTJLVCc6IFsnSFRDJywgJ0VWTyA0RyddLFxuICAgICAgICAnU3ByaW50IEFQQTczNzNLVCc6IFsnSFRDJywgJ0VWTyBTaGlmdCA0RyddLFxuICAgICAgICAnU3ByaW50IEFQQzcxNUNLVCc6IFsnSFRDJywgJ0VWTyBEZXNpZ24gNEcnXSxcbiAgICAgICAgJ0EzMzgwJzogWydIVEMnLCAnV2lsZGZpcmUnXSxcbiAgICAgICAgJ0E2Mjc3JzogWydIVEMnLCAnSGVybyddLFxuICAgICAgICAnYTcyNzInOiBbJ0hUQycsICdEZXNpcmUgWiddLFxuICAgICAgICAnQTcyNzIrKEhUQyBEZXNpcmVaKSc6IFsnSFRDJywgJ0Rlc2lyZSBaJ10sXG4gICAgICAgICdTMzFIVCc6IFsnSFRDJywgJ0FyaWEnXSxcbiAgICAgICAgJ1M3MTBkJzogWydIVEMnLCAnRHJvaWQgSW5jcmVkaWJsZSAyJ10sXG4gICAgICAgICdTNzEwRCc6IFsnSFRDJywgJ0Ryb2lkIEluY3JlZGlibGUgMiddLFxuICAgICAgICAnWDA2SFQnOiBbJ0hUQycsICdEZXNpcmUnXSxcbiAgICAgICAgJzAwMUhUJzogWydIVEMnLCAnRGVzaXJlIEhEJ10sXG4gICAgICAgICdYMzI1YSc6IFsnSFRDJywgJ09uZSBYJ10sXG4gICAgICAgICdaNTIwbSc6IFsnSFRDJywgJ09uZSBTJ10sXG4gICAgICAgICdaNzEwJzogWydIVEMnLCAnU2Vuc2F0aW9uJ10sXG4gICAgICAgICdaNzEwZSc6IFsnSFRDJywgJ1NlbnNhdGlvbiddLFxuICAgICAgICAnVDkxOTloJzogWydIVEMnLCAnVDkxOTloJ10sXG4gICAgICAgICdIVEMgUzYxMGQnOiBbJ0hUQycsICdTNjEwZCddLFxuICAgICAgICAnQURSNjIwMCc6IFsnSFRDJywgJ0Ryb2lkIEVyaXMnXSxcbiAgICAgICAgJ0FEUjYzMDAnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdBRFI2MzI1VlcnOiBbJ0hUQycsICdNZXJnZSddLFxuICAgICAgICAnQURSNjMzMFZXJzogWydIVEMnLCAnUmh5bWUnXSxcbiAgICAgICAgJ0FEUjYzNTAnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlIDInXSxcbiAgICAgICAgJ0FEUjY0MDBMJzogWydIVEMnLCAnVGh1bmRlcmJvbHQgNEcnXSxcbiAgICAgICAgJ0FEUjY0MDBMIDRHJzogWydIVEMnLCAnVGh1bmRlcmJvbHQgNEcnXSxcbiAgICAgICAgJ0FEUjY0MTBMVlcgNEcnOiBbJ0hUQycsICdGaXJlYmFsbCddLFxuICAgICAgICAnQURSNjQyNUxWVyc6IFsnSFRDJywgJ1Jlem91bmQnXSxcbiAgICAgICAgJ0FEUjY0MjVMVlcgNEcnOiBbJ0hUQycsICdSZXpvdW5kJ10sXG4gICAgICAgICdDb3F1ZXR0aXNoIFJlZCc6IFsnSFRDJywgJ1Jlem91bmQnXSxcbiAgICAgICAgJ1BCOTk0MDAnOiBbJ0hUQycsICdEcm9pZCBJbmNyZWRpYmxlJ10sXG4gICAgICAgICdwY2RhZHI2MzUwJzogWydIVEMnLCAnRHJvaWQgSW5jcmVkaWJsZSAyJ10sXG4gICAgICAgICdQQzM2MTAwJzogWydIVEMnLCAnRVZPIDRHJ10sXG4gICAgICAgICdQRzA2MTAwJzogWydIVEMnLCAnRVZPIFNoaWZ0IDRHJ10sXG4gICAgICAgICdQRzQxMjAwJzogWydIVEMnLCAnRVZPIFZpZXcgNEcnLCAndGFibGV0J10sXG4gICAgICAgICdQRzg2MTAwJzogWydIVEMnLCAnRVZPIDNEJ10sXG4gICAgICAgICdQRzg2MTAwMDAnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ1BINDQxMDAnOiBbJ0hUQycsICdFVk8gRGVzaWduIDRHJ10sXG4gICAgICAgICdQSjgzMTAwJzogWydIVEMnLCAnT25lIFgnXSxcbiAgICAgICAgJ0lTVzExSFQnOiBbJ0hUQycsICdFVk8gNEcnXSxcbiAgICAgICAgJ0lTVzEySFQnOiBbJ0hUQycsICdFVk8gM0QnXSxcbiAgICAgICAgJ0lTVzEzSFQnOiBbJ0hUQycsICdKJ10sXG4gICAgICAgICdVU0NDQURSNjI3NVVTIENhcnJpZXIgSUQgNDUnOiBbJ0hUQycsICdEZXNpcmUnXSxcbiAgICAgICAgJ1VTQ0NBRFI2Mjg1VVMnOiBbJ0hUQycsICdIZXJvIFMnXSxcbiAgICAgICAgJ1VTQ0NBRFI2MzI1VVMgQ2FycmllciBJRCA0NSc6IFsnSFRDJywgJ01lcmdlJ10sXG4gICAgICAgICdNZWRpYVBhZCc6IFsnSHVhd2VpJywgJ01lZGlhUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnSHVhd2VpIE1lZGlhUGFkJzogWydIdWF3ZWknLCAnTWVkaWFQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdIVUFXRUkgTWVkaWFQYWQnOiBbJ0h1YXdlaScsICdNZWRpYVBhZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0h1YXdlaSBTNy0zMTJ1JzogWydIdWF3ZWknLCAnTWVkaWFQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdNZWRpYVBhZCAxMCBGSEQnOiBbJ0h1YXdlaScsICdNZWRpYVBhZCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0h1YXdlaSBDODUwMCc6IFsnSHVhd2VpJywgJ0M4NTAwJ10sXG4gICAgICAgICdIdWF3ZWkgQzg1MDBTJzogWydIdWF3ZWknLCAnQzg1MDAnXSxcbiAgICAgICAgJ0h1YXdlaSBDODYwMCc6IFsnSHVhd2VpJywgJ0M4NjAwJ10sXG4gICAgICAgICdIdWF3ZWkgQzg2NTAnOiBbJ0h1YXdlaScsICdDODY1MCddLFxuICAgICAgICAnSHVhd2VpIEM4NjUwKyc6IFsnSHVhd2VpJywgJ0M4NjUwJ10sXG4gICAgICAgICdIdWF3ZWkgQzg4MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnSHVhd2VpIEM4ODEwJzogWydIdWF3ZWknLCAnQXNjZW5kIEczMDAnXSxcbiAgICAgICAgJ0h1YXdlaSBDODgxMic6IFsnSHVhd2VpJywgJ0FzY2VuZCBDODgxMiddLFxuICAgICAgICAnSHVhd2VpIEM4ODEyRSc6IFsnSHVhd2VpJywgJ0FzY2VuZCBDODgxMiddLFxuICAgICAgICAnSHVhd2VpIEM4ODI1RCc6IFsnSHVhd2VpJywgJ0FzY2VuZCBDODgyNUQnXSxcbiAgICAgICAgJ0h1YXdlaSBDODg2MEUnOiBbJ0h1YXdlaScsICdIb25vciddLFxuICAgICAgICAnSHVhd2VpIE04MzUnOiBbJ0h1YXdlaScsICdNODM1J10sXG4gICAgICAgICdIdWF3ZWkgTTg2MCc6IFsnSHVhd2VpJywgJ0FzY2VuZCddLFxuICAgICAgICAnSHVhd2VpIE05MjEnOiBbJ0h1YXdlaScsICdNOTIxJ10sXG4gICAgICAgICdIdWF3ZWkgUzg1MjAnOiBbJ0h1YXdlaScsICdTODUyMCddLFxuICAgICAgICAnSHVhd2VpIFM4NjAwJzogWydIdWF3ZWknLCAnUzg2MDAnXSxcbiAgICAgICAgJ0h1YXdlaSBUODMwMCc6IFsnSHVhd2VpJywgJ1Q4MzAwJ10sXG4gICAgICAgICdIdWF3ZWkgVDg2MDAnOiBbJ0h1YXdlaScsICdUODYwMCddLFxuICAgICAgICAnSHVhd2VpIFQ4ODMwJzogWydIdWF3ZWknLCAnVDg4MzAnXSxcbiAgICAgICAgJ1Q4ODMwJzogWydIdWF3ZWknLCAnVDg4MzAnXSxcbiAgICAgICAgJ1Q4NjIwJzogWydIdWF3ZWknLCAnVDg2MjAnXSxcbiAgICAgICAgJ0h1YXdlaSBUODgyOCc6IFsnSHVhd2VpJywgJ1Q4ODI4J10sXG4gICAgICAgICdIdWF3ZWkgVTgyMjAnOiBbJ0h1YXdlaScsICdVODIyMCddLFxuICAgICAgICAnSHVhd2VpIHU4NTAwJzogWydIdWF3ZWknLCAnSURFT1MgWDInXSxcbiAgICAgICAgJ0h1YXdlaSBVODgxNSc6IFsnSHVhd2VpJywgJ0FzY2VuZCBHMzAwJ10sXG4gICAgICAgICdIdWF3ZWkgVTg4MjVEJzogWydIdWF3ZWknLCAnQXNjZW5kIEczMzBEJ10sXG4gICAgICAgICdIdWF3ZWkgVTg4NTAnOiBbJ0h1YXdlaScsICdWaXNpb24nXSxcbiAgICAgICAgJ0h1YXdlaSBVODY1Mic6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdIdWF3ZWkgVTg4MDAtNTEnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnSHVhd2VpIFU4ODE4JzogWydIdWF3ZWknLCAnQXNjZW5kIEczMDAnXSxcbiAgICAgICAgJ0h1YXdlaSBVOTAwMCc6IFsnSHVhd2VpJywgJ0FzY2VuZCBYJ10sXG4gICAgICAgICdIdWF3ZWkgSURFT1MgVTg1MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYMiddLFxuICAgICAgICAnSHVhd2VpIElERU9TIFU4NjUwJzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ0h1YXdlaSBJREVPUyBYMyc6IFsnSHVhd2VpJywgJ0lERU9TIFgzJ10sXG4gICAgICAgICdIdWF3ZWkgSWRlb3MgWDUnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnSHVhd2VpIElkZW9zIFg1IDEuMTIuOShyZXQ0cnQpJzogWydIdWF3ZWknLCAnSURFT1MgWDUnXSxcbiAgICAgICAgJ0h1YXdlaSBTT05JQyc6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdIdWF3ZWkgODEwMC05JzogWydIdWF3ZWknLCAnVTgxMDAnXSxcbiAgICAgICAgJ0ZVU0lPTmlkZW9zJzogWydIdWF3ZWknLCAnSURFT1MnXSxcbiAgICAgICAgJ0duYXBwbyBJZGVvcyc6IFsnSHVhd2VpJywgJ0lERU9TJ10sXG4gICAgICAgICdJZGVvcyc6IFsnSHVhd2VpJywgJ0lERU9TJ10sXG4gICAgICAgICdJREVPUyBYNSc6IFsnSHVhd2VpJywgJ0lERU9TIFg1J10sXG4gICAgICAgICdJZGVvcyBTNyc6IFsnSHVhd2VpJywgJ0lERU9TIFM3JywgJ3RhYmxldCddLFxuICAgICAgICAnSURFT1MgUzcnOiBbJ0h1YXdlaScsICdJREVPUyBTNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lERU9TIFM3IFNsaW0nOiBbJ0h1YXdlaScsICdJREVPUyBTNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0h1YXdlaSBTNyc6IFsnSHVhd2VpJywgJ0lERU9TIFM3JywgJ3RhYmxldCddLFxuICAgICAgICAnU09OSUMnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAnS3lpdnN0YXIgQXF1YSc6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdMdWNreSBVbHRyYSBTb25pYyBVODY1MCc6IFsnSHVhd2VpJywgJ1NvbmljJ10sXG4gICAgICAgICdUdXJrY2VsbCBUMjAnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAnTVRDIDk1MCc6IFsnSHVhd2VpJywgJ1U4MTYwJ10sXG4gICAgICAgICdNVEMgOTU1JzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ01UQyBFdm8nOiBbJ0h1YXdlaScsICdDODUwMCddLFxuICAgICAgICAnTVRDIEFuZHJvaWQnOiBbJ0h1YXdlaScsICdVODExMCddLFxuICAgICAgICAnUzMxSFcnOiBbJ0h1YXdlaScsICdQb2NrZXQgV2lGaSBTJ10sXG4gICAgICAgICdTNDFIVyc6IFsnSHVhd2VpJywgJ1BvY2tldCBXaUZpIFMgSUknXSxcbiAgICAgICAgJzAwN0hXJzogWydIdWF3ZWknLCAnVmlzaW9uJ10sXG4gICAgICAgICdVTTg0MCc6IFsnSHVhd2VpJywgJ0V2b2x1dGlvbiddLFxuICAgICAgICAnTTg2MCc6IFsnSHVhd2VpJywgJ0FzY2VuZCddLFxuICAgICAgICAnTTg2NSc6IFsnSHVhd2VpJywgJ0FzY2VuZCBJSSddLFxuICAgICAgICAnTTg4Nic6IFsnSHVhd2VpJywgJ0dsb3J5J10sXG4gICAgICAgICdDODE1MCc6IFsnSHVhd2VpJywgJ0lERU9TJ10sXG4gICAgICAgICdjODUwMCc6IFsnSHVhd2VpJywgJ0M4NTAwJ10sXG4gICAgICAgICdDODUwMCc6IFsnSHVhd2VpJywgJ0M4NTAwJ10sXG4gICAgICAgICdDODUwMFMnOiBbJ0h1YXdlaScsICdDODUwMCddLFxuICAgICAgICAnQzg2MDAnOiBbJ0h1YXdlaScsICdDODYwMCddLFxuICAgICAgICAnYzg2NTAnOiBbJ0h1YXdlaScsICdDODY1MCddLFxuICAgICAgICAnQzg2NTAnOiBbJ0h1YXdlaScsICdDODY1MCddLFxuICAgICAgICAnYzg4MDAnOiBbJ0h1YXdlaScsICdDODgwMCddLFxuICAgICAgICAnQzg4MDAnOiBbJ0h1YXdlaScsICdDODgwMCddLFxuICAgICAgICAnYzg4MTAnOiBbJ0h1YXdlaScsICdBc2NlbmQgRzMwMEMnXSxcbiAgICAgICAgJ0M4ODEyJzogWydIdWF3ZWknLCAnQXNjZW5kIEM4ODEyJ10sXG4gICAgICAgICdTODYwMCc6IFsnSHVhd2VpJywgJ1M4NjAwJ10sXG4gICAgICAgICdVODEwMCc6IFsnSHVhd2VpJywgJ1U4MTAwJ10sXG4gICAgICAgICdVODExMCc6IFsnSHVhd2VpJywgJ1U4MTEwJ10sXG4gICAgICAgICd1ODEyMCc6IFsnSHVhd2VpJywgJ1U4MTIwJ10sXG4gICAgICAgICdVODEyMCc6IFsnSHVhd2VpJywgJ1U4MTIwJ10sXG4gICAgICAgICdVODE4MCc6IFsnSHVhd2VpJywgJ0lERU9TIFgxJ10sXG4gICAgICAgICdVODIyMCc6IFsnSHVhd2VpJywgJ1B1bHNlJ10sXG4gICAgICAgICdVODMwMCc6IFsnSHVhd2VpJywgJ1U4MzAwJ10sXG4gICAgICAgICdVODM1MCc6IFsnSHVhd2VpJywgJ0JvdWxkZXInXSxcbiAgICAgICAgJ1U4MTUwJzogWydIdWF3ZWknLCAnSURFT1MnXSxcbiAgICAgICAgJ1U4MTYwJzogWydIdWF3ZWknLCAnVTgxNjAnXSxcbiAgICAgICAgJ1U4NTAwJzogWydIdWF3ZWknLCAnSURFT1MgWDInXSxcbiAgICAgICAgJ1U4NTAwIEhpUVEnOiBbJ0h1YXdlaScsICdVODUwMCBIaVFRIEVkaXRpb24nXSxcbiAgICAgICAgJ1U4NTEwJzogWydIdWF3ZWknLCAnSURFT1MgWDMnXSxcbiAgICAgICAgJ3U4NjUwJzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ1U4NjUwJzogWydIdWF3ZWknLCAnU29uaWMnXSxcbiAgICAgICAgJ1U4NjUwLTEnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAnVTg2NjAnOiBbJ0h1YXdlaScsICdTb25pYyddLFxuICAgICAgICAndTg4MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnVTg4MDAnOiBbJ0h1YXdlaScsICdJREVPUyBYNSddLFxuICAgICAgICAnVTg4MDArJzogWydIdWF3ZWknLCAnSURFT1MgWDUnXSxcbiAgICAgICAgJ1U4ODAwWCc6IFsnSHVhd2VpJywgJ0lERU9TIFg1J10sXG4gICAgICAgICdVODgwMHBybyc6IFsnSHVhd2VpJywgJ0lERU9TIFg1IFBybyddLFxuICAgICAgICAnVTg4MDBQUk8nOiBbJ0h1YXdlaScsICdJREVPUyBYNSBQcm8nXSxcbiAgICAgICAgJ1U4ODAwUHJvJzogWydIdWF3ZWknLCAnSURFT1MgWDUgUHJvJ10sXG4gICAgICAgICd1ODgwMHBybyc6IFsnSHVhd2VpJywgJ0lERU9TIFg1IFBybyddLFxuICAgICAgICAnVTg4MDAgUHJvJzogWydIdWF3ZWknLCAnSURFT1MgWDUgUHJvJ10sXG4gICAgICAgICdVODgxOCc6IFsnSHVhd2VpJywgJ0FzY2VuZCBHMzAwJ10sXG4gICAgICAgICdVODg1MCc6IFsnSHVhd2VpJywgJ1Zpc2lvbiddLFxuICAgICAgICAndTg4NjAnOiBbJ0h1YXdlaScsICdIb25vciddLFxuICAgICAgICAnVTg4NjAnOiBbJ0h1YXdlaScsICdIb25vciddLFxuICAgICAgICAnVTkwMDAnOiBbJ0h1YXdlaScsICdBc2NlbmQgWCddLFxuICAgICAgICAnVTkyMDAnOiBbJ0h1YXdlaScsICdBc2NlbmQgUDEnXSxcbiAgICAgICAgJ1U5MjAwLTEnOiBbJ0h1YXdlaScsICdBc2NlbmQgUDEnXSxcbiAgICAgICAgJ1U5NTAwJzogWydIdWF3ZWknLCAnQXNjZW5kIEQxJ10sXG4gICAgICAgICdVOTUwMUwnOiBbJ0h1YXdlaScsICdBc2NlbmQgRCBMVEUnXSxcbiAgICAgICAgJ1U5NTEwJzogWydIdWF3ZWknLCAnQXNjZW5kIEQgcXVhZCddLFxuICAgICAgICAnVTk1MTBFJzogWydIdWF3ZWknLCAnQXNjZW5kIEQgcXVhZCddLFxuICAgICAgICAnQ29tZXQnOiBbJ0h1YXdlaScsICdDb21ldCddLFxuICAgICAgICAnR1MwMic6IFsnSHVhd2VpJywgJ0hvbm9yJ10sXG4gICAgICAgICdHUzAzJzogWydIdWF3ZWknLCAnQXNjZW5kIFAxJ10sXG4gICAgICAgICdEcm9uaVgtMC41JzogWydIdWF3ZWknLCAnVTgxODAnXSxcbiAgICAgICAgJ01UUy1TUDEwMSc6IFsnSHVhd2VpJywgJ0M4NTExJ10sXG4gICAgICAgICdUU1AyMSc6IFsnSHVhd2VpJywgJ1U4MTEwJ10sXG4gICAgICAgICdIWVVOREFJIEg2JzogWydIeXVuZGFpJywgJ1N0b3JtIEg2J10sXG4gICAgICAgICdpQmFsbCBTbGlkZSBpNzAxMSc6IFsnaUJhbGwnLCAnU2xpZGUgaTcwMTEnXSxcbiAgICAgICAgJ05ldFRBQiBSVU5FJzogWydJY29uQml0JywgJ05ldFRhYiBSdW5lJywgJ3RhYmxldCddLFxuICAgICAgICAnRDcwVyc6IFsnSWNvbycsICdENzBXJywgJ3RhYmxldCddLFxuICAgICAgICAnRDgwJzogWydJY29vJywgJ0Q4MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lORk9CQVIgQTAxJzogWydpaWRhJywgJ0lORk9CQVIgQTAxJ10sXG4gICAgICAgICdNMDA5Ric6IFsnSW5mb3RtaWMnLCAnTTAwOUYnXSxcbiAgICAgICAgJ0FaMjEwQSc6IFsnSW50ZWwnLCAnQVoyMTBBJ10sXG4gICAgICAgICdBWjIxMEInOiBbJ0ludGVsJywgJ0FaMjEwQiddLFxuICAgICAgICAnQVo1MTAnOiBbJ0ludGVsJywgJ0FaNTEwJ10sXG4gICAgICAgICdncmVlbnJpZGdlJzogWydJbnRlbCcsICdHcmVlbiBSaWRnZScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lOUSBDbG91ZCBUb3VjaCc6IFsnSU5RJywgJ0Nsb3VkIFRvdWNoJ10sXG4gICAgICAgICdJTFQtTVgxMDAnOiBbJ2lSaXZlcicsICdUYWInLCAndGFibGV0J10sXG4gICAgICAgICdJVklPX0RFMzgnOiBbJ0l2aW8nLCAnREUzOCddLFxuICAgICAgICAnSlktRzInOiBbJ0ppYXl1JywgJ0cyJ10sXG4gICAgICAgICdKWEQgUzYwMVdJRkknOiBbJ0pYRCcsICdTNjAxIFdJRkknLCAnbWVkaWEnXSxcbiAgICAgICAgJ0EyJzogWydLYWthVGVjaCcsICdBMiddLFxuICAgICAgICAnRDkxJzogWydLSycsICdEOTEnLCAndGFibGV0J10sXG4gICAgICAgICdLMDgwJzogWydLb2JvJywgJ0swODAnLCAnZXJlYWRlciddLFxuICAgICAgICAnQTEwNic6IFsna29vYmVlJywgJ0ExNjAnXSxcbiAgICAgICAgJ0tQVCBBOSc6IFsnS1BUJywgJ0E5J10sXG4gICAgICAgICdFVi1TMTAwJzogWydLdHRlY2gnLCAnVGFrZSBFVi1TMTAwJ10sXG4gICAgICAgICdLTS1TMTIwJzogWydLdHRlY2gnLCAnVGFrZSAyIEtNLVMxMjAnXSxcbiAgICAgICAgJ0tNLVMyMDAnOiBbJ1RBS0UnLCAnSmFudXMgS00tUzIwMCddLFxuICAgICAgICAnS00tUzIyMCc6IFsnS3R0ZWNoJywgJ1Rha2UgVGFjaHkgS00tUzIyMCddLFxuICAgICAgICAnS3lvYm8gbWlyYXNvbCBlUmVhZGVyJzogWydLeW9ibycsICdlUmVhZGVyJywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ0lTVzExSyc6IFsnS3lvY2VyYScsICdEaWdubyddLFxuICAgICAgICAnSkMtS1NQODAwMCc6IFsnS3lvY2VyYScsICdFY2hvJ10sXG4gICAgICAgICdLU1A4MDAwJzogWydLeW9jZXJhJywgJ0VjaG8nXSxcbiAgICAgICAgJ1ppbyc6IFsnS3lvY2VyYScsICdaaW8nXSxcbiAgICAgICAgJ0M1MTU1JzogWydLeW9jZXJhJywgJ0M1MTU1J10sXG4gICAgICAgICdDNTE3MCc6IFsnS3lvY2VyYScsICdDNTE3MCddLFxuICAgICAgICAnTTkzMDAnOiBbJ0t5b2NlcmEnLCAnTTkzMDAnXSxcbiAgICAgICAgJ0U4MDAnOiBbJ0stVG91Y2gnLCAnRTgwMCddLFxuICAgICAgICAnVzYwNic6IFsnSy1Ub3VjaCcsICdXNjA2J10sXG4gICAgICAgICdLLVRvdWNoIFQ2MTknOiBbJ0stVG91Y2gnLCAnVDYxOSddLFxuICAgICAgICAnSy1Ub3VjaCBXNjE5JzogWydLLVRvdWNoJywgJ1c2MTknXSxcbiAgICAgICAgJ0stVG91Y2ggVzY1MCc6IFsnSy1Ub3VjaCcsICdXNjUwJ10sXG4gICAgICAgICdXNzAwJzogWydLLVRvdWNoJywgJ1c3MDAnXSxcbiAgICAgICAgJ1c4MDAnOiBbJ0stVG91Y2gnLCAnVzgwMCddLFxuICAgICAgICAnVzgwNic6IFsnSy1Ub3VjaCcsICdXODA2J10sXG4gICAgICAgICdXODA4JzogWydLLVRvdWNoJywgJ1c4MDgnXSxcbiAgICAgICAgJ1c4MTAnOiBbJ0stVG91Y2gnLCAnVzgxMCddLFxuICAgICAgICAnWDkwMCc6IFsnTGF2YScsICdYT0xPIFg5MDAnXSxcbiAgICAgICAgJ0xlbm92byBBNzk4dCc6IFsnTGVub3ZvJywgJ0E3OTh0J10sXG4gICAgICAgICdMRU5PVk8tTGVub3ZvLUEyODh0JzogWydMZW5vdm8nLCAnTGVQaG9uZSBBMjg4J10sXG4gICAgICAgICdUaGlua1BhZCBUYWJsZXQnOiBbJ0xlbm92bycsICdUaGlua1BhZCBUYWJsZXQnLCAndGFibGV0J10sXG4gICAgICAgICdLMSc6IFsnTGVub3ZvJywgJ0lkZWFQYWQgSzEnLCAndGFibGV0J10sXG4gICAgICAgICdJZGVhcGFkIFMxMC0zVCc6IFsnTGVub3ZvJywgJ0lkZWFQYWQgUzEwLTNUJywgJ3RhYmxldCddLFxuICAgICAgICAnUzIwMDVBLUgnOiBbJ0xlbm92bycsICdTMjAwNUEnXSxcbiAgICAgICAgJ0lkZWFUYWIgUzIwMDdBLUQnOiBbJ0xlbm92bycsICdJZGVhVGFiIFMyMDA3QScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lkZWFUYWJWMjAwN0EnOiBbJ0xlbm92bycsICdJZGVhVGFiIFYyMDA3QScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lkZWFUYWJWMjAwN0EtRC1JJzogWydMZW5vdm8nLCAnSWRlYVRhYiBWMjAwN0EnLCAndGFibGV0J10sXG4gICAgICAgICdJZGVhVGFiVjIwMTBBJzogWydMZW5vdm8nLCAnSWRlYVRhYiBWMjAxMEEnLCAndGFibGV0J10sXG4gICAgICAgICdJZGVhVGFiIEEyMTA3QS1IJzogWydMZW5vdm8nLCAnSWRlYVRhYiBWMjEwN0EnLCAndGFibGV0J10sXG4gICAgICAgICdBMSAwNyc6IFsnTGVub3ZvJywgJ0xlUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnbGVwYWQgMDAxYic6IFsnTGVub3ZvJywgJ0xlUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnbGVwYWQgMDAxbic6IFsnTGVub3ZvJywgJ0xlUGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnM0dDMTAxJzogWydMZW5vdm8nLCAnTGVQaG9uZSAzR0MxMDEnXSxcbiAgICAgICAgJ0xlbm92byAzR0MxMDEnOiBbJ0xlbm92bycsICdMZVBob25lIDNHQzEwMSddLFxuICAgICAgICAnM0dXMTAwJzogWydMZW5vdm8nLCAnTGVQaG9uZSAzR1cxMDAnXSxcbiAgICAgICAgJ0xlbm92byAzR1cxMDAnOiBbJ0xlbm92bycsICdMZVBob25lIDNHVzEwMCddLFxuICAgICAgICAnM0dXMTAxJzogWydMZW5vdm8nLCAnTGVQaG9uZSAzR1cxMDEnXSxcbiAgICAgICAgJ0xlbm92byAzR1cxMDEnOiBbJ0xlbm92bycsICdMZVBob25lIDNHVzEwMSddLFxuICAgICAgICAnTGVwaG9uZSAzR1cxMDEnOiBbJ0xlbm92bycsICdMZVBob25lIDNHVzEwMSddLFxuICAgICAgICAnTGVub3ZvIEExLTMyQUIwJzogWydMZW5vdm8nLCAnTGVQaG9uZSBBMS0zMkFCMCddLFxuICAgICAgICAnTGVub3ZvIFMxLTM3QUgwJzogWydMZW5vdm8nLCAnTGVQaG9uZSBTMS0zN0FIMCddLFxuICAgICAgICAnUzEgMzdBSE8nOiBbJ0xlbm92bycsICdMZVBob25lIFMxLTM3QUgwJ10sXG4gICAgICAgICdMZW5vdm8gUzItMzhBSDAnOiBbJ0xlbm92bycsICdMZVBob25lIFMyLTM4QUgwJ10sXG4gICAgICAgICdMZW5vdm8gUzItMzhBVDAnOiBbJ0xlbm92bycsICdMZVBob25lIFMyLTM4QVQwJ10sXG4gICAgICAgICdMZW5vdm8gQTI4OHQnOiBbJ0xlbm92bycsICdMZVBob25lIEEyODgnXSxcbiAgICAgICAgJ0xlbm92byBBMzY2dCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTM2NiddLFxuICAgICAgICAnTGVub3ZvIEEzOTBlJzogWydMZW5vdm8nLCAnTGVQaG9uZSBBMzkwJ10sXG4gICAgICAgICdMZW5vdm8gQTUwMCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTUwMCddLFxuICAgICAgICAnTGVub3ZvIEE1MjAnOiBbJ0xlbm92bycsICdMZVBob25lIEE1MjAnXSxcbiAgICAgICAgJ0xlbm92byBBNTYwZSc6IFsnTGVub3ZvJywgJ0E1NjAnXSxcbiAgICAgICAgJ0xlbm92byBBNjY4dCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTY2OCddLFxuICAgICAgICAnTGVub3ZvIEE2OTh0JzogWydMZW5vdm8nLCAnTGVQaG9uZSBBNjk4J10sXG4gICAgICAgICdMZW5vdm8gQTc1MCc6IFsnTGVub3ZvJywgJ0xlUGhvbmUgQTc1MCddLFxuICAgICAgICAnTGVub3ZvIEE3ODAnOiBbJ0xlbm92bycsICdMZVBob25lIEE3ODAnXSxcbiAgICAgICAgJ0xlbm92byBBNzg5JzogWydMZW5vdm8nLCAnTGVQaG9uZSBBNzg5J10sXG4gICAgICAgICdMZW5vdm8gQTc5MGUnOiBbJ0xlbm92bycsICdMZVBob25lIEE3OTAnXSxcbiAgICAgICAgJ0xlbm92byBQNzAnOiBbJ0xlbm92bycsICdMZVBob25lIFA3MCddLFxuICAgICAgICAnTGVub3ZvIFA3MDAnOiBbJ0xlbm92bycsICdMZVBob25lIFA3MDAnXSxcbiAgICAgICAgJ0xlbm92byBTODUwZSc6IFsnTGVub3ZvJywgJ1M4NTAnXSxcbiAgICAgICAgJ0xlbm92byBTODgwJzogWydMZW5vdm8nLCAnUzg4MCddLFxuICAgICAgICAnTGVub3ZvIEs4NjAnOiBbJ0xlbm92bycsICdLODYwJ10sXG4gICAgICAgICdBMzB0JzogWydMZW5vdm8nLCAnQTMwdCddLFxuICAgICAgICAnTGVub3ZvIEE2MCc6IFsnTGVub3ZvJywgJ0E2MCddLFxuICAgICAgICAnTGVub3ZvIEE2NSc6IFsnTGVub3ZvJywgJ0E2NSddLFxuICAgICAgICAnTGVub3ZvIEE2NnQnOiBbJ0xlbm92bycsICdBNjZ0J10sXG4gICAgICAgICdMZW5vdm8gQTY4ZSc6IFsnTGVub3ZvJywgJ0E2OGUnXSxcbiAgICAgICAgJ0xlbm92byBLODAwJzogWydMZW5vdm8nLCAnSzgwMCddLFxuICAgICAgICAnSURFQSBUViBUMTAwJzogWydMZW5vdm8nLCAnSURFQSBUVicsICd0ZWxldmlzaW9uJ10sXG4gICAgICAgICdJREVBIFRWIEs5MSc6IFsnTGVub3ZvJywgJ0lERUEgVFYnLCAndGVsZXZpc2lvbiddLFxuICAgICAgICAnVEM5NzAnOiBbJ0xlIFBhbicsICdUQzk3MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0xlUGFuSUknOiBbJ0xlIFBhbicsICdJSScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0xHLUM1NTUnOiBbJ0xHJywgJ09wdGltdXMgQ2hhdCddLFxuICAgICAgICAnTEctQzU1NS1wYXJyb3QnOiBbJ0xHJywgJ09wdGltdXMgQ2hhdCddLFxuICAgICAgICAnTEctQzY2MGgnOiBbJ0xHJywgJ09wdGltdXMgUHJvJ10sXG4gICAgICAgICdMRy1DNzI5JzogWydMRycsICdEb3VibGVQbGF5J10sXG4gICAgICAgICdMRy1DODAwRyc6IFsnTEcnLCAnRWNseXBzZSddLFxuICAgICAgICAnTEctQ1g2NzAnOiBbJ0xHJywgJ09wdGltdXMgM0cnXSxcbiAgICAgICAgJ0xHLUU0MDAnOiBbJ0xHJywgJ09wdGltdXMgTDMnXSxcbiAgICAgICAgJ0xHLUU0MDBmJzogWydMRycsICdPcHRpbXVzIEwzJ10sXG4gICAgICAgICdMRy1FNTEwJzogWydMRycsICdPcHRpbXVzIEh1YiddLFxuICAgICAgICAnTEctRTUxMGYnOiBbJ0xHJywgJ09wdGltdXMgSHViJ10sXG4gICAgICAgICdMRy1FNTEwZyc6IFsnTEcnLCAnT3B0aW11cyBIdWInXSxcbiAgICAgICAgJ0xHLUU2MTAnOiBbJ0xHJywgJ09wdGltdXMgTDUnXSxcbiAgICAgICAgJ0xHLUU2MTInOiBbJ0xHJywgJ09wdGltdXMgTDUnXSxcbiAgICAgICAgJ0xHLUU2MTJnJzogWydMRycsICdPcHRpbXVzIEw1J10sXG4gICAgICAgICdMRy1FNjE1Ric6IFsnTEcnLCAnRTYxNSddLFxuICAgICAgICAnTEctRTYxN0cnOiBbJ0xHJywgJ0U2MTcnXSxcbiAgICAgICAgJ0xHLUU3MjAnOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctRTcyMGInOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctRTczMCc6IFsnTEcnLCAnT3B0aW11cyBTb2wnXSxcbiAgICAgICAgJ0xHLUU5NzAnOiBbJ0xHJywgJ1NoaW5lJ10sXG4gICAgICAgICdMRy1GMTAwTCc6IFsnTEcnLCAnT3B0aW11cyBWdSddLFxuICAgICAgICAnTEctRjEwMFMnOiBbJ0xHJywgJ09wdGltdXMgVnUnXSxcbiAgICAgICAgJ0xHLUYxMjBLJzogWydMRycsICdPcHRpbXVzIExURSBUYWcnXSxcbiAgICAgICAgJ0xHLUYxMjBMJzogWydMRycsICdPcHRpbXVzIExURSBUYWcnXSxcbiAgICAgICAgJ0xHLUYxMjBTJzogWydMRycsICdPcHRpbXVzIExURSBUYWcnXSxcbiAgICAgICAgJ0xHLUYxNjBLJzogWydMRycsICdPcHRpbXVzIExURSBJSSddLFxuICAgICAgICAnTEctRjE2MEwnOiBbJ0xHJywgJ09wdGltdXMgTFRFIElJJ10sXG4gICAgICAgICdMRy1GMTYwUyc6IFsnTEcnLCAnT3B0aW11cyBMVEUgSUknXSxcbiAgICAgICAgJ0xHLUYxODBMJzogWydMRycsICdGMTgwTCddLFxuICAgICAgICAnTEctR1Q1NDAnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ0xHLUdUNTQwZic6IFsnTEcnLCAnT3B0aW11cyddLFxuICAgICAgICAnTEctR1Q1NDAgU3dpZnQnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ0xHLUdXNjIwJzogWydMRycsICdHVzYyMCddLFxuICAgICAgICAnTEctS0g1MjAwJzogWydMRycsICdBbmRyby0xJ10sXG4gICAgICAgICdMRy1LVTM3MDAnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1LVTU0MDAnOiBbJ0xHJywgJ1BSQURBIDMuMCddLFxuICAgICAgICAnTEctS1U1OTAwJzogWydMRycsICdPcHRpbXVzIEJsYWNrJ10sXG4gICAgICAgICdMRy1MNDBHJzogWydMRycsICdMNDBHJ10sXG4gICAgICAgICdMRy1MRzg1NSc6IFsnTEcnLCAnTWFycXVlZSddLFxuICAgICAgICAnTEctTFM2NzAnOiBbJ0xHJywgJ09wdGltdXMgUyddLFxuICAgICAgICAnTEctTFM2OTYnOiBbJ0xHJywgJ09wdGltdXMgRWxpdGUnXSxcbiAgICAgICAgJ0xHLUxTODQwJzogWydMRycsICdWaXBlciA0RyddLFxuICAgICAgICAnTEctTFM4NTUnOiBbJ0xHJywgJ01hcnF1ZWUnXSxcbiAgICAgICAgJ0xHLUxTODYwJzogWydMRycsICdcXCdDYXllbm5lXFwnJ10sXG4gICAgICAgICdMRy1MUzk3MCc6IFsnTEcnLCAnXFwnRWNsaXBzZVxcJyddLFxuICAgICAgICAnTEctTFUzMDAwJzogWydMRycsICdPcHRpbXVzIE1hY2gnXSxcbiAgICAgICAgJ0xHLUxVMzEwMCc6IFsnTEcnLCAnT3B0aW11cyBDaGljJ10sXG4gICAgICAgICdMRy1MVTM3MDAnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1MVTU0MDAnOiBbJ0xHJywgJ1BSQURBIDMuMCddLFxuICAgICAgICAnTEctTFU2MjAwJzogWydMRycsICdPcHRpbXVzIFEyJ10sXG4gICAgICAgICdMRy1sdTYyMDAnOiBbJ0xHJywgJ09wdGltdXMgUTInXSxcbiAgICAgICAgJ0xHLUxVNjUwMCc6IFsnTEcnLCAnT3B0aW11cyBOb3RlJ10sXG4gICAgICAgICdMRy1MVTY4MDAnOiBbJ0xHJywgJ09wdGltdXMgQmlnJ10sXG4gICAgICAgICdMRy1MVTgzMDAnOiBbJ0xHJywgJ09wdGltdXMgUGFkIExURSddLFxuICAgICAgICAnTEctTFc2OTAnOiBbJ0xHJywgJ09wdGltdXMgQyddLFxuICAgICAgICAnTEctTFc3NzAnOiBbJ0xHJywgJ0xXNzcwJ10sXG4gICAgICAgICdMRy1NUzY5MCc6IFsnTEcnLCAnT3B0aW11cyBNJ10sXG4gICAgICAgICdMRy1NUzc3MCc6IFsnTEcnLCAnTVM3NzAnXSxcbiAgICAgICAgJ0xHLU1TODQwJzogWydMRycsICdDb25uZWN0IDRHJ10sXG4gICAgICAgICdMRy1NUzkxMCc6IFsnTEcnLCAnRXN0ZWVtJ10sXG4gICAgICAgICdMRy1NUzY5NSc6IFsnTEcnLCAnT3B0aW11cyBNKyddLFxuICAgICAgICAnTEcgUDM1MCc6IFsnTEcnLCAnT3B0aW11cyBNZSddLFxuICAgICAgICAnTEctUDM1MCc6IFsnTEcnLCAnT3B0aW11cyBNZSddLFxuICAgICAgICAnTEctUDM1MGYnOiBbJ0xHJywgJ09wdGltdXMgTWUnXSxcbiAgICAgICAgJ0xHLVAzNTBnJzogWydMRycsICdPcHRpbXVzIE1lJ10sXG4gICAgICAgICdMRy1QMzU1JzogWydMRycsICdQMzU1J10sXG4gICAgICAgICdMRy1QNTAwJzogWydMRycsICdPcHRpbXVzIE9uZSddLFxuICAgICAgICAnTEctUDUwMGgnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1QNTAwaC1wYXJyb3QnOiBbJ0xHJywgJ09wdGltdXMgT25lJ10sXG4gICAgICAgICdMRy1QNTAzJzogWydMRycsICdPcHRpbXVzIE9uZSddLFxuICAgICAgICAnTEctUDUwNCc6IFsnTEcnLCAnT3B0aW11cyBPbmUnXSxcbiAgICAgICAgJ0xHLVA1MDUnOiBbJ0xHJywgJ1Bob2VuaXgnXSxcbiAgICAgICAgJ0xHLVA1MDVSJzogWydMRycsICdQaG9lbml4J10sXG4gICAgICAgICdMRy1QNTA2JzogWydMRycsICdUaHJpdmUnXSxcbiAgICAgICAgJ0xHLVA1MDknOiBbJ0xHJywgJ09wdGltdXMgVCddLFxuICAgICAgICAnTEctUDY5MCc6IFsnTEcnLCAnT3B0aW11cyBOZXQnXSxcbiAgICAgICAgJ0xHLVA2OTMnOiBbJ0xHJywgJ1A2OTMnXSxcbiAgICAgICAgJ0xHLVA2OTgnOiBbJ0xHJywgJ09wdGltdXMgTmV0J10sXG4gICAgICAgICdMRy1QNjk4Zic6IFsnTEcnLCAnT3B0aW11cyBOZXQnXSxcbiAgICAgICAgJ0xHLVA3MDAnOiBbJ0xHJywgJ09wdGltdXMgTDcnXSxcbiAgICAgICAgJ0xHLVA3MDUnOiBbJ0xHJywgJ09wdGltdXMgTDcnXSxcbiAgICAgICAgJ0xHLVA3MDVmJzogWydMRycsICdPcHRpbXVzIEw3J10sXG4gICAgICAgICdMRy1QNzA1Zyc6IFsnTEcnLCAnT3B0aW11cyBMNyddLFxuICAgICAgICAnTEctUDcwOGcnOiBbJ0xHJywgJ1A3MDgnXSxcbiAgICAgICAgJ0xHLVA3MjAnOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctUDcyMGgnOiBbJ0xHJywgJ09wdGltdXMgQ2hpYyddLFxuICAgICAgICAnTEctUDcyNSc6IFsnTEcnLCAnT3B0aW11cyAzRCBNYXgnXSxcbiAgICAgICAgJ0xHLVA3NjAnOiBbJ0xHJywgJ1A3NjAnXSxcbiAgICAgICAgJ0xHLVA3NjknOiBbJ0xHJywgJ1A3NjknXSxcbiAgICAgICAgJ0xHLVA4NjAnOiBbJ0xHJywgJ1A4NjAnXSxcbiAgICAgICAgJ0xHLVA4NzAnOiBbJ0xHJywgJ1A4NzAnXSxcbiAgICAgICAgJ0xHLVA4NzBGJzogWydMRycsICdQODcwJ10sXG4gICAgICAgICdMRy1QODgwJzogWydMRycsICdYMyddLFxuICAgICAgICAnTEctUDg4MGcnOiBbJ0xHJywgJ1gzJ10sXG4gICAgICAgICdMRy1QODk1JzogWydMRycsICdQODk1J10sXG4gICAgICAgICdMRy1QOTIwJzogWydMRycsICdPcHRpbXVzIDNEJ10sXG4gICAgICAgICdMRy1QOTIwaCc6IFsnTEcnLCAnT3B0aW11cyAzRCddLFxuICAgICAgICAnTEctUDkyNSc6IFsnTEcnLCAnVGhyaWxsJ10sXG4gICAgICAgICdMRy1QOTI1Zyc6IFsnTEcnLCAnVGhyaWxsJ10sXG4gICAgICAgICdMRy1QOTMwJzogWydMRycsICdOaXRybyBIRCddLFxuICAgICAgICAnTEctUDkzNic6IFsnTEcnLCAnT3B0aW11cyBMVEUnXSxcbiAgICAgICAgJ0xHLVA5NDAnOiBbJ0xHJywgJ1BSQURBIDMuMCddLFxuICAgICAgICAnTEctUDk3MCc6IFsnTEcnLCAnT3B0aW11cyBCbGFjayddLFxuICAgICAgICAnTEctUDk3MGgnOiBbJ0xHJywgJ09wdGltdXMgQmxhY2snXSxcbiAgICAgICAgJ0xHLVA5OTAnOiBbJ0xHJywgJ09wdGltdXMgMlggU3BlZWQnXSxcbiAgICAgICAgJ0xHLVA5OTBoJzogWydMRycsICdPcHRpbXVzIDJYIFNwZWVkJ10sXG4gICAgICAgICdMRy1QOTkwaE4nOiBbJ0xHJywgJ09wdGltdXMgMlggU3BlZWQnXSxcbiAgICAgICAgJ0xHLVA5OTBIJzogWydMRycsICdPcHRpbXVzIDJYIFNwZWVkJ10sXG4gICAgICAgICdMRy1QOTkzJzogWydMRycsICdPcHRpbXVzIDJYJ10sXG4gICAgICAgICdMRy1TVTU0MCc6IFsnTEcnLCAnUFJBREEgMy4wJ10sXG4gICAgICAgICdMRy1TVTY0MCc6IFsnTEcnLCAnT3B0aW11cyBMVEUnXSxcbiAgICAgICAgJ0xHLVNVNjYwJzogWydMRycsICdPcHRpbXVzIDJYJ10sXG4gICAgICAgICdMRy1TVTc2MCc6IFsnTEcnLCAnT3B0aW11cyAzRCddLFxuICAgICAgICAnTEctU1U3NjAtS3VzdCc6IFsnTEcnLCAnT3B0aW11cyAzRCddLFxuICAgICAgICAnTEctU1U4NzAnOiBbJ0xHJywgJ09wdGltdXMgM0QgQ3ViZSddLFxuICAgICAgICAnTEctU1U4ODAnOiBbJ0xHJywgJ09wdGltdXMgRVgnXSxcbiAgICAgICAgJ0xHLVVTNjcwJzogWydMRycsICdPcHRpbXVzIFUnXSxcbiAgICAgICAgJ0xHLVVTNzMwJzogWydMRycsICdVUzczMCddLFxuICAgICAgICAnTEctVjkwMCc6IFsnTEcnLCAnT3B0aW11cyBQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdMRy1WOTA1Uic6IFsnTEcnLCAnT3B0aW11cyBHLVNsYXRlJywgJ3RhYmxldCddLFxuICAgICAgICAnTEctVjkwOSc6IFsnTEcnLCAnT3B0aW11cyBHLVNsYXRlJywgJ3RhYmxldCddLFxuICAgICAgICAnTEctVk02NzAnOiBbJ0xHJywgJ09wdGltdXMgViddLFxuICAgICAgICAnTEctVk02OTYnOiBbJ0xHJywgJ09wdGltdXMgRWxpdGUnXSxcbiAgICAgICAgJ0xHLVZNNzAxJzogWydMRycsICdPcHRpbXVzIFNsaWRlciddLFxuICAgICAgICAnTEctVlM2NjAnOiBbJ0xHJywgJ1ZvcnRleCddLFxuICAgICAgICAnTEctVlM3MDAnOiBbJ0xHJywgJ0VubGlnaHRlbiddLFxuICAgICAgICAnTEctVlM3NDAnOiBbJ0xHJywgJ0FsbHknXSxcbiAgICAgICAgJ0xHLVZTODQwJzogWydMRycsICdDb25uZWN0IDRHJ10sXG4gICAgICAgICdMRy1WUzkxMCc6IFsnTEcnLCAnUmV2b2x1dGlvbiddLFxuICAgICAgICAnbGdwLTk3MCc6IFsnTEcnLCAnT3B0aW11cyBCbGFjayddLFxuICAgICAgICAnRTkwMCc6IFsnTEcnLCAnT3B0aW11cyA3J10sXG4gICAgICAgICdHVDU0MCc6IFsnTEcnLCAnT3B0aW11cyBHVDU0MCddLFxuICAgICAgICAnR1c2MjAnOiBbJ0xHJywgJ0dXNjIwJ10sXG4gICAgICAgICdLVTk1MDAnOiBbJ0xHJywgJ09wdGltdXMgWiddLFxuICAgICAgICAnTEdDNjYwJzogWydMRycsICdPcHRpbXVzIFBybyddLFxuICAgICAgICAnTEdMNDVDJzogWydMRycsICdPcHRpbXVzIE5ldCddLFxuICAgICAgICAnTEdMNTVDJzogWydMRycsICdPcHRpbXVzIFEnXSxcbiAgICAgICAgJ0xVMjMwMCc6IFsnTEcnLCAnT3B0aW11cyBRJ10sXG4gICAgICAgICdMUzY3MCc6IFsnTEcnLCAnT3B0aW11cyBTJ10sXG4gICAgICAgICdQOTQwJzogWydMRycsICdQUkFEQSAzLjAnXSxcbiAgICAgICAgJ1A5OTAnOiBbJ0xHJywgJ09wdGltdXMgMlggU3BlZWQnXSxcbiAgICAgICAgJ1VTQ0MtVVM3MzAnOiBbJ0xHJywgJ1VTNzMwJ10sXG4gICAgICAgICdVU0NDLVVTNzYwJzogWydMRycsICdHZW5lc2lzJ10sXG4gICAgICAgICdWTTY3MCc6IFsnTEcnLCAnT3B0aW11cyBWJ10sXG4gICAgICAgICdWUzg0MCA0Ryc6IFsnTEcnLCAnQ29ubmVjdCA0RyddLFxuICAgICAgICAnVlM5MDAtNEcnOiBbJ0xHJywgJ1ZTOTAwJ10sXG4gICAgICAgICdWUzkxMCA0Ryc6IFsnTEcnLCAnUmV2b2x1dGlvbiA0RyddLFxuICAgICAgICAnVlM5MjAgNEcnOiBbJ0xHJywgJ1NwZWN0cnVtIDRHJ10sXG4gICAgICAgICdWUzkzMCA0Ryc6IFsnTEcnLCAnVlM5MzAnXSxcbiAgICAgICAgJ1ZTOTUwIDRHJzogWydMRycsICdWUzk1MCddLFxuICAgICAgICAnTC0wMUQnOiBbJ0xHJywgJ09wdGltdXMgTFRFJ10sXG4gICAgICAgICdMLTAyRCc6IFsnTEcnLCAnUFJBREEgcGhvbmUnXSxcbiAgICAgICAgJ0wtMDRDJzogWydMRycsICdPcHRpbXVzIENoYXQnXSxcbiAgICAgICAgJ0wtMDVEJzogWydMRycsICdPcHRpbXVzIGl0J10sXG4gICAgICAgICdMLTA2Qyc6IFsnTEcnLCAnT3B0aW11cyBQYWQnLCAndGFibGV0J10sXG4gICAgICAgICdMLTA2RCc6IFsnTEcnLCAnT3B0aW11cyBWdSddLFxuICAgICAgICAnTC0wN0MnOiBbJ0xHJywgJ09wdGltdXMgQnJpZ2h0J10sXG4gICAgICAgICdMRy1FdmUnOiBbJ0xHJywgJ0V2ZSddLFxuICAgICAgICAnTEctT3B0aW11cyBPbmUgUDUwMCc6IFsnTEcnLCAnT3B0aW11cyBPbmUnXSxcbiAgICAgICAgJ0xHLU9wdGltdXMgMlgnOiBbJ0xHJywgJ09wdGltdXMgMlgnXSxcbiAgICAgICAgJ0xHLUdUNTQwIE9wdGltdXMnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ0xHLU9wdGltdXMgQmxhY2snOiBbJ0xHJywgJ09wdGltdXMgQmxhY2snXSxcbiAgICAgICAgJ0FsbHknOiBbJ0xHJywgJ0FsbHknXSxcbiAgICAgICAgJ09wdGltdXMnOiBbJ0xHJywgJ09wdGltdXMnXSxcbiAgICAgICAgJ09wdGltdXMgTWUnOiBbJ0xHJywgJ09wdGltdXMgTWUnXSxcbiAgICAgICAgJ29wdGltdXMgbWUgcDM1MCc6IFsnTEcnLCAnT3B0aW11cyBNZSddLFxuICAgICAgICAnT3B0aW11cyAyWCc6IFsnTEcnLCAnT3B0aW11cyAyWCddLFxuICAgICAgICAnT3B0aW11cyAyeCc6IFsnTEcnLCAnT3B0aW11cyAyWCddLFxuICAgICAgICAnSVMxMUxHJzogWydMRycsICdPcHRpbXVzIFgnXSxcbiAgICAgICAgJ1ZvcnRleCc6IFsnTEcnLCAnVm9ydGV4J10sXG4gICAgICAgICdMREstSUNLIHYxLjQnOiBbJ0xHJywgJ0VzdGVlbSddLFxuICAgICAgICAnVDYnOiBbJ01hbGF0YScsICdacGFkIFQ2JywgJ3RhYmxldCddLFxuICAgICAgICAnTWFsYXRhIFNNQkExMDAyJzogWydNYWxhdGEnLCAnVGFibGV0IFNNQi1BMTAwMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NUTTcxMkhDWic6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgNzEyYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NUTTgwM0hDJzogWydNZWRpYWNvbScsICdTbWFydFBhZCA4MTBjJywgJ3RhYmxldCddLFxuICAgICAgICAnTWVkaWFjb20gODEwQyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NtYXJ0cGFkODEwYyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NtYXJ0UGFkODEwYyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01QODEwQyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgODEwYycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01QOTA3Qyc6IFsnTWVkaWFjb20nLCAnU21hcnRQYWQgOTA3YycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01USzY1MTYnOiBbJ01lZGlhdGVrJywgJ01USzY1MTYnXSxcbiAgICAgICAgJ0xJRkVUQUIgUzk1MTInOiBbJ01lZGlvbicsICdMaWZldGFiIFM5NTEyJywgJ3RhYmxldCddLFxuICAgICAgICAnTElGRVRBQiBQOTUxNCc6IFsnTWVkaW9uJywgJ0xpZmV0YWIgUDk1MTQnLCAndGFibGV0J10sXG4gICAgICAgICdNRCBMSUZFVEFCIFA5NTE2JzogWydNZWRpb24nLCAnTGlmZXRhYiBQOTUxNicsICd0YWJsZXQnXSxcbiAgICAgICAgJ01FRElPTiBMSUZFIFA0MzEwJzogWydNZWRpb24nLCAnTGlmZSBQNDMxMCddLFxuICAgICAgICAnTTgnOiBbJ01laXp1JywgJ004J10sXG4gICAgICAgICdNOSc6IFsnTWVpenUnLCAnTTknXSxcbiAgICAgICAgJ00wNDAnOiBbJ01laXp1JywgJ00wNDAnXSxcbiAgICAgICAgJ005LXVubG9ja2VkJzogWydNZWl6dScsICdNOSddLFxuICAgICAgICAnbWVpenUgbTknOiBbJ01laXp1JywgJ005J10sXG4gICAgICAgICdNRUlaVSBNOSc6IFsnTWVpenUnLCAnTTknXSxcbiAgICAgICAgJ01FSVpVIE1YJzogWydNZWl6dScsICdNWCddLFxuICAgICAgICAnTTAzMCc6IFsnTWVpenUnLCAnTVggTTAzMCddLFxuICAgICAgICAnTTAzMSc6IFsnTWVpenUnLCAnTVggTTAzMSddLFxuICAgICAgICAnTTAzMic6IFsnTWVpenUnLCAnTVggTTAzMiddLFxuICAgICAgICAnU2xpZGVwYWQnOiBbJ01lbXVwJywgJ1NsaWRlcGFkJywgJ3RhYmxldCddLFxuICAgICAgICAnQTQ1JzogWydNaWNyb21heCcsICdBNDUgUHVuayddLFxuICAgICAgICAnTWljcm9tYXggQTUwJzogWydNaWNyb21heCcsICdBNTAgTmluamEnXSxcbiAgICAgICAgJ01pY3JvbWF4IEE2MCc6IFsnTWljcm9tYXgnLCAnQW5kcm8gQTYwJ10sXG4gICAgICAgICdNaWNyb21heCBBNzAnOiBbJ01pY3JvbWF4JywgJ0FuZHJvIEE3MCddLFxuICAgICAgICAnUDMwMChGdW5ib29rKSc6IFsnTWljcm9tYXgnLCAnRnVuYm9vayBQMzAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVQ3MzUnOiBbJ01vaW5zdG9uZScsICdBVDczNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0E4NTMnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSddLFxuICAgICAgICAnQTk1Myc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lIDInXSxcbiAgICAgICAgJ0ExNjgwJzogWydNb3Rvcm9sYScsICdNT1RPIEExNjgwJ10sXG4gICAgICAgICdFVDEnOiBbJ01vdG9yb2xhJywgJ0VUMSBFbnRlcnByaXNlIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ01CMjAwJzogWydNb3Rvcm9sYScsICdDTElRJ10sXG4gICAgICAgICdNQjMwMCc6IFsnTW90b3JvbGEnLCAnQkFDS0ZMSVAnXSxcbiAgICAgICAgJ01CNTAxJzogWydNb3Rvcm9sYScsICdDTElRIFhUJ10sXG4gICAgICAgICdNQjUwMic6IFsnTW90b3JvbGEnLCAnQ0hBUk0nXSxcbiAgICAgICAgJ01CNTExJzogWydNb3Rvcm9sYScsICdGTElQT1VUJ10sXG4gICAgICAgICdNQjUyMCc6IFsnTW90b3JvbGEnLCAnQlJBVk8nXSxcbiAgICAgICAgJ01CNTI1JzogWydNb3Rvcm9sYScsICdERUZZJ10sXG4gICAgICAgICdNQjUyNSsnOiBbJ01vdG9yb2xhJywgJ0RFRlknXSxcbiAgICAgICAgJ01CNTI1IGZvciBtZSc6IFsnTW90b3JvbGEnLCAnREVGWSddLFxuICAgICAgICAnTUI1MjYnOiBbJ01vdG9yb2xhJywgJ0RFRlkrJ10sXG4gICAgICAgICdNQjYxMSc6IFsnTW90b3JvbGEnLCAnQ0xJUSAyJ10sXG4gICAgICAgICdNQjYxMic6IFsnTW90b3JvbGEnLCAnWFBSVCddLFxuICAgICAgICAnTUI2MzInOiBbJ01vdG9yb2xhJywgJ1BSTysnXSxcbiAgICAgICAgJ01CODU1JzogWydNb3Rvcm9sYScsICdQSE9UT04gNEcnXSxcbiAgICAgICAgJ01CODYwJzogWydNb3Rvcm9sYScsICdBVFJJWCddLFxuICAgICAgICAnTUI4NjEnOiBbJ01vdG9yb2xhJywgJ0FUUklYJ10sXG4gICAgICAgICdtYjg2MSc6IFsnTW90b3JvbGEnLCAnQVRSSVgnXSxcbiAgICAgICAgJ01CODY1JzogWydNb3Rvcm9sYScsICdBVFJJWCAyJ10sXG4gICAgICAgICdNQjg3MCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWDInXSxcbiAgICAgICAgJ01CODg2JzogWydNb3Rvcm9sYScsICdESU5BUkEnXSxcbiAgICAgICAgJ01FNTAxJzogWydNb3Rvcm9sYScsICdDTElRIFhUJ10sXG4gICAgICAgICdNRTUxMSc6IFsnTW90b3JvbGEnLCAnRkxJUE9VVCddLFxuICAgICAgICAnbWU1MjUnOiBbJ01vdG9yb2xhJywgJ01PVE8gTUU1MjUnXSxcbiAgICAgICAgJ01lNTI1JzogWydNb3Rvcm9sYScsICdNT1RPIE1FNTI1J10sXG4gICAgICAgICdNRTUyNSc6IFsnTW90b3JvbGEnLCAnTU9UTyBNRTUyNSddLFxuICAgICAgICAnTUU1MjUrJzogWydNb3Rvcm9sYScsICdNT1RPIE1FNTI1J10sXG4gICAgICAgICdNRTYwMCc6IFsnTW90b3JvbGEnLCAnQkFDS0ZMSVAnXSxcbiAgICAgICAgJ01FNjMyJzogWydNb3Rvcm9sYScsICdQUk8rJ10sXG4gICAgICAgICdNRTcyMic6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lIDInXSxcbiAgICAgICAgJ01FODExJzogWydNb3Rvcm9sYScsICdEcm9pZCBYJ10sXG4gICAgICAgICdNRTg2MCc6IFsnTW90b3JvbGEnLCAnQVRSSVgnXSxcbiAgICAgICAgJ01FODYzJzogWydNb3Rvcm9sYScsICdNaWxlc3RvbmUgMyddLFxuICAgICAgICAnTUU4NjUnOiBbJ01vdG9yb2xhJywgJ0FUUklYIDInXSxcbiAgICAgICAgJ01UNjIwJzogWydNb3Rvcm9sYScsICdNT1RPIE1UNjIwJ10sXG4gICAgICAgICdNVDYyMHQnOiBbJ01vdG9yb2xhJywgJ01PVE8gTVQ2MjAnXSxcbiAgICAgICAgJ01UNzE2JzogWydNb3Rvcm9sYScsICdNT1RPIE1UNzE2J10sXG4gICAgICAgICdNVDgxMCc6IFsnTW90b3JvbGEnLCAnTU9UTyBNVDgxMCddLFxuICAgICAgICAnTVQ4NzAnOiBbJ01vdG9yb2xhJywgJ01PVE8gTVQ4NzAnXSxcbiAgICAgICAgJ01UOTE3JzogWydNb3Rvcm9sYScsICdNVDkxNyddLFxuICAgICAgICAnTVo1MDUnOiBbJ01vdG9yb2xhJywgJ1hPT00gRmFtaWx5IEVkaXRpb24nLCAndGFibGV0J10sXG4gICAgICAgICdNWjYwMCc6IFsnTW90b3JvbGEnLCAnWE9PTSA0RyBMVEUnLCAndGFibGV0J10sXG4gICAgICAgICdNWjYwMSc6IFsnTW90b3JvbGEnLCAnWE9PTSAzRycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjAyJzogWydNb3Rvcm9sYScsICdYT09NIDRHIExURScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjAzJzogWydNb3Rvcm9sYScsICdYT09NIDNHJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDQnOiBbJ01vdG9yb2xhJywgJ1hPT00gV2lGaScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjA1JzogWydNb3Rvcm9sYScsICdYT09NIDNHJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDYnOiBbJ01vdG9yb2xhJywgJ1hPT00gV2lGaScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjA3JzogWydNb3Rvcm9sYScsICdYT09NIDIgV2lGaSBNZWRpYSBFZGl0aW9uJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDknOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFhZQk9BUkQgOC4yJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MDkgNEcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFhZQk9BUkQgOC4yJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MTUnOiBbJ01vdG9yb2xhJywgJ1hPT00gMiBXaUZpJywgJ3RhYmxldCddLFxuICAgICAgICAnTVo2MTcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFhZQk9BUkQgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ01aNjE3IDRHJzogWydNb3Rvcm9sYScsICdEcm9pZCBYWUJPQVJEIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdXWDQzNSc6IFsnTW90b3JvbGEnLCAnVFJJVU1QSCBXWDQzNSddLFxuICAgICAgICAnV1g0NDUnOiBbJ01vdG9yb2xhJywgJ0NJVFJVUyBXWDQ0NSddLFxuICAgICAgICAnWFQzMDAnOiBbJ01vdG9yb2xhJywgJ1NQSUNFJ10sXG4gICAgICAgICdYVDMwMSc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDMwMSddLFxuICAgICAgICAnWFQzMTEnOiBbJ01vdG9yb2xhJywgJ0ZJUkUnXSxcbiAgICAgICAgJ1hUMzE2JzogWydNb3Rvcm9sYScsICdNT1RPIFhUMzE2J10sXG4gICAgICAgICdYVDMxOSc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDMxOSddLFxuICAgICAgICAnWFQzOTAnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQzOTAnXSxcbiAgICAgICAgJ1hUMzIwJzogWydNb3Rvcm9sYScsICdERUZZIE1pbmknXSxcbiAgICAgICAgJ1hUMzIxJzogWydNb3Rvcm9sYScsICdERUZZIE1pbmknXSxcbiAgICAgICAgJ1hUNTAwJzogWydNb3Rvcm9sYScsICdNT1RPIFhUNTAwJ10sXG4gICAgICAgICd4dC01MDAnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ1MDAnXSxcbiAgICAgICAgJ1hUNTAyJzogWydNb3Rvcm9sYScsICdRVUVOQ0ggWFQ1J10sXG4gICAgICAgICdYVDUzMCc6IFsnTW90b3JvbGEnLCAnRklSRSBYVCddLFxuICAgICAgICAnWFQ1MzEnOiBbJ01vdG9yb2xhJywgJ0ZJUkUgWFQnXSxcbiAgICAgICAgJ1hUNTMyJzogWydNb3Rvcm9sYScsICdYVDUzMiddLFxuICAgICAgICAnWFQ1MzUnOiBbJ01vdG9yb2xhJywgJ0RFRlknXSxcbiAgICAgICAgJ1hUNTUwJzogWydNb3Rvcm9sYScsICdYVDU1MCddLFxuICAgICAgICAnWFQ1NTYnOiBbJ01vdG9yb2xhJywgJ1hUNTU2J10sXG4gICAgICAgICdYVDYwMyc6IFsnTW90b3JvbGEnLCAnQURNSVJBTCddLFxuICAgICAgICAnWFQ2MTAnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFBybyddLFxuICAgICAgICAnWFQ2MTUnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ2MTUnXSxcbiAgICAgICAgJ1hUNjI2JzogWydNb3Rvcm9sYScsICdNT1RPIFhUNjI2J10sXG4gICAgICAgICdYVDY4MSc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDY4MSddLFxuICAgICAgICAnWFQ2ODInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDMnXSxcbiAgICAgICAgJ1hUNjg1JzogWydNb3Rvcm9sYScsICdNT1RPIFhUNjg1J10sXG4gICAgICAgICdYVDY4Nyc6IFsnTW90b3JvbGEnLCAnQVRSSVggVFYnXSxcbiAgICAgICAgJ1hUNzAxJzogWydNb3Rvcm9sYScsICdYVDcwMSddLFxuICAgICAgICAnWFQ3MDInOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ3MDInXSxcbiAgICAgICAgJ1hUNzExJzogWydNb3Rvcm9sYScsICdNT1RPIFhUNzExJ10sXG4gICAgICAgICdYVDcyMCc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lJ10sXG4gICAgICAgICdYVDg3NSc6IFsnTW90b3JvbGEnLCAnRHJvaWQgQmlvbmljJ10sXG4gICAgICAgICdYVDgwMCc6IFsnTW90b3JvbGEnLCAnTU9UTyBYVDgwMCddLFxuICAgICAgICAnWFQ4MDArJzogWydNb3Rvcm9sYScsICdNT1RPIFhUODAwJ10sXG4gICAgICAgICdYVDgwMFcnOiBbJ01vdG9yb2xhJywgJ01PVE8gR2xhbSddLFxuICAgICAgICAnWFQ4MDYnOiBbJ01vdG9yb2xhJywgJ01PVE8gWFQ4MDYnXSxcbiAgICAgICAgJ1hUODYwJzogWydNb3Rvcm9sYScsICdNaWxlc3RvbmUgMyddLFxuICAgICAgICAnWFQ4NjInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDMnXSxcbiAgICAgICAgJ1hUODgyJzogWydNb3Rvcm9sYScsICdNT1RPIFhUODgyJ10sXG4gICAgICAgICdYVDg4Myc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lIDMnXSxcbiAgICAgICAgJ1hUODg5JzogWydNb3Rvcm9sYScsICdYVDg4OSddLFxuICAgICAgICAnWFQ4OTcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDQnXSxcbiAgICAgICAgJ1hUOTAxJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdYVDkxMCc6IFsnTW90b3JvbGEnLCAnUkFaUiddLFxuICAgICAgICAnWFQ5MTBLJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdYVDkxMFMnOiBbJ01vdG9yb2xhJywgJ1JBWlInXSxcbiAgICAgICAgJ1hUOTEwIDRHJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdYVDkxMic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnWFQ5MjMnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFJBWlIgSEQnXSxcbiAgICAgICAgJ1hUOTI1JzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSIEhEJ10sXG4gICAgICAgICdYVDkyNic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnWFQ5MjYgNEcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFJBWlInXSxcbiAgICAgICAgJ1hUOTI4JzogWydNb3Rvcm9sYScsICdYVDkyOCddLFxuICAgICAgICAnQXRyaXggMic6IFsnTW90b3JvbGEnLCAnQVRSSVggMiddLFxuICAgICAgICAnQXRyaXggNGcnOiBbJ01vdG9yb2xhJywgJ0FUUklYIDRHJ10sXG4gICAgICAgICdBdHJpeCA0Ryc6IFsnTW90b3JvbGEnLCAnQVRSSVggNEcnXSxcbiAgICAgICAgJ0F0cml4IDRHIE1FODYwJzogWydNb3Rvcm9sYScsICdBVFJJWCA0RyddLFxuICAgICAgICAnQ0xJUSc6IFsnTW90b3JvbGEnLCAnQ0xJUSddLFxuICAgICAgICAnQ0xJUSBYVCc6IFsnTW90b3JvbGEnLCAnQ0xJUSBYVCddLFxuICAgICAgICAnQ0xJUTInOiBbJ01vdG9yb2xhJywgJ0NMSVEgMiddLFxuICAgICAgICAnQ29ydmFpcic6IFsnTW90b3JvbGEnLCAnQ29ydmFpcicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0RFRlknOiBbJ01vdG9yb2xhJywgJ0RFRlknXSxcbiAgICAgICAgJ0RlZnkrJzogWydNb3Rvcm9sYScsICdERUZZKyddLFxuICAgICAgICAnRGVmeSBQbHVzJzogWydNb3Rvcm9sYScsICdERUZZKyddLFxuICAgICAgICAnRGV2b3VyJzogWydNb3Rvcm9sYScsICdEZXZvdXInXSxcbiAgICAgICAgJ0RleHQnOiBbJ01vdG9yb2xhJywgJ0RleHQnXSxcbiAgICAgICAgJ0Ryb2lkJzogWydNb3Rvcm9sYScsICdEcm9pZCddLFxuICAgICAgICAnRFJPSUQnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkJ10sXG4gICAgICAgICdEUk9JRDInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDInXSxcbiAgICAgICAgJ0RST0lEMiBHTE9CQUwnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDInXSxcbiAgICAgICAgJ0RST0lEMiBHbG9iYWwnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDInXSxcbiAgICAgICAgJ0Ryb2lkMkdsb2JhbCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgMiddLFxuICAgICAgICAnRFJPSUQgMic6IFsnTW90b3JvbGEnLCAnRHJvaWQgMiddLFxuICAgICAgICAnRFJPSUQzJzogWydNb3Rvcm9sYScsICdEcm9pZCAzJ10sXG4gICAgICAgICdEUk9JRDQnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIDQnXSxcbiAgICAgICAgJ0RST0lENCA0Ryc6IFsnTW90b3JvbGEnLCAnRHJvaWQgNCddLFxuICAgICAgICAnRFJPSUQgUHJvJzogWydNb3Rvcm9sYScsICdEcm9pZCBQcm8nXSxcbiAgICAgICAgJ0RST0lEIEJJT05JQyc6IFsnTW90b3JvbGEnLCAnRHJvaWQgQmlvbmljJ10sXG4gICAgICAgICdEUk9JRCBCSU9OSUMgNEcnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIEJpb25pYyddLFxuICAgICAgICAnRFJPSUQgQklPTklDIFhUODc1IDRHJzogWydNb3Rvcm9sYScsICdEcm9pZCBCaW9uaWMnXSxcbiAgICAgICAgJ0RST0lEUkFaUic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRHJvaWQgUmF6cic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRFJPSUQgUkFaUic6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRFJPSUQgUkFaUiA0Ryc6IFsnTW90b3JvbGEnLCAnRHJvaWQgUkFaUiddLFxuICAgICAgICAnRFJPSUQgU1BZREVSJzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSJ10sXG4gICAgICAgICdEUk9JRCBSQVpSIEhEJzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSIEhEJ10sXG4gICAgICAgICdEUk9JRCBSQVpSIEhEIDRHJzogWydNb3Rvcm9sYScsICdEcm9pZCBSQVpSIEhEJ10sXG4gICAgICAgICdEcm9pZFgnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFgnXSxcbiAgICAgICAgJ0RST0lEWCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnZHJvaWQgeCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnRHJvaWQgWCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnRFJPSUQgWCc6IFsnTW90b3JvbGEnLCAnRHJvaWQgWCddLFxuICAgICAgICAnRFJPSUQgWDInOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFgyJ10sXG4gICAgICAgICdFbGVjdHJpZnknOiBbJ01vdG9yb2xhJywgJ0VsZWN0cmlmeSddLFxuICAgICAgICAnTWlsZXN0b25lIFhUNzIwJzogWydNb3Rvcm9sYScsICdNaWxlc3RvbmUnXSxcbiAgICAgICAgJ01pbGVzdG9uZSBYdDcyMCc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lJ10sXG4gICAgICAgICdNaWxlc3RvbmUnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSddLFxuICAgICAgICAnQTg1MyBNaWxlc3RvbmUnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSddLFxuICAgICAgICAnTWlsZXN0b25lIFgnOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSBYJ10sXG4gICAgICAgICdNaWxlc3RvbmUgWDInOiBbJ01vdG9yb2xhJywgJ01pbGVzdG9uZSBYMiddLFxuICAgICAgICAnTW90b3JvaVgnOiBbJ01vdG9yb2xhJywgJ0Ryb2lkIFgnXSxcbiAgICAgICAgJ01vdG8gQmFja2ZsaXAnOiBbJ01vdG9yb2xhJywgJ0JBQ0tGTElQJ10sXG4gICAgICAgICdSQVpSJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdUcml1bXBoJzogWydNb3Rvcm9sYScsICdUUklVTVBIJ10sXG4gICAgICAgICdPcHVzIE9uZSc6IFsnTW90b3JvbGEnLCAnaTEnXSxcbiAgICAgICAgJ1Bob3Rvbic6IFsnTW90b3JvbGEnLCAnUEhPVE9OJ10sXG4gICAgICAgICdQaG90b24gNEcnOiBbJ01vdG9yb2xhJywgJ1BIT1RPTiA0RyddLFxuICAgICAgICAnWE9PTSc6IFsnTW90b3JvbGEnLCAnWE9PTScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1hvb20nOiBbJ01vdG9yb2xhJywgJ1hPT00nLCAndGFibGV0J10sXG4gICAgICAgICdYT09NIDInOiBbJ01vdG9yb2xhJywgJ1hPT00gMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1hPT00gMiBNRSc6IFsnTW90b3JvbGEnLCAnWE9PTSAyJywgJ3RhYmxldCddLFxuICAgICAgICAnWE9PTSBNWjYwNic6IFsnTW90b3JvbGEnLCAnWE9PTSBXaUZpJywgJ3RhYmxldCddLFxuICAgICAgICAnSVNXMTFNJzogWydNb3Rvcm9sYScsICdQSE9UT04nXSxcbiAgICAgICAgJ0lTMTJNJzogWydNb3Rvcm9sYScsICdSQVpSJ10sXG4gICAgICAgICdNT1RXWDQzNUtUJzogWydNb3Rvcm9sYScsICdUUklVTVBIJ10sXG4gICAgICAgICdYMy1JY2UgTUlVSSBYVDcyMCBNZW1vcmlsYSBDbGFzc2ljcyc6IFsnTW90b3JvbGEnLCAnTWlsZXN0b25lJ10sXG4gICAgICAgICdOQUJJLUEnOiBbJ05hYmknLCAnS2lkcyB0YWJsZXQnLCAndGFibGV0J10sXG4gICAgICAgICdOZXdwYWQnOiBbJ05ld3NteScsICdOZXdwYWQnLCAndGFibGV0J10sXG4gICAgICAgICdOZXdwYWQtSzk3JzogWydOZXdzbXknLCAnTmV3cGFkIEs5NycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05ld3BhZCBQOSc6IFsnTmV3c215JywgJ05ld3BhZCBQOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ00tUEFEIE44JzogWydOZXdzbXknLCAnTS1wYWQgTjgnLCAndGFibGV0J10sXG4gICAgICAgICdMVC1OQTcnOiBbJ05FQycsICdMVC1OQTcnXSxcbiAgICAgICAgJ04tMDFEJzogWydORUMnLCAnTUVESUFTIFBQIE4tMDFEJ10sXG4gICAgICAgICdOLTA0Qyc6IFsnTkVDJywgJ01FRElBUyBOLTA0QyddLFxuICAgICAgICAnTi0wNEQnOiBbJ05FQycsICdNRURJQVMgTFRFIE4tMDREJ10sXG4gICAgICAgICdOLTA1RCc6IFsnTkVDJywgJ01FRElBUyBFUyBOLTA1RCddLFxuICAgICAgICAnTi0wNkMnOiBbJ05FQycsICdNRURJQVMgV1AgTi0wNkMnXSxcbiAgICAgICAgJ04tMDZEJzogWydORUMnLCAnTUVESUFTIFRhYiBOLTA2RCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ04tMDdEJzogWydORUMnLCAnTUVESUFTIFggTi0wN0QnXSxcbiAgICAgICAgJzEwMU4nOiBbJ05FQycsICdNRURJQVMgQ0ggU29mdGJhbmsgMTAxTiddLFxuICAgICAgICAnSVMxMU4nOiBbJ05FQycsICdNRURJQVMgQlIgSVMxMU4nXSxcbiAgICAgICAgJ05leGlhbiBOWC1BODkwJzogWydOZXhpYW4nLCAnSm91cm5leSddLFxuICAgICAgICAnTlgtQTg5MSc6IFsnTmV4aWFuJywgJ1VsdHJhIEpvdXJuZXknXSxcbiAgICAgICAgJ003MjZIQyc6IFsnTmV4dGJvb2snLCAnUHJlbWl1bSA3JywgJ2VyZWFkZXInXSxcbiAgICAgICAgJ05YTTcyNkhOJzogWydOZXh0Ym9vaycsICdQcmVtaXVtIDcnLCAnZXJlYWRlciddLFxuICAgICAgICAnTlhNODAzSEQnOiBbJ05leHRib29rJywgJ1ByZW1pdW0gOCcsICdlcmVhZGVyJ10sXG4gICAgICAgICdEQVRBTTgwM0hDJzogWydOZXh0Ym9vaycsICdQcmVtaXVtIDgnLCAnZXJlYWRlciddLFxuICAgICAgICAnTlhNOTAxJzogWydOZXh0Ym9vaycsICdOZXh0IDMnLCAnZXJlYWRlciddLFxuICAgICAgICAnTkdNIFZhbml0eSBTbWFydCc6IFsnTkdNJywgJ1Zhbml0eSBTbWFydCddLFxuICAgICAgICAnTm9raWEgTjknOiBbJ05va2lhJywgJ045J10sXG4gICAgICAgICdOb2tpYSBOOTAwJzogWydOb2tpYScsICdOOTAwJ10sXG4gICAgICAgICdMdW1pYTgwMCc6IFsnTm9raWEnLCAnTHVtaWEgODAwJ10sXG4gICAgICAgICdMdW1pYSA5MDAnOiBbJ05va2lhJywgJ0x1bWlhIDkwMCddLFxuICAgICAgICAnTm90aW9uIEluayBBREFNJzogWydOb3Rpb24gSW5rJywgJ0FEQU0nLCAndGFibGV0J10sXG4gICAgICAgICdQNEQgU0lSSVVTJzogWydOdnNibCcsICdQNEQgU0lSSVVTJywgJ3RhYmxldCddLFxuICAgICAgICAnUDREIFNpcml1cyc6IFsnTnZzYmwnLCAnUDREIFNJUklVUycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0VGTTcxMEEnOiBbJ09ibGlvJywgJ01pbnQgN3gnLCAndGFibGV0J10sXG4gICAgICAgICdPRFlTLVhwcmVzcyc6IFsnT2R5cycsICdYcHJlc3MnLCAndGFibGV0J10sXG4gICAgICAgICdPbGl2ZXR0aSBPbGlwYWQgMTAwJzogWydPbGl2ZXR0aScsICdPbGlwYWQgMTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnT1AxMTAnOiBbJ09saXZldHRpJywgJ09saXBhZCAxMTAnLCAndGFibGV0J10sXG4gICAgICAgICdPTkRBIE1JRCc6IFsnT25kYScsICdNSUQnLCAndGFibGV0J10sXG4gICAgICAgICdWWDU4MEEnOiBbJ09uZGEnLCAnVlg1ODBBJywgJ3RhYmxldCddLFxuICAgICAgICAnVlg2MTBBJzogWydPbmRhJywgJ1ZYNjEwQScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RRMTUwJzogWydPbmRhJywgJ1RRMTUwJ10sXG4gICAgICAgICdOMlQnOiBbJ09OTicsICdOMlQnLCAndGFibGV0J10sXG4gICAgICAgICdSZW5lc2FzJzogWydPcGFkJywgJ1JlbmVzYXMnLCAndGFibGV0J10sXG4gICAgICAgICdyZW5lc2FzIGVtZXYnOiBbJ09wYWQnLCAnUmVuZXNhcycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1g5MDMnOiBbJ09wcG8nLCAnRmluZCBNZSBYOTAzJ10sXG4gICAgICAgICdYOTA1JzogWydPcHBvJywgJ0ZpbmQgMyBYOTA1J10sXG4gICAgICAgICdSODA1JzogWydPcHBvJywgJ1I4MDUnXSxcbiAgICAgICAgJ1I4MDEnOiBbJ09wcG8nLCAnUjgwMSddLFxuICAgICAgICAnUjgxMSc6IFsnT3BwbycsICdSODExJ10sXG4gICAgICAgICdYOTA5JzogWydPcHBvJywgJ1g5MDknXSxcbiAgICAgICAgJ09QUE9SODAxJzogWydPcHBvJywgJ1I4MDEnXSxcbiAgICAgICAgJ09QUE9YOTA1JzogWydPcHBvJywgJ0ZpbmQgMyBYOTA1J10sXG4gICAgICAgICdPUFBPWDkwNyc6IFsnT3BwbycsICdGaW5kIDMgWDkwNyddLFxuICAgICAgICAnWDkwNyc6IFsnT3BwbycsICdGaW5kIDMgWDkwNyddLFxuICAgICAgICAnWDkwMTUnOiBbJ09wcG8nLCAnRmluZCBYOTAxNSddLFxuICAgICAgICAnT1BQT1g5MDE3JzogWydPcHBvJywgJ0ZpbmRlciBYOTAxNyddLFxuICAgICAgICAnT1BQT1U3MDEnOiBbJ09wcG8nLCAnT1BQT1U3MDEnXSxcbiAgICAgICAgJ09QUE9SODA3JzogWydPcHBvJywgJ1JlYWwgUjgwNyddLFxuICAgICAgICAnT1BQT1I4MDUnOiBbJ09wcG8nLCAnUmVhbCBSODA1J10sXG4gICAgICAgICdSODA3JzogWydPcHBvJywgJ1JlYWwgUjgwNyddLFxuICAgICAgICAnT1BQT1Q3MDMnOiBbJ09wcG8nLCAnVDcwMyddLFxuICAgICAgICAnUC0wMUQnOiBbJ1BhbmFzb25pYycsICdQLTAxRCddLFxuICAgICAgICAnUC0wMkQnOiBbJ1BhbmFzb25pYycsICdMdW1peCBQaG9uZSddLFxuICAgICAgICAnUC0wNEQnOiBbJ1BhbmFzb25pYycsICdFbHVnYSddLFxuICAgICAgICAnUC0wN0MnOiBbJ1BhbmFzb25pYycsICdQLTA3QyddLFxuICAgICAgICAnZEwxJzogWydQYW5hc29uaWMnLCAnRWx1Z2EgZEwxJ10sXG4gICAgICAgICcxMDFQJzogWydQYW5hc29uaWMnLCAnTHVtaXggUGhvbmUnXSxcbiAgICAgICAgJ0pULUg1ODBWVCc6IFsnUGFuYXNvbmljJywgJ0JpelBhZCA3JywgJ3RhYmxldCddLFxuICAgICAgICAnSlQtSDU4MVZUJzogWydQYW5hc29uaWMnLCAnQml6UGFkIDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnRlotQTFBJzogWydQYW5hc29uaWMnLCAnVG91Z2hwYWQnLCAndGFibGV0J10sXG4gICAgICAgICdwYW5kaWdpdGFsOWhyJzogWydQYW5kaWdpdGFsJywgJzlIUicsICd0YWJsZXQnXSxcbiAgICAgICAgJ3BhbmRpZ2l0YWw5aHIyJzogWydQYW5kaWdpdGFsJywgJzlIUjInLCAndGFibGV0J10sXG4gICAgICAgICdwYW5kaWdpdGFsb3BjMSc6IFsnUGFuZGlnaXRhbCcsICdPUEMxJywgJ3RhYmxldCddLFxuICAgICAgICAncGFuZGlnaXRhbG9wcDEnOiBbJ1BhbmRpZ2l0YWwnLCAnT1BQMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ3BhbmRpZ2l0YWxwMWhyJzogWydQYW5kaWdpdGFsJywgJ3AxaHInLCAndGFibGV0J10sXG4gICAgICAgICdJTS1BNjAwUyc6IFsnUGFudGVjaCcsICdTSVJJVVMgXFx1MDBjM1xcdWZmZmRcXHUwMGMyXFx1MDBiMSddLFxuICAgICAgICAnSU0tQTYzMEsnOiBbJ1BhbnRlY2gnLCAnU0tZIEl6YXInXSxcbiAgICAgICAgJ0lNLUE2OTBMJzogWydQYW50ZWNoJywgJ1NLWSddLFxuICAgICAgICAnSU0tQTY5MFMnOiBbJ1BhbnRlY2gnLCAnU0tZJ10sXG4gICAgICAgICdJTS1BNzEwSyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBYcHJlc3MnXSxcbiAgICAgICAgJ0lNLUE3MjBMJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFhwcmVzcyddLFxuICAgICAgICAnSU0tQTcyNUwnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgWCsnXSxcbiAgICAgICAgJ0lNLUE3MzBzJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFMnXSxcbiAgICAgICAgJ0lNLUE3MzBTJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFMnXSxcbiAgICAgICAgJ0lNLUE3NTBLJzogWydQYW50ZWNoJywgJ1NLWSBNaXJhY2ggQSddLFxuICAgICAgICAnSU0tQTc2MFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXInXSxcbiAgICAgICAgJ0lNLUE3NzBLJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIFJhY2VyJ10sXG4gICAgICAgICdJTS1BNzgwTCc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBSYWNlciddLFxuICAgICAgICAnSU0tQTgwMFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgTFRFJ10sXG4gICAgICAgICdJTS1BODEwSyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBMVEUgTSddLFxuICAgICAgICAnSU0tQTgxMFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgTFRFIE0nXSxcbiAgICAgICAgJ0lNLUE4MjBMJzogWydQYW50ZWNoJywgJ1NLWSBWZWdhIExURSBFWCddLFxuICAgICAgICAnSU0tQTgzMEsnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXIgMiddLFxuICAgICAgICAnSU0tQTgzMEwnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXIgMiddLFxuICAgICAgICAnSU0tQTgzMFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUmFjZXIgMiddLFxuICAgICAgICAnSU0tQTg0MFMnOiBbJ1BhbnRlY2gnLCAnU0tZIFZlZ2EgUzUnXSxcbiAgICAgICAgJ0lNLUE4NTBLJzogWydQYW50ZWNoJywgJ0lNLUE4NTBLJ10sXG4gICAgICAgICdJTS1UMTAwSyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSBOby4gNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0lTMDYnOiBbJ1BhbnRlY2gnLCAnU0lSSVVTIFxcdTAwYzNcXHVmZmZkXFx1MDBjMlxcdTAwYjEnXSxcbiAgICAgICAgJ0FEUjg5OTUnOiBbJ1BhbnRlY2gnLCAnQnJlYWtvdXQnXSxcbiAgICAgICAgJ0FEUjg5OTUgNEcnOiBbJ1BhbnRlY2gnLCAnQnJlYWtvdXQnXSxcbiAgICAgICAgJ0FEUjkxMEwgNEcnOiBbJ1BhbnRlY2gnLCAnQURSOTEwTCddLFxuICAgICAgICAnUGFudGVjaFA0MTAwJzogWydQYW50ZWNoJywgJ0VsZW1lbnQnLCAndGFibGV0J10sXG4gICAgICAgICdQYW50ZWNoUDgwMDAnOiBbJ1BhbnRlY2gnLCAnQ3Jvc3NvdmVyJ10sXG4gICAgICAgICdQYW50ZWNoUDgwMTAnOiBbJ1BhbnRlY2gnLCAnUDgwMTAnXSxcbiAgICAgICAgJ1BhbnRlY2hQOTA2MCc6IFsnUGFudGVjaCcsICdQb2NrZXQnXSxcbiAgICAgICAgJ1BhbnRlY2hQOTA3MCc6IFsnUGFudGVjaCcsICdCdXJzdCddLFxuICAgICAgICAnU0tZIElNLUE2MDBTJzogWydQYW50ZWNoJywgJ1NJUklVUyBcXHUwMGMzXFx1ZmZmZFxcdTAwYzJcXHUwMGIxJ10sXG4gICAgICAgICdTS1kgSU0tQTYzMEsnOiBbJ1BhbnRlY2gnLCAnU0tZIEl6YXInXSxcbiAgICAgICAgJ1NLWSBJTS1BNjUwUyc6IFsnUGFudGVjaCcsICdTS1kgVmVnYSddLFxuICAgICAgICAnSVMxMVBUJzogWydQYW50ZWNoJywgJ01pcmFjaCBJUzExUFQnXSxcbiAgICAgICAgJ1BBVDcxMlcnOiBbJ1BlcmZlbycsICdQQVQ3MTJXJywgJ3RhYmxldCddLFxuICAgICAgICAnWDdHJzogWydQZWFybCcsICdUb3VjaGxldCBYN0cnLCAndGFibGV0J10sXG4gICAgICAgICdGV1M4MTAnOiBbJ1BISUNPTU0nLCAnRldTODEwJ10sXG4gICAgICAgICdQaGlsaXBzIFBJNTAwMCc6IFsnUGhpbGlwcycsICdQSTUwMDAnLCAndGFibGV0J10sXG4gICAgICAgICdQSTcwMDAnOiBbJ1BoaWxpcHMnLCAnUEk3MDAwJywgJ3RhYmxldCddLFxuICAgICAgICAnUGhpbGlwcyBXNjI2JzogWydQaGlsaXBzJywgJ1c2MjYnXSxcbiAgICAgICAgJ1BoaWxpcHMgVzYzMic6IFsnUGhpbGlwcycsICdXNjMyJ10sXG4gICAgICAgICdNT01PJzogWydQbG95ZXInLCAnTU9NTycsICd0YWJsZXQnXSxcbiAgICAgICAgJ01PTU8xNSc6IFsnUGxveWVyJywgJ01PTU8xNScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1BvY2tldEJvb2sgQTcnOiBbJ1BvY2tldEJvb2snLCAnQTcnLCAndGFibGV0J10sXG4gICAgICAgICdQb2NrZXRCb29rIEExMCc6IFsnUG9ja2V0Qm9vaycsICdBMTAnLCAndGFibGV0J10sXG4gICAgICAgICdNb2JpaSA3JzogWydQb2ludCBPZiBWaWV3JywgJ01vYmlpIDcnLCAndGFibGV0J10sXG4gICAgICAgICdQTVAzMzg0QlJVJzogWydQcmVzdGlnaW8nLCAnTXVsdGlwYWQgMzM4NCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RCMDdGVEEnOiBbJ1Bvc2l0aXZvJywgJ1RCMDdGVEEnLCAndGFibGV0J10sXG4gICAgICAgICdRVyBUQi0xMjA3JzogWydRd2FyZScsICdQcm8zJywgJ3RhYmxldCddLFxuICAgICAgICAnVzZIRCBJQ1MnOiBbJ1JhbW9zJywgJ1c2SEQnLCAndGFibGV0J10sXG4gICAgICAgICd3MTAnOiBbJ1JhbW9zJywgJ1cxMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1cxMCc6IFsnUmFtb3MnLCAnVzEwJywgJ3RhYmxldCddLFxuICAgICAgICAndzEwIHYyLjAnOiBbJ1JhbW9zJywgJ1cxMCB2Mi4wJywgJ3RhYmxldCddLFxuICAgICAgICAnVzEwIFYyLjAnOiBbJ1JhbW9zJywgJ1cxMCB2Mi4wJywgJ3RhYmxldCddLFxuICAgICAgICAnVDExQUQnOiBbJ1JhbW9zJywgJ1QxMUFEJywgJ3RhYmxldCddLFxuICAgICAgICAnVDExQUQuRkUnOiBbJ1JhbW9zJywgJ1QxMUFEJywgJ3RhYmxldCddLFxuICAgICAgICAnUGxheUJvb2snOiBbJ1JJTScsICdCbGFja0JlcnJ5IFBsYXlCb29rJywgJ3RhYmxldCddLFxuICAgICAgICAnUkJLLTQ5MCc6IFsnUml0bWl4JywgJ1JCSy00OTAnLCAndGFibGV0J10sXG4gICAgICAgICdBOEhEJzogWydTYWF5aScsICdEcm9wYWQgQThIRCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVM3NTY4JzogWydTYW1zdW5nJywgJ1M3NTY4J10sXG4gICAgICAgICdHYWxheHkgTmV4dXMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5leHVzJ10sXG4gICAgICAgICdHVC1CNTMzMCc6IFsnU2Ftc3VuZycsICdHVC1CNTMzMCddLFxuICAgICAgICAnR1QtQjU1MTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgUHJvJ10sXG4gICAgICAgICdHVC1CNTUxMEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgUHJvJ10sXG4gICAgICAgICdHVC1CNTUxMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgUHJvJ10sXG4gICAgICAgICdHVC1CNTUxMic6IFsnU2Ftc3VuZycsICdHYWxheHkgWSBQcm8gRHVvcyddLFxuICAgICAgICAnR1QtQjc1MTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBybyddLFxuICAgICAgICAnR1QtQjc1MTBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQcm8nXSxcbiAgICAgICAgJ0dULUk1NTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1J10sXG4gICAgICAgICdHVC1JNTUwMEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDUnXSxcbiAgICAgICAgJ0dULUk1NTAwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgNSddLFxuICAgICAgICAnR1QtSTU1MDBNJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1J10sXG4gICAgICAgICdHVC1JNTUwMC1NUjMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDUnXSxcbiAgICAgICAgJ0dULUk1NTAzJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1J10sXG4gICAgICAgICdHVC1JNTUwOCc6IFsnU2Ftc3VuZycsICdHYWxheHkgNSddLFxuICAgICAgICAnR1QtSTU1MTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDU1MSddLFxuICAgICAgICAnR1QtSTU1MTBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSA1NTEnXSxcbiAgICAgICAgJ0dULUk1NTEwTSc6IFsnU2Ftc3VuZycsICdHYWxheHkgNTUxJ10sXG4gICAgICAgICdHVC1JNTUxMFQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IDU1MSddLFxuICAgICAgICAnR1QtSTU3MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFNwaWNhJ10sXG4gICAgICAgICdHVC1JNTcwMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFNwaWNhJ10sXG4gICAgICAgICdHVC1JNTgwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgQXBvbGxvJ10sXG4gICAgICAgICdHVC1JNTgwMEQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFwb2xsbyddLFxuICAgICAgICAnR1QtSTU4MDBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBcG9sbG8nXSxcbiAgICAgICAgJ0dULUk1ODAxJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBcG9sbG8nXSxcbiAgICAgICAgJ0dULUk2NTAwVSc6IFsnU2Ftc3VuZycsICdTYXR1cm4nXSxcbiAgICAgICAgJ0dULUk4MDAwJzogWydTYW1zdW5nJywgJ09tbmlhIDInXSxcbiAgICAgICAgJ0dULUk4MTUwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBXJ10sXG4gICAgICAgICdHVC1JODE1MEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFcnXSxcbiAgICAgICAgJ0dULUk4MTYwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgMiddLFxuICAgICAgICAnR1QtSTgxNjBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgMiddLFxuICAgICAgICAnR1QtSTgxNjBQJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgMiddLFxuICAgICAgICAnR1QtSTgzMjAnOiBbJ1NhbXN1bmcnLCAnSDEnXSxcbiAgICAgICAgJ0dULUk4NTIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBCZWFtJ10sXG4gICAgICAgICdHVC1JODUzMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgQmVhbSddLFxuICAgICAgICAnR1QtSTgyNTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEJlYW0nXSxcbiAgICAgICAgJ0dULWk5MDAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyddLFxuICAgICAgICAnR1QtSTkwMDBCJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgVmlicmFudCddLFxuICAgICAgICAnR1QtSTkwMDBUJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBQbHVzJ10sXG4gICAgICAgICdHVC1JOTAwMyc6IFsnU2Ftc3VuZycsICdHYWxheHkgU0wnXSxcbiAgICAgICAgJ0dULUk5MDAzTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgU0wnXSxcbiAgICAgICAgJ0dULUk5MDA4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHVC1JOTAwOEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMnXSxcbiAgICAgICAgJ0dULUk5MDEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEdpb3JnaW8gQXJtYW5pJ10sXG4gICAgICAgICdHVC1JOTAxOCc6IFsnU2Ftc3VuZycsICdHYWxheHkgR1QtSTkwMTgnXSxcbiAgICAgICAgJ0dULUk5MDcwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEFkdmFuY2UnXSxcbiAgICAgICAgJ0dULUk5MDcwUCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBBZHZhbmNlJ10sXG4gICAgICAgICdHVC1JOTA4Mic6IFsnU2Ftc3VuZycsICdHYWxheHkgR3JhbmQgRFVPUyddLFxuICAgICAgICAnR1QtSTkwODgnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMnXSxcbiAgICAgICAgJ0dULWk5MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdHVC1JOTEwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnR1QtSTkxMDBHJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdHVC1JOTEwME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ0dULUk5MTAwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnR1QtSTkxMDBQJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdHVC1JOTEwMyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUiddLFxuICAgICAgICAnR1QtSTkxMDgnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ0dULUk5MjEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJIExURSddLFxuICAgICAgICAnR1QtSTkyMTBUJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJIExURSddLFxuICAgICAgICAnR1QtSTkyMjAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ0dULUk5MjI4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdHVC1JOTI1MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ0dULUk5MjUwIEVVUiBYWCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ0dULUk5MjYwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQcmVtaWVyJ10sXG4gICAgICAgICdHVC1JOTMwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0dULUk5MzAwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0dULUk5MzAzVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0dULUk5MzA4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnR1QtSTk1MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEdULUk5NTAwJ10sXG4gICAgICAgICdHVC1JOTgwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgR1QtSTk4MDAnXSxcbiAgICAgICAgJ0dULU43MDAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdHVC1ONzAwMEInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ0dULU43MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlIElJJ10sXG4gICAgICAgICdHVC1ONzEwMic6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBJSSddLFxuICAgICAgICAnR1QtTjgwMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUgMTAuMSddLFxuICAgICAgICAnR1QtTjgwMTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUgMTAuMSddLFxuICAgICAgICAnR1QtUDEwMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAxMDAwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDEwMDBNJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QMTAwME4nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAxMDAwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDEwMDAgVGFibGV0JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QMTAxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDMxMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAyICg3LjApJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDMxMDBCJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoNy4wKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAzMTEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoNy4wKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVAzMTEzJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoNy4wKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA1MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMiAoMTAuMSknLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNTExMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDIgKDEwLjEpJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDUxMTMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAyICgxMC4xKScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2MjAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNjIwMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjAgUGx1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2MjAxJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMgTicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2MjEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNjIxMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuMCBQbHVzIE4nLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNjgwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA2ODEwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy43JywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDcxMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xVicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3MzAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgOC45JywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDczMDBCJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgOC45JywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDczMTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA4LjknLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzMyMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3MzIwVCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3NTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3NTAwRCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzUwMFInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUDc1MDBWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dULVA3NTAxJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMU4nLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzUxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdHVC1QNzUxMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjFOJywgJ3RhYmxldCddLFxuICAgICAgICAnR1QtUzUzMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBvY2tldCddLFxuICAgICAgICAnR1QtUzUzNjAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFknXSxcbiAgICAgICAgJ0dULVM1MzYwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnR1QtUzUzNjBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBZJ10sXG4gICAgICAgICdHVC1TNTM2Myc6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnR1QtUzUzNjcnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgVFYnXSxcbiAgICAgICAgJ0dULVM1MzY4JzogWydTYW1zdW5nJywgJ0dULVM1MzY4J10sXG4gICAgICAgICdHVC1TNTM2OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnR1QtUzU1NzAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmknXSxcbiAgICAgICAgJ0dULVM1NTcwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgTWluaSddLFxuICAgICAgICAnR1QtUzU1NzBJJzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pJ10sXG4gICAgICAgICdHVC1TNTU3MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmknXSxcbiAgICAgICAgJ0dULVM1NTc4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pJ10sXG4gICAgICAgICdHVC1TNTY2MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgR2lvJ10sXG4gICAgICAgICdHVC1TNTY2ME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEdpbyddLFxuICAgICAgICAnR1QtUzU2NjBWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBHaW8nXSxcbiAgICAgICAgJ0dULVM1NjcwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBGaXQnXSxcbiAgICAgICAgJ0dULVM1NjcwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgRml0J10sXG4gICAgICAgICdHVC1TNTY3MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEZpdCddLFxuICAgICAgICAnR1QtUzU2OTAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFhjb3ZlciddLFxuICAgICAgICAnR1QtUzU2OTBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBYY292ZXInXSxcbiAgICAgICAgJ0dULVM1ODIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwQic6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlJ10sXG4gICAgICAgICdHVC1TNTgzMEMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnR1QtUzU4MzBEJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwRC1wYXJyb3QnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnR1QtUzU4MzBpJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODMwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlJ10sXG4gICAgICAgICdHVC1TNTgzME0nOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnR1QtUzU4MzBUJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODM4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UnXSxcbiAgICAgICAgJ0dULVM1ODM5aSc6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlJ10sXG4gICAgICAgICdHVC1TNjEwMic6IFsnU2Ftc3VuZycsICdHYWxheHkgWSBEdW9zJ10sXG4gICAgICAgICdHVC1TNjEwMkInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFkgRHVvcyddLFxuICAgICAgICAnR1QtUzY1MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmkgMiddLFxuICAgICAgICAnR1QtUzY1MDBEJzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pIDInXSxcbiAgICAgICAgJ0dULVM2NzAyJzogWydTYW1zdW5nJywgJ0dULVM2NzAyJ10sXG4gICAgICAgICdHVC1TNjgwMic6IFsnU2Ftc3VuZycsICdHYWxheHkgQWNlIER1b3MnXSxcbiAgICAgICAgJ0dULVM3NTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgUGx1cyddLFxuICAgICAgICAnR1QtUzc1MDBMJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgUGx1cyddLFxuICAgICAgICAnR1QtUzc1MDBXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBY2UgUGx1cyddLFxuICAgICAgICAnR1QtVDk1OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBWaWJyYW50J10sXG4gICAgICAgICdTQ0gtaTUwOSc6IFsnU2Ftc3VuZycsICdHYWxheHkgWSddLFxuICAgICAgICAnU0NILWk1NTknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBvcCddLFxuICAgICAgICAnU0NILWk1NjknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEdpbyddLFxuICAgICAgICAnU0NILWk1NzknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnU0NILWk1ODknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSBEdW9zJ10sXG4gICAgICAgICdTQ0gtaTcwNSA0Ryc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDIgKDcuMCknLCAndGFibGV0J10sXG4gICAgICAgICdTQ0gtaTgwOSc6IFsnU2Ftc3VuZycsICdTQ0gtaTgwOSddLFxuICAgICAgICAnU0NILWk4ODknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ1NDSC1pOTA5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdTQ0gtaTkxOSc6IFsnU2Ftc3VuZycsICdTQ0gtaTkxOSddLFxuICAgICAgICAnU0NILWk5MjknOiBbJ1NhbXN1bmcnLCAnU0NILWk5MjknXSxcbiAgICAgICAgJ1NDSC1JMTAwJzogWydTYW1zdW5nJywgJ0dlbSddLFxuICAgICAgICAnU0NILUkxMTAnOiBbJ1NhbXN1bmcnLCAnSWxsdXNpb24nXSxcbiAgICAgICAgJ1NDSC1JNDAwJzogWydTYW1zdW5nJywgJ0NvbnRpbnV1bSddLFxuICAgICAgICAnU0NILUk0MDUnOiBbJ1NhbXN1bmcnLCAnU3RyYXRvc3BoZXJlJ10sXG4gICAgICAgICdTQ0gtSTQwNSA0Ryc6IFsnU2Ftc3VuZycsICdTdHJhdG9zcGhlcmUnXSxcbiAgICAgICAgJ1NDSC1JNTAwJzogWydTYW1zdW5nJywgJ0Zhc2NpbmF0ZSddLFxuICAgICAgICAnU0NILUk1MTAnOiBbJ1NhbXN1bmcnLCAnU3RlYWx0aCBWJ10sXG4gICAgICAgICdTQ0gtSTUxMCA0Ryc6IFsnU2Ftc3VuZycsICdEcm9pZCBDaGFyZ2UnXSxcbiAgICAgICAgJ1NDSC1JNTE1JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOZXh1cyddLFxuICAgICAgICAnU0NILUk1MzUnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUlJJ10sXG4gICAgICAgICdTQ0gtSTUzNSA0Ryc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NDSC1JNjE5JzogWydTYW1zdW5nJywgJ1NDSC1JNjE5J10sXG4gICAgICAgICdTQ0gtSTY5OSc6IFsnU2Ftc3VuZycsICdTQ0gtSTY5OSddLFxuICAgICAgICAnU0NILUk3NzknOiBbJ1NhbXN1bmcnLCAnU0NILUk3NzknXSxcbiAgICAgICAgJ1NDSC1JODAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wJywgJ3RhYmxldCddLFxuICAgICAgICAnU0NILUk4MTUnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjcnLCAndGFibGV0J10sXG4gICAgICAgICdTQ0gtSTgxNSA0Ryc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDSC1JOTA1JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDSC1JOTA1IDRHJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDSC1JOTA5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdTQ0gtSTkxNSc6IFsnU2Ftc3VuZycsICdTQ0gtSTkxNSddLFxuICAgICAgICAnU0NILUk5MzknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUlJJ10sXG4gICAgICAgICdTQ0gtTTgyOEMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByZWNlZGVudCddLFxuICAgICAgICAnU0NILU04MjhDYXJyYXkoOTA5NjQ4MzQ0OSknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByZWNlZGVudCddLFxuICAgICAgICAnU0NILVI1MzBVJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnU0NILVI2ODAnOiBbJ1NhbXN1bmcnLCAnUmVwcCddLFxuICAgICAgICAnU0NILVI3MjAnOiBbJ1NhbXN1bmcnLCAnQWRtaXJlJ10sXG4gICAgICAgICdTQ0gtUjczMCc6IFsnU2Ftc3VuZycsICdUcmFuc2ZpeCddLFxuICAgICAgICAnU0NILVI3NjAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ1NDSC1SODIwJzogWydTYW1zdW5nJywgJ1NDSC1SODIwJ10sXG4gICAgICAgICdTQ0gtUjg4MCc6IFsnU2Ftc3VuZycsICdBY2NsYWltJ10sXG4gICAgICAgICdTQ0gtUjkxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgSW5kdWxnZSA0RyddLFxuICAgICAgICAnU0NILVI5MTUnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEluZHVsZ2UnXSxcbiAgICAgICAgJ1NDSC1SOTIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBBdHRhaW4gNEcnXSxcbiAgICAgICAgJ1NDSC1SOTMwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEF2aWF0b3InXSxcbiAgICAgICAgJ1NDSC1SOTQwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIExpZ2h0cmF5J10sXG4gICAgICAgICdTQ0gtUzcyMEMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByb2NsYWltJ10sXG4gICAgICAgICdTQ0gtUzczNUMnOiBbJ1NhbXN1bmcnLCAnU0NILVM3MzUnXSxcbiAgICAgICAgJ1NDSC1XODk5JzogWydTYW1zdW5nJywgJ1NDSC1XODk5J10sXG4gICAgICAgICdTQ0gtVzk5OSc6IFsnU2Ftc3VuZycsICdTQ0gtVzk5OSddLFxuICAgICAgICAnU0dILUk1NDcnOiBbJ1NhbXN1bmcnLCAnU0dILUk1NDcnXSxcbiAgICAgICAgJ1NHSC1JNzE3JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdTR0gtSTcxN0QnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ1NHSC1JNzE3TSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSddLFxuICAgICAgICAnU0dILUk3MTdSJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdTR0gtSTcyNyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSBTa3lyb2NrZXQnXSxcbiAgICAgICAgJ1NHSC1pNzI3Uic6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnU0dILUk3MjdSJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTR0gtSTc0Nyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NHSC1JNzQ3TSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NHSC1JNzQ4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnU0dILUk3NTcnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgU2t5cm9ja2V0IEhEJ10sXG4gICAgICAgICdTR0gtSTc3Nyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnU0dILUk5Nzc3JzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTR0gtSTg5Nic6IFsnU2Ftc3VuZycsICdDYXB0aXZhdGUnXSxcbiAgICAgICAgJ1NHSC1JODk3JzogWydTYW1zdW5nJywgJ0NhcHRpdmF0ZSddLFxuICAgICAgICAnU0dILUk5MjcnOiBbJ1NhbXN1bmcnLCAnQ2FwdGl2YXRlIEdsaWRlJ10sXG4gICAgICAgICdTR0gtSTkyN1InOiBbJ1NhbXN1bmcnLCAnQ2FwdGl2YXRlIEdsaWRlJ10sXG4gICAgICAgICdTR0gtSTk1Nyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTU3RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTU3TSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTU3Uic6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1JOTg3JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wJywgJ3RhYmxldCddLFxuICAgICAgICAnU0dILUk5OTcnOiBbJ1NhbXN1bmcnLCAnSW5mdXNlIDRHJ10sXG4gICAgICAgICdTR0gtSTk5N1InOiBbJ1NhbXN1bmcnLCAnSW5mdXNlIDRHJ10sXG4gICAgICAgICdTR0gtSTkwMDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMnXSxcbiAgICAgICAgJ1NHSC1TNzMwRyc6IFsnU2Ftc3VuZycsICdTR0gtUzczMCddLFxuICAgICAgICAnU0dILVQ0OTknOiBbJ1NhbXN1bmcnLCAnRGFydCddLFxuICAgICAgICAnU0dILVQ0OTlWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBNaW5pJ10sXG4gICAgICAgICdTR0gtVDQ5OVknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE1pbmknXSxcbiAgICAgICAgJ1NHSC1UNTg5JzogWydTYW1zdW5nJywgJ0dyYXZpdHkgU21hcnQnXSxcbiAgICAgICAgJ1NHSC1UNTg5Uic6IFsnU2Ftc3VuZycsICdHcmF2aXR5IFNtYXJ0J10sXG4gICAgICAgICdTR0gtVDY3OSc6IFsnU2Ftc3VuZycsICdFeGhpYml0IElJIDRHJ10sXG4gICAgICAgICdTR0gtVDY3OU0nOiBbJ1NhbXN1bmcnLCAnRXhoaWJpdCBJSSA0RyddLFxuICAgICAgICAnU0dILVQ3NTknOiBbJ1NhbXN1bmcnLCAnRXhoaWJpdCA0RyddLFxuICAgICAgICAnU0dILVQ3NjknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgQmxhemUgNEcnXSxcbiAgICAgICAgJ1NHSC1UODM5JzogWydTYW1zdW5nJywgJ1QtTW9iaWxlIFNpZGVraWNrJ10sXG4gICAgICAgICdTR0gtVDg0OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDcuMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1UODU5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NHSC1UODY5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgNy4wIFBsdXMnLCAndGFibGV0J10sXG4gICAgICAgICdTR0gtVDg3OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSddLFxuICAgICAgICAnU0dILVQ5NTknOiBbJ1NhbXN1bmcnLCAnVmlicmFudCddLFxuICAgICAgICAnU0dILVQ5NTlEJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEZhc2NpbmF0ZSAzRysnXSxcbiAgICAgICAgJ1NHSC1UOTU5UCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBGYXNjaW5hdGUgNEcnXSxcbiAgICAgICAgJ1NHSC1UOTU5Vic6IFsnU2Ftc3VuZycsICdHYWxheHkgUyA0RyddLFxuICAgICAgICAnU0dILVQ5ODknOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ1NHSC1UOTg5RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSBYJ10sXG4gICAgICAgICdTR0gtVDk5OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBCbGF6ZSA0RyddLFxuICAgICAgICAnU0dILVQ5OTlWJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIEJsYXplIDRHJ10sXG4gICAgICAgICdTSFYtRTEyMEsnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgSEQgTFRFJ10sXG4gICAgICAgICdTSFYtRTEyMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgSEQgTFRFJ10sXG4gICAgICAgICdTSFYtRTEyMFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgSEQgTFRFJ10sXG4gICAgICAgICdTSFYtRTExMFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgTFRFJ10sXG4gICAgICAgICdTSFYtRTE0MFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA4LjknLCAndGFibGV0J10sXG4gICAgICAgICdTSFYtRTE1MFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjcnLCAndGFibGV0J10sXG4gICAgICAgICdTSFYtRTE2MEsnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5vdGUnXSxcbiAgICAgICAgJ1NIVi1FMTYwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBMVEUnXSxcbiAgICAgICAgJ1NIVi1FMTYwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBMVEUnXSxcbiAgICAgICAgJ1NIVi1FMTcwSyc6IFsnU2Ftc3VuZycsICdTSFYtRTE3MEsnXSxcbiAgICAgICAgJ1NIVi1FMTcwTCc6IFsnU2Ftc3VuZycsICdTSFYtRTE3MEwnXSxcbiAgICAgICAgJ1NIVi1FMjEwSyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NIVi1FMjEwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NIVi1FMjEwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NIVy1NMTAwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgQSddLFxuICAgICAgICAnU0hXLU0xMTBTJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdTSFctTTEzMEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFUnXSxcbiAgICAgICAgJ1NIVy1NMTMwSyc6IFsnU2Ftc3VuZycsICdHYWxheHkgSyddLFxuICAgICAgICAnU0hXLU0xODBLJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdTSFctTTE4MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMTgwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiJywgJ3RhYmxldCddLFxuICAgICAgICAnU0hXLU0xODBXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdTSFctTTE4NVMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMTkwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBIb3BwaW4nXSxcbiAgICAgICAgJ1NIVy1NMjIwTCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmVvJ10sXG4gICAgICAgICdTSFctTTI0MFMnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IEFjZSddLFxuICAgICAgICAnU0hXLU0yNTBLJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTSFctTTI1MEwnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUknXSxcbiAgICAgICAgJ1NIVy1NMjUwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnU0hXLU0zMDBXJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMzA1Vyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDguOScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMzQwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTSBTdHlsZSddLFxuICAgICAgICAnU0hXLU0zODBLJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWIgMTAuMScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NIVy1NMzgwUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgVGFiIDEwLjEnLCAndGFibGV0J10sXG4gICAgICAgICdTSFctTTM4MFcnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xJywgJ3RhYmxldCddLFxuICAgICAgICAnU0hXLU00NDBTJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJSSddLFxuICAgICAgICAnU01ULWk5MTAwJzogWydTYW1zdW5nJywgJ1NNVC1JOTEwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NQSC1ENjAwJzogWydTYW1zdW5nJywgJ0NvbnF1ZXIgNEcnXSxcbiAgICAgICAgJ1NQSC1ENzAwJzogWydTYW1zdW5nJywgJ0VwaWMgNEcnXSxcbiAgICAgICAgJ1NQSC1ENzA1JzogWydTYW1zdW5nJywgJ0VwaWMgNEcgMiddLFxuICAgICAgICAnU1BILUQ3MTAnOiBbJ1NhbXN1bmcnLCAnRXBpYyA0RyBUb3VjaCddLFxuICAgICAgICAnU1BILUw3MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IE5leHVzJ10sXG4gICAgICAgICdTUEgtTDcxMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ1NQSC1NODIwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQcmV2YWlsJ10sXG4gICAgICAgICdTUEgtTTgyMC1CU1QnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFByZXZhaWwnXSxcbiAgICAgICAgJ1NQSC1NNTgwJzogWydTYW1zdW5nJywgJ1JlcGxlbmlzaCddLFxuICAgICAgICAnU1BILU05MDAnOiBbJ1NhbXN1bmcnLCAnTW9tZW50J10sXG4gICAgICAgICdTUEgtTTkxMCc6IFsnU2Ftc3VuZycsICdJbnRlcmNlcHQnXSxcbiAgICAgICAgJ1NQSC1NOTIwJzogWydTYW1zdW5nJywgJ1RyYW5zZm9ybSddLFxuICAgICAgICAnU1BILU05MzAnOiBbJ1NhbXN1bmcnLCAnVHJhbnNmb3JtIFVsdHJhJ10sXG4gICAgICAgICdTUEgtTTkzMEJTVCc6IFsnU2Ftc3VuZycsICdUcmFuc2Zvcm0gVWx0cmEnXSxcbiAgICAgICAgJ1NQSC1QMTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdZUC1HQjEnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFBsYXllcicsICdtZWRpYSddLFxuICAgICAgICAnWVAtR0I3MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUGxheWVyIDcwJywgJ21lZGlhJ10sXG4gICAgICAgICdZUC1HQjcwRCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUGxheWVyIDcwIFBsdXMnLCAnbWVkaWEnXSxcbiAgICAgICAgJ1lQLUdTMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBXaUZpIDMuNicsICdtZWRpYSddLFxuICAgICAgICAnWVAtRzEnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgV2lGaSA0LjAnLCAnbWVkaWEnXSxcbiAgICAgICAgJ1lQLUdJMSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBXaUZpIDQuMicsICdtZWRpYSddLFxuICAgICAgICAnWVAtRzUwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBQbGF5ZXInLCAnbWVkaWEnXSxcbiAgICAgICAgJ1lQLUc3MCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBXaUZpIDUuMCcsICdtZWRpYSddLFxuICAgICAgICAnR1Q5MTAwJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdJODk3JzogWydTYW1zdW5nJywgJ0NhcHRpdmF0ZSddLFxuICAgICAgICAnSTc1MDAnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5J10sXG4gICAgICAgICdJOTAwMCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyddLFxuICAgICAgICAnVDk1OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBWaWJyYW50J10sXG4gICAgICAgICdDYXB0aXZhdGUtSTg5Nyc6IFsnU2Ftc3VuZycsICdDYXB0aXZhdGUnXSxcbiAgICAgICAgJ0dhbGF4eSc6IFsnU2Ftc3VuZycsICdHYWxheHknXSxcbiAgICAgICAgJ0dhbGF4eSBOb3RlJzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlJ10sXG4gICAgICAgICdHYWxheHlTJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTJ10sXG4gICAgICAgICdHYWxheHkgUyBJSSc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSddLFxuICAgICAgICAnR2FsYXh5IFgnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFgnXSxcbiAgICAgICAgJ0dhbGF4eSBTcGljYSc6IFsnU2Ftc3VuZycsICdHYWxheHkgU3BpY2EnXSxcbiAgICAgICAgJ0dBTEFYWSBUYWInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0dBTEFYWSBORVhVUyc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ1ZpYnJhbnRtdGQnOiBbJ1NhbXN1bmcnLCAnVmlicmFudCddLFxuICAgICAgICAnU0MtMDFDJzogWydTYW1zdW5nJywgJ0dhbGF4eSBUYWInLCAndGFibGV0J10sXG4gICAgICAgICdTQy0wMUQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiAxMC4xIExURScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDLTAyQic6IFsnU2Ftc3VuZycsICdHYWxheHkgUyddLFxuICAgICAgICAnU0MtMDJDJzogWydTYW1zdW5nJywgJ0dhbGF4eSBTIElJJ10sXG4gICAgICAgICdTQy0wMkQnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRhYiA3LjAgUGx1cycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1NDLTAzRCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSSBMVEUnXSxcbiAgICAgICAgJ1NDLTA0RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTmV4dXMnXSxcbiAgICAgICAgJ1NDLTA1RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBMVEUnXSxcbiAgICAgICAgJ1NDLTA2RCc6IFsnU2Ftc3VuZycsICdHYWxheHkgUyBJSUknXSxcbiAgICAgICAgJ0lTVzExU0MnOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFMgSUkgV2lNQVgnXSxcbiAgICAgICAgJ0dULVM3NTYyJzogWydTYW1zdW5nJywgJ0dULVM3NTYyJ10sXG4gICAgICAgICdHVC1TNzU2MmknOiBbJ1NhbXN1bmcnLCAnR1QtUzc1NjJpJ10sXG4gICAgICAgICdBMDFTSCc6IFsnU2hhcnAnLCAnQTAxU0gnXSxcbiAgICAgICAgJ0lTMDEnOiBbJ1NoYXJwJywgJ0lTMDEnXSxcbiAgICAgICAgJ0lTMDMnOiBbJ1NoYXJwJywgJ0lTMDMnXSxcbiAgICAgICAgJ0lTMDUnOiBbJ1NoYXJwJywgJ0lTMDUnXSxcbiAgICAgICAgJ0lTMTFTSCc6IFsnU2hhcnAnLCAnQXF1b3MgSVMxMVNIJ10sXG4gICAgICAgICdJUzEyU0gnOiBbJ1NoYXJwJywgJ0FxdW9zIElTMTJTSCddLFxuICAgICAgICAnSVMxM1NIJzogWydTaGFycCcsICdBcXVvcyBJUzEzU0gnXSxcbiAgICAgICAgJ0lTMTRTSCc6IFsnU2hhcnAnLCAnQXF1b3MgSVMxNFNIJ10sXG4gICAgICAgICdJU1cxNlNIJzogWydTaGFycCcsICdBcXVvcyBJU1cxNlNIJ10sXG4gICAgICAgICdFQi1XNTFHSic6IFsnU2hhcnAnLCAnRUItVzUxR0onXSxcbiAgICAgICAgJ1NCTTAwM1NIJzogWydTaGFycCcsICdHYWxhcGFnb3MnXSxcbiAgICAgICAgJ1NCTTAwNVNIJzogWydTaGFycCcsICdHYWxhcGFnb3MnXSxcbiAgICAgICAgJ1NCTTAwNlNIJzogWydTaGFycCcsICdBcXVvcyddLFxuICAgICAgICAnU0JNMDA3U0gnOiBbJ1NoYXJwJywgJ0FxdW9zIDAwN1NIJ10sXG4gICAgICAgICdTQk0wMDlTSCc6IFsnU2hhcnAnLCAnQXF1b3MgMDA5U0gnXSxcbiAgICAgICAgJ1NCTTEwMlNIJzogWydTaGFycCcsICdBcXVvcyAxMDJTSCddLFxuICAgICAgICAnU0JNMTAzU0gnOiBbJ1NoYXJwJywgJ0FxdW9zIDEwM1NIJ10sXG4gICAgICAgICdTQk0xMDRTSCc6IFsnU2hhcnAnLCAnQXF1b3MgMTA0U0gnXSxcbiAgICAgICAgJ1NCTTEwN1NIJzogWydTaGFycCcsICdBcXVvcyAxMDdTSCddLFxuICAgICAgICAnU0JNMTA3U0hCJzogWydTaGFycCcsICdBcXVvcyAxMDdTSCddLFxuICAgICAgICAnU0gtMDFEJzogWydTaGFycCcsICdBcXVvcyBTSC0wMUQnXSxcbiAgICAgICAgJ1NILTAyRCc6IFsnU2hhcnAnLCAnQXF1b3Mgc2xpZGVyIFNILTAyRCddLFxuICAgICAgICAnU0gtMDNDJzogWydTaGFycCcsICdMeW54IDNEJ10sXG4gICAgICAgICdTSC0wNkQnOiBbJ1NoYXJwJywgJ0FxdW9zIFNILTA2RCddLFxuICAgICAgICAnU0gtMDlEJzogWydTaGFycCcsICdBcXVvcyBaZXRhIFNILTA5RCddLFxuICAgICAgICAnU0gtMTBCJzogWydTaGFycCcsICdMeW54J10sXG4gICAgICAgICdTSC0xMkMnOiBbJ1NoYXJwJywgJ0FxdW9zJ10sXG4gICAgICAgICdTSC0xM0MnOiBbJ1NoYXJwJywgJ0FxdW9zIGYgU0gtMTNDJ10sXG4gICAgICAgICdTSDgwRic6IFsnU2hhcnAnLCAnQXF1b3MgU0g4MEYnXSxcbiAgICAgICAgJ1NINzJ4OFUnOiBbJ1NoYXJwJywgJ1NINzJ4OFUnXSxcbiAgICAgICAgJ1NIODExOFUnOiBbJ1NoYXJwJywgJ1NIODExOFUnXSxcbiAgICAgICAgJ1NIODEyOFUnOiBbJ1NoYXJwJywgJ1NIODEyOFUnXSxcbiAgICAgICAgJ1NIODE1OFUnOiBbJ1NoYXJwJywgJ1NIODE1OFUnXSxcbiAgICAgICAgJ1NIODE4OFUnOiBbJ1NoYXJwJywgJ1NIODE4OFUnXSxcbiAgICAgICAgJ1NIODI2OFUnOiBbJ1NoYXJwJywgJ1NIODI2OFUnXSxcbiAgICAgICAgJ0lORk9CQVIgQzAxJzogWydTaGFycCcsICdJTkZPQkFSIEMwMSddLFxuICAgICAgICAnU1BYLTUnOiBbJ1NpbXZhbGxleScsICdTUFgtNSddLFxuICAgICAgICAnU1BYLTUgM0cnOiBbJ1NpbXZhbGxleScsICdTUFgtNSAzRyddLFxuICAgICAgICAnU21hcnRRIEc3JzogWydTbWFydFEnLCAnRzcnLCAndGFibGV0J10sXG4gICAgICAgICdTbWFydFFUNyc6IFsnU21hcnRRJywgJ1Q3JywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDEwJzogWydTbWFydFEnLCAnVDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDE1JzogWydTbWFydFEnLCAnVDE1JywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDE5JzogWydTbWFydFEnLCAnVDE5JywgJ3RhYmxldCddLFxuICAgICAgICAnU21hcnRRVDIwJzogWydTbWFydFEnLCAnVDIwJywgJ3RhYmxldCddLFxuICAgICAgICAnT01TMSA2JzogWydTb255IEVyaWNzc29uJywgJ0E4aSddLFxuICAgICAgICAnRTEwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmknXSxcbiAgICAgICAgJ0UxMGknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxMCBNaW5pJ10sXG4gICAgICAgICdFMTBpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmknXSxcbiAgICAgICAgJ0UxNSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDgnXSxcbiAgICAgICAgJ0UxNWEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdFMTVpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYOCddLFxuICAgICAgICAnRTE1aXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdFMTVpLW8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdFMTZpJzogWydTb255IEVyaWNzc29uJywgJ1c4IFdhbGttYW4nXSxcbiAgICAgICAgJ0xUMTFpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBOZW8gViddLFxuICAgICAgICAnTFQxNSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE1YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE1aSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE1aXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIEFyYyddLFxuICAgICAgICAnTFQxNWktbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdMVDE4YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjIFMnXSxcbiAgICAgICAgJ0xUMThpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBcmMgUyddLFxuICAgICAgICAnTFQxOGl2JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBcmMgUyddLFxuICAgICAgICAnTFQxOGktbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjIFMnXSxcbiAgICAgICAgJ0xUMjJpJzogWydTb255JywgJ1hwZXJpYSBQJ10sXG4gICAgICAgICdMVDI2aSc6IFsnU29ueScsICdYcGVyaWEgUyddLFxuICAgICAgICAnTFQyNmlpJzogWydTb255JywgJ1hwZXJpYSBTJ10sXG4gICAgICAgICdMVDI2aS1vJzogWydTb255JywgJ1hwZXJpYSBTJ10sXG4gICAgICAgICdMVDI4YXQnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnTFQyOGgnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnTFQyOGknOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnTFQyOWknOiBbJ1NvbnknLCAnWHBlcmlhIEdYJ10sXG4gICAgICAgICdTb255TFQyOWknOiBbJ1NvbnknLCAnWHBlcmlhIEdYJ10sXG4gICAgICAgICdTb255TFQzMGEnOiBbJ1NvbnknLCAnWHBlcmlhIE1pbnQnXSxcbiAgICAgICAgJ1NvbnlMVDMwcCc6IFsnU29ueScsICdYcGVyaWEgTWludCddLFxuICAgICAgICAnTUsxNmEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBybyddLFxuICAgICAgICAnTUsxNmknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBybyddLFxuICAgICAgICAnTVQxMWEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdNVDExaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvIFYnXSxcbiAgICAgICAgJ01UMTFpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvIFYnXSxcbiAgICAgICAgJ01UMTFpLW8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdNVDE1YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdNVDE1aSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdNVDE1aXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyddLFxuICAgICAgICAnTVQxNWktbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdNVDI1aSc6IFsnU29ueScsICdYcGVyaWEgTmVvIEwnXSxcbiAgICAgICAgJ01UMjdpJzogWydTb255JywgJ1hwZXJpYSBTb2xhJ10sXG4gICAgICAgICdSODAwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnUjgwMGknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBsYXknXSxcbiAgICAgICAgJ1I4MDBpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnUjgwMGF0JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBQbGF5J10sXG4gICAgICAgICdSODAweCc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnU0sxN2EnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmkgUHJvJ10sXG4gICAgICAgICdTSzE3aSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSBQcm8nXSxcbiAgICAgICAgJ1NLMTdpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSBQcm8nXSxcbiAgICAgICAgJ1NLMTdpLW8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmkgUHJvJ10sXG4gICAgICAgICdTVDE1YSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSddLFxuICAgICAgICAnU1QxNWknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmknXSxcbiAgICAgICAgJ1NUMTdhJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBY3RpdmUnXSxcbiAgICAgICAgJ1NUMTdpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBY3RpdmUnXSxcbiAgICAgICAgJ1NUMThhJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1NUMThpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1NUMThpdic6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUmF5J10sXG4gICAgICAgICdTVDE4YXYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFJheSddLFxuICAgICAgICAnU29ueVNUMjEnOiBbJ1NvbnknLCAnXFwnVGFwaW9jYVxcJyddLFxuICAgICAgICAnU29ueVNUMjFpJzogWydTb255JywgJ1xcJ1RhcGlvY2FcXCcnXSxcbiAgICAgICAgJ1NvbnlTVDIxYTInOiBbJ1NvbnknLCAnXFwnVGFwaW9jYVxcJyddLFxuICAgICAgICAnU1QyMSc6IFsnU29ueScsICdcXCdUYXBpb2NhXFwnJ10sXG4gICAgICAgICdTVDIxaSc6IFsnU29ueScsICdcXCdUYXBpb2NhXFwnJ10sXG4gICAgICAgICdTb255U1QyM2knOiBbJ1NvbnknLCAnXFwnVGFwaW9jYSBEU1xcJyddLFxuICAgICAgICAnU1QyNWknOiBbJ1NvbnknLCAnWHBlcmlhIFUnXSxcbiAgICAgICAgJ1NUMjdpJzogWydTb255JywgJ1hwZXJpYSBHbyddLFxuICAgICAgICAnVTIwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmkgUHJvJ10sXG4gICAgICAgICdVMjBpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSBQcm8nXSxcbiAgICAgICAgJ1UyMGl2JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSBQcm8nXSxcbiAgICAgICAgJ1dUMTNpJzogWydTb255IEVyaWNzc29uJywgJ01peCBXYWxrbWFuJ10sXG4gICAgICAgICdXVDE4aSc6IFsnU29ueSBFcmljc3NvbicsICdXYWxrbWFuJ10sXG4gICAgICAgICdXVDE5YSc6IFsnU29ueSBFcmljc3NvbicsICdMaXZlIHdpdGggV2Fsa21hbiddLFxuICAgICAgICAnV1QxOWknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnTGl2ZSB3aXRoIFdhbGttYW4nXSxcbiAgICAgICAgJ1dUMTlpdic6IFsnU29ueSBFcmljc3NvbicsICdMaXZlIHdpdGggV2Fsa21hbiddLFxuICAgICAgICAnWDgnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFg4J10sXG4gICAgICAgICdYMTAnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxMCddLFxuICAgICAgICAnWDEwYSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwJ10sXG4gICAgICAgICdYMTBpJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAnXSxcbiAgICAgICAgJ1gxMGl2JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAnXSxcbiAgICAgICAgJ1gxMFMnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxMCddLFxuICAgICAgICAnWDEwbWluaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwIE1pbmknXSxcbiAgICAgICAgJ1gxMCBNaW5pJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSddLFxuICAgICAgICAnWDEwIE1pbmkgUHJvJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAgTWluaSBQcm8nXSxcbiAgICAgICAgJ1oxaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnUzUxU0UnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE1pbmknXSxcbiAgICAgICAgJ0lTMTFTJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBBY3JvJ10sXG4gICAgICAgICdJUzEyUyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQWNybyBIRCddLFxuICAgICAgICAnU08tMDFCJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYMTAnXSxcbiAgICAgICAgJ1NPLTAxQyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdTTy0wMUQnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFBsYXknXSxcbiAgICAgICAgJ1NPLTAyQyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQWNybyddLFxuICAgICAgICAnU08tMDJEJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBOWCddLFxuICAgICAgICAnU08tMDNDJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1NPLTAzRCc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQWNybyBIRCddLFxuICAgICAgICAnU08tMDREJzogWydTb255JywgJ1hwZXJpYSBHWCddLFxuICAgICAgICAnU08tMDVEJzogWydTb255JywgJ1hwZXJpYSBTWCddLFxuICAgICAgICAnWFBFUklBIFg4JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYOCddLFxuICAgICAgICAnWHBlcmlhIFg4JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBYOCddLFxuICAgICAgICAnWHBlcmlhIFgxMCc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgWDEwJ10sXG4gICAgICAgICdYcGVyaWEgcmF5JzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBSYXknXSxcbiAgICAgICAgJ1hwZXJpYSBSYXknOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFJheSddLFxuICAgICAgICAnWHBlcmlhIEFyYyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgQXJjJ10sXG4gICAgICAgICdYcGVyaWEgTWluaSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTWluaSddLFxuICAgICAgICAnWHBlcmlhIG5lbyc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgTmVvJ10sXG4gICAgICAgICdYcGVyaWEgTmVvJzogWydTb255IEVyaWNzc29uJywgJ1hwZXJpYSBOZW8nXSxcbiAgICAgICAgJ1hQRVJJQSBORU8nOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyddLFxuICAgICAgICAnWHBlcmlhIE5lb1YnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdYcGVyaWEgTmVvIFYnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIE5lbyBWJ10sXG4gICAgICAgICdYcGVyaWEgUGxheSc6IFsnU29ueSBFcmljc3NvbicsICdYcGVyaWEgUGxheSddLFxuICAgICAgICAnU29ueSBFcmljc3NvbiBYcGVyaWEgWDEnOiBbJ1NvbnkgRXJpY3Nzb24nLCAnWHBlcmlhIFgxJ10sXG4gICAgICAgICdTb255SGF5YWJ1c2EnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnSGF5YWJ1c2EnOiBbJ1NvbnknLCAnWHBlcmlhIElvbiddLFxuICAgICAgICAnbm96b21pJzogWydTb255JywgJ1hwZXJpYSBTJ10sXG4gICAgICAgICdTb255IFRhYmxldCBQJzogWydTb255JywgJ1RhYmxldCBQJywgJ3RhYmxldCddLFxuICAgICAgICAnU29ueSBUYWJsZXQgUyc6IFsnU29ueScsICdUYWJsZXQgUycsICd0YWJsZXQnXSxcbiAgICAgICAgJ05XWi1aMTAwMFNlcmllcyc6IFsnU29ueScsICdXYWxrbWFuIFonLCAnbWVkaWEnXSxcbiAgICAgICAgJ05XLVoxMDAwU2VyaWVzJzogWydTb255JywgJ1dhbGttYW4gWicsICdtZWRpYSddLFxuICAgICAgICAnU3BpY2UgTWkyODAnOiBbJ1NwaWNlJywgJ01pLTI4MCddLFxuICAgICAgICAnU3BpY2UgTWkzMDAnOiBbJ1NwaWNlJywgJ01pLTMwMCddLFxuICAgICAgICAnU3BpY2UgTWktMzEwJzogWydTcGljZScsICdNaS0zMTAnXSxcbiAgICAgICAgJ1NwaWNlIE1pLTQyNSc6IFsnU3BpY2UnLCAnTWktNDI1J10sXG4gICAgICAgICdTUElDRSBNaS03MjAnOiBbJ1NwaWNlJywgJ01pLTcyMCddLFxuICAgICAgICAnQTcyNzIrJzogWydTdGFyJywgJ0E3MjcyKyddLFxuICAgICAgICAnZTExMDkgdjczIGdxMTAwMiBjdHAnOiBbJ1N0YXInLCAnWDE4aSddLFxuICAgICAgICAnVFMxMDA0VCc6IFsnU3VyZiAzUScsICdUUzEwMDRUJywgJ3RhYmxldCddLFxuICAgICAgICAnU1lUQUJFWDctMic6IFsnU3lsdmFuaWEnLCAnU1lUQUJFWDcnLCAndGFibGV0J10sXG4gICAgICAgICdUQ0wgQTg2MCc6IFsnVENMJywgJ0E4NjAnXSxcbiAgICAgICAgJ1RDTCBBOTA2JzogWydUQ0wnLCAnQTkwNiddLFxuICAgICAgICAnVENMIEE5MDknOiBbJ1RDTCcsICdBOTA5J10sXG4gICAgICAgICdUQ0wgQTkxOSc6IFsnVENMJywgJ0E5MTknXSxcbiAgICAgICAgJ1RDTCBBOTkwJzogWydUQ0wnLCAnQTk5MCddLFxuICAgICAgICAnVENMIEE5OTYnOiBbJ1RDTCcsICdBOTk2J10sXG4gICAgICAgICdUQ0wgQTk5OCc6IFsnVENMJywgJ0E5OTgnXSxcbiAgICAgICAgJ1RDTCBHRU5FU0VFIEU3MDgnOiBbJ1RDTCcsICdHZW5lc2VlIEU3MDgnXSxcbiAgICAgICAgJ0ExMHQoNURNMyknOiBbJ1RlY2xhc3QnLCAnQTEwVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1A3Mic6IFsnVGVjbGFzdCcsICdQNzInLCAndGFibGV0J10sXG4gICAgICAgICdQNzZUSSc6IFsnVGVjbGFzdCcsICdQNzZUaScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1A4MUhEJzogWydUZWNsYXN0JywgJ1A4MUhEJywgJ3RhYmxldCddLFxuICAgICAgICAnUDg1KFI4QTEpJzogWydUZWNsYXN0JywgJ1A4NScsICd0YWJsZXQnXSxcbiAgICAgICAgJ1Q3MjAgU0UnOiBbJ1RlY2xhc3QnLCAnVDcyMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1Q3NjAgZnJvbSBtb2FnZS5jb20nOiBbJ1RlY2xhc3QnLCAnVDc2MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ3RlZ2F2Mic6IFsnVGVnYXRlY2gnLCAnVEVHQSB2MicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1RNLTcwMjUnOiBbJ3RlWGV0JywgJ1RNLTcwMjUnLCAndGFibGV0J10sXG4gICAgICAgICdNb0ZpbmcnOiBbJ1Rob21zb24nLCAnTW9GaW5nJywgJ3RhYmxldCddLFxuICAgICAgICAnVWx0aW1hdGUxMCc6IFsnVG9tdGVjJywgJ1VsdGltYXRlMTAnLCAndGFibGV0J10sXG4gICAgICAgICdUaGwgVjcnOiBbJ1RITCcsICdWNyddLFxuICAgICAgICAnVGhMIFY3JzogWydUSEwnLCAnVjcnXSxcbiAgICAgICAgJ1RoTCBWOCc6IFsnVEhMJywgJ1Y4J10sXG4gICAgICAgICdUaEwgVjknOiBbJ1RITCcsICdWOSddLFxuICAgICAgICAnVGhMIFYxMSc6IFsnVEhMJywgJ1YxMSddLFxuICAgICAgICAnVFNCIENMT1VEIENPTVBBTklPTjtUT1NISUJBIEFDIEFORCBBWic6IFsnVG9zaGliYScsICdEeW5hYm9vayBBWicsICdkZXNrdG9wJ10sXG4gICAgICAgICdUT1NISUJBIEFDIEFORCBBWic6IFsnVG9zaGliYScsICdEeW5hYm9vayBBWicsICdkZXNrdG9wJ10sXG4gICAgICAgICdUT1NISUJBIEZPTElPIEFORCBBJzogWydUb3NoaWJhJywgJ0ZvbGlvIDEwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1QtMDFDJzogWydUb3NoaWJhJywgJ1JlZ3phIFQtMDFDJ10sXG4gICAgICAgICdULTAxRCc6IFsnVG9zaGliYScsICdSZWd6YSBULTAxRCddLFxuICAgICAgICAnSVMwNCc6IFsnVG9zaGliYScsICdSZWd6YSBJUzA0J10sXG4gICAgICAgICdJUzExVCc6IFsnVG9zaGliYScsICdSZWd6YSBJUzExVCddLFxuICAgICAgICAnQVQxUzAnOiBbJ1Rvc2hpYmEnLCAnUmVnemEgQVQxUzAnXSxcbiAgICAgICAgJ1Rvc3RhYjAzJzogWydUb3NoaWJhJywgJ1JlZ3phIEFUMTAwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVQxMDAnOiBbJ1Rvc2hpYmEnLCAnUmVnemEgQVQxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdBVDIwMCc6IFsnVG9zaGliYScsICdSZWd6YSBBVDIwMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0FUNDcwJzogWydUb3NoaWJhJywgJ1JlZ3phIEFUNDcwJywgJ3RhYmxldCddLFxuICAgICAgICAnQVQ1NzAnOiBbJ1Rvc2hpYmEnLCAnUmVnemEgQVQ1NzAnLCAndGFibGV0J10sXG4gICAgICAgICdBVDgzMCc6IFsnVG9zaGliYScsICdSZWd6YSBBVDgzMCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0ZvbGlvIDEwMCc6IFsnVG9zaGliYScsICdGb2xpbyAxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdmb2xpbzEwMCc6IFsnVG9zaGliYScsICdGb2xpbyAxMDAnLCAndGFibGV0J10sXG4gICAgICAgICdUSFJpVkUnOiBbJ1Rvc2hpYmEnLCAnVEhSaVZFJywgJ3RhYmxldCddLFxuICAgICAgICAnRmFudGFzdGljIFQzJzogWydUV00nLCAnRmFudGFzdGljIFQzJ10sXG4gICAgICAgICdNNzAwMTQnOiBbJ1VuaXRlZCBTdGFyIFRlY2hub2xvZ3knLCAnTTcwMDE0JywgJ3RhYmxldCddLFxuICAgICAgICAnUFM0Nyc6IFsnVmVsb2NpdHkgTWljcm8nLCAnQ3J1eiBQUzQ3JywgJ3RhYmxldCddLFxuICAgICAgICAnVDMwMSc6IFsnVmVsb2NpdHkgTWljcm8nLCAnQ3J1eiBUMzAxJywgJ3RhYmxldCddLFxuICAgICAgICAnVmliby1BNjg4JzogWydGSUgnLCAnVmlibyBBNjg4J10sXG4gICAgICAgICdWaWRlb2Nvbi1WNzUwMCc6IFsnVmlkZW9jb24nLCAnVjc1MDAnXSxcbiAgICAgICAgJ0dUYWJsZXQnOiBbJ1ZpZXdTb25pYycsICdnVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnR3RhYkNvbWInOiBbJ1ZpZXdTb25pYycsICdnVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnVGVhbURSSCBJQ1MgZm9yIEdUYWJsZXQnOiBbJ1ZpZXdTb25pYycsICdnVGFibGV0JywgJ3RhYmxldCddLFxuICAgICAgICAnVmlld1BhZDcnOiBbJ1ZpZXdTb25pYycsICdWaWV3UGFkIDcnLCAndGFibGV0J10sXG4gICAgICAgICdWaWV3UGFkIDEwZSc6IFsnVmlld1NvbmljJywgJ1ZpZXdQYWQgMTBlJywgJ3RhYmxldCddLFxuICAgICAgICAnVlRBQjEwMDgnOiBbJ1ZpemlvJywgJ1ZUQUIxMDA4JywgJ3RhYmxldCddLFxuICAgICAgICAnVlRBQjMwMTAnOiBbJ1ZpemlvJywgJ1ZUQUIzMDEwJywgJ3RhYmxldCddLFxuICAgICAgICAnVk9UTyBXNTMwMCc6IFsnVk9UTycsICdXNTMwMCddLFxuICAgICAgICAneFBBRC03MCc6IFsnV2F5dGVRJywgJ3hQQUQtNzAnLCAndGFibGV0J10sXG4gICAgICAgICd4VEFCLTcwJzogWydXYXl0ZVEnLCAneFRBQi03MCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ1dlbGxjb00tQTk5JzogWydXZWxsY29NJywgJ0E5OSddLFxuICAgICAgICAnTjEyJzogWydXaW5kb3cnLCAnTjEyJywgJ3RhYmxldCddLFxuICAgICAgICAnTjEyUic6IFsnV2luZG93JywgJ04xMlInLCAndGFibGV0J10sXG4gICAgICAgICdONTAnOiBbJ1dpbmRvdycsICdONTAnLCAndGFibGV0J10sXG4gICAgICAgICdONTBEVCc6IFsnV2luZG93JywgJ041MERUJywgJ3RhYmxldCddLFxuICAgICAgICAnTjUwR1QnOiBbJ1dpbmRvdycsICdONTBHVCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ041MEdUIEEnOiBbJ1dpbmRvdycsICdONTBHVC1BJywgJ3RhYmxldCddLFxuICAgICAgICAnTjcwJzogWydXaW5kb3cnLCAnTjcwJywgJ3RhYmxldCddLFxuICAgICAgICAnTjcwIERVQUwgQ09SRSc6IFsnV2luZG93JywgJ043MCBEdWFsIENvcmUnLCAndGFibGV0J10sXG4gICAgICAgICdOODAnOiBbJ1dpbmRvdycsICdOODAnLCAndGFibGV0J10sXG4gICAgICAgICdOOTAnOiBbJ1dpbmRvdycsICdOOTAnLCAndGFibGV0J10sXG4gICAgICAgICdOOTAgRFVBTCBDT1JFMiBWMTInOiBbJ1dpbmRvdycsICdOOTAgRHVhbCBDb3JlJywgJ3RhYmxldCddLFxuICAgICAgICAnTjYxMic6IFsnV2lzaHdheScsICdONjEyJ10sXG4gICAgICAgICdBVC1BUzQzRCc6IFsnV29sZmdhbmcnLCAnQVQtQVM0M0QnXSxcbiAgICAgICAgJ00xMic6IFsnV29wYWQnLCAnTTEyJywgJ3RhYmxldCddLFxuICAgICAgICAnV004NjUwJzogWydXb25kZXJNZWRpYScsICdXTTg2NTAnLCAndGFibGV0J10sXG4gICAgICAgICdNSS1PTkUnOiBbJ1hpYW9taScsICdNSS1PTkUnXSxcbiAgICAgICAgJ01JLU9ORSBDMSc6IFsnWGlhb21pJywgJ01JLU9ORSBDMSddLFxuICAgICAgICAnTUktT05FIFBsdXMnOiBbJ1hpYW9taScsICdNSS1PTkUgUGx1cyddLFxuICAgICAgICAnTUkgMVMnOiBbJ1hpYW9taScsICdNSS1PTkUgUGx1cyddLFxuICAgICAgICAnTUkgMVNDJzogWydYaWFvbWknLCAnTUktT05FIDFTQyddLFxuICAgICAgICAnbWlvbmUgcGx1cyc6IFsnWGlhb21pJywgJ01JLU9ORSBQbHVzJ10sXG4gICAgICAgICdNSS1UV08nOiBbJ1hpYW9taScsICdNSS1UV08nXSxcbiAgICAgICAgJ01JIDInOiBbJ1hpYW9taScsICdNSS1UV08nXSxcbiAgICAgICAgJ01JIDJTJzogWydYaWFvbWknLCAnTUktVFdPIFBsdXMnXSxcbiAgICAgICAgJ01JIDJTQyc6IFsnWGlhb21pJywgJ01JLVRXTyBQbHVzJ10sXG4gICAgICAgICdRMDdDTDAxJzogWydYVmlzaW9uJywgJ1EwNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ042JzogWydZYXJ2aWsnLCAnMjEwIFRhYmxldCcsICd0YWJsZXQnXSxcbiAgICAgICAgJ0VNUjE4NzknOiBbJ1lpZG9uZycsICdFTVIxODc5JywgJ3RhYmxldCddLFxuICAgICAgICAneXVzdW4gVzcwMic6IFsnWXVzdW4nLCAnVzcwMiddLFxuICAgICAgICAnWVgtWVVTVU4gRTgwJzogWydZdXN1bicsICdFODAnXSxcbiAgICAgICAgJ3p0MTgwJzogWydaZW5pdGhpbmsnLCAnWlQtMTgwJywgJ3RhYmxldCddLFxuICAgICAgICAnSmFndWFyNyc6IFsnWmlpTGFicycsICdKYWd1YXIgNycsICd0YWJsZXQnXSxcbiAgICAgICAgJ1ppc3MgUmFuZ2VyIEhEJzogWydaaXNzJywgJ1JhbmdlciBIRCddLFxuICAgICAgICAnWlRFIExpYnJhJzogWydaVEUnLCAnTGlicmEnXSxcbiAgICAgICAgJ1pURS1UIFQ5JzogWydaVEUnLCAnTGlnaHQgVGFiIFQ5JywgJ3RhYmxldCddLFxuICAgICAgICAnVjknOiBbJ1pURScsICdMaWdodCBUYWIgVjknLCAndGFibGV0J10sXG4gICAgICAgICdWOWUrJzogWydaVEUnLCAnTGlnaHQgVGFiIDInLCAndGFibGV0J10sXG4gICAgICAgICdWOUEnOiBbJ1pURScsICdMaWdodCBUYWIgMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ0xpZ2h0IFRhYiAyVyc6IFsnWlRFJywgJ0xpZ2h0IFRhYiAyJywgJ3RhYmxldCddLFxuICAgICAgICAnTGlnaHQgVGFiIDInOiBbJ1pURScsICdMaWdodCBUYWIgMicsICd0YWJsZXQnXSxcbiAgICAgICAgJ1Y5Qyc6IFsnWlRFJywgJ0xpZ2h0IFRhYiAzJywgJ3RhYmxldCddLFxuICAgICAgICAnVjU1JzogWydaVEUnLCAnT3B0aWsnLCAndGFibGV0J10sXG4gICAgICAgICdBY3F1YSc6IFsnWlRFJywgJ0FjcXVhJ10sXG4gICAgICAgICdCbGFkZSc6IFsnWlRFJywgJ0JsYWRlJ10sXG4gICAgICAgICdCbGFkZS1WODgwJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ1pURS1VIFY4ODAnOiBbJ1pURScsICdCbGFkZSddLFxuICAgICAgICAnQmxhZGUtb3BkYSc6IFsnWlRFJywgJ0JsYWRlJ10sXG4gICAgICAgICdaVEUtQkxBREUnOiBbJ1pURScsICdCbGFkZSddLFxuICAgICAgICAnWlRFIEJsYWRlJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ1pURSBWODgwJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ1pURS1VKFYpODgwKyc6IFsnWlRFJywgJ0JsYWRlJ10sXG4gICAgICAgICdWODgwJzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ2E1JzogWydaVEUnLCAnQmxhZGUnXSxcbiAgICAgICAgJ0JsYWRlMic6IFsnWlRFJywgJ0JsYWRlIDInXSxcbiAgICAgICAgJ0JsYWRlIFMnOiBbJ1pURScsICdCbGFkZSBTJ10sXG4gICAgICAgICdYNTAwJzogWydaVEUnLCAnU2NvcmUnXSxcbiAgICAgICAgJ1pURS1YNTAwJzogWydaVEUnLCAnU2NvcmUnXSxcbiAgICAgICAgJ1NrYXRlJzogWydaVEUnLCAnU2thdGUnXSxcbiAgICAgICAgJ1pURSBTa2F0ZSc6IFsnWlRFJywgJ1NrYXRlJ10sXG4gICAgICAgICdaVEUtU2thdGUnOiBbJ1pURScsICdTa2F0ZSddLFxuICAgICAgICAnWlRFLVNLQVRFJzogWydaVEUnLCAnU2thdGUnXSxcbiAgICAgICAgJ1pURS1WOTYwJzogWydaVEUnLCAnU2thdGUnXSxcbiAgICAgICAgJ1pURS1VIFY5NjAnOiBbJ1pURScsICdTa2F0ZSddLFxuICAgICAgICAnWlRFIFJhY2VyJzogWydaVEUnLCAnUmFjZXInXSxcbiAgICAgICAgJ1pURS1SQUNFUic6IFsnWlRFJywgJ1JhY2VyJ10sXG4gICAgICAgICdNVEMgOTE2JzogWydaVEUnLCAnUmFjZXInXSxcbiAgICAgICAgJ1JhY2VyJzogWydaVEUnLCAnUmFjZXInXSxcbiAgICAgICAgJ1JhY2VySUknOiBbJ1pURScsICdSYWNlciAyJ10sXG4gICAgICAgICdSQUNFUklJJzogWydaVEUnLCAnUmFjZXIgMiddLFxuICAgICAgICAnWlRFIFJvYW1lcic6IFsnWlRFJywgJ1JvYW1lciddLFxuICAgICAgICAnTjg2MCc6IFsnWlRFJywgJ1dhcnAnXSxcbiAgICAgICAgJ044ODAnOiBbJ1pURScsICdCbGFkZSddLFxuICAgICAgICAnWlRFLVQgVTgwMic6IFsnWlRFJywgJ1QtVTgwMiddLFxuICAgICAgICAnWlRFLVQgVTgwNic6IFsnWlRFJywgJ1QtVTgwNiddLFxuICAgICAgICAnWlRFLVQgVTgxMic6IFsnWlRFJywgJ1QtVTgxMiddLFxuICAgICAgICAnWlRFLVQgVTgzMCc6IFsnWlRFJywgJ1QtVTgzMCddLFxuICAgICAgICAnWlRFLVQgVTg4MCc6IFsnWlRFJywgJ1QtVTg4MCddLFxuICAgICAgICAnWlRFIFQgVTg4MCc6IFsnWlRFJywgJ1QtVTg4MCddLFxuICAgICAgICAnWlRFLVRVODgwJzogWydaVEUnLCAnVC1VODgwJ10sXG4gICAgICAgICdaVEUtVFU5MDAnOiBbJ1pURScsICdULVU5MDAnXSxcbiAgICAgICAgJ1pURS1UIFU5NjAnOiBbJ1pURScsICdULVU5NjAnXSxcbiAgICAgICAgJ1pURS1UVTk2MHMnOiBbJ1pURScsICdULVU5NjAnXSxcbiAgICAgICAgJ1pURS1UIFU5NjBzJzogWydaVEUnLCAnVC1VOTYwJ10sXG4gICAgICAgICdaVEUgVSBONzIwJzogWydaVEUnLCAnVS1ONzIwJ10sXG4gICAgICAgICdaVEUtVSBWODU2JzogWydaVEUnLCAnVS1WODU2J10sXG4gICAgICAgICdaVEUtVSBWODU3JzogWydaVEUnLCAnVS1WODU3J10sXG4gICAgICAgICdaVEUtVSBWODgxJzogWydaVEUnLCAnVS1WODgxJ10sXG4gICAgICAgICdaVEUtVSBYODUwJzogWydaVEUnLCAnVS1YODUwJ10sXG4gICAgICAgICdaVEUtVSBYODc2JzogWydaVEUnLCAnVS1YODc2J10sXG4gICAgICAgICdaVEUtWDg3Nic6IFsnWlRFJywgJ1UtWDg3NiddLFxuICAgICAgICAnWlRFLUMgUjc1MCc6IFsnWlRFJywgJ0MtUjc1MCddLFxuICAgICAgICAnWlRFLUMgTjYwMCc6IFsnWlRFJywgJ0MtTjYwMCddLFxuICAgICAgICAnWlRFLUMgTjYwMCsnOiBbJ1pURScsICdDLU42MDAnXSxcbiAgICAgICAgJ1pURS1DIE42MDYnOiBbJ1pURScsICdDLU42MDYnXSxcbiAgICAgICAgJ1pURS1DIE43MDAnOiBbJ1pURScsICdDLU43MDAnXSxcbiAgICAgICAgJ1pURS1DIE43NjAnOiBbJ1pURScsICdDLU43NjAnXSxcbiAgICAgICAgJ1pURS1DIE44ODAnOiBbJ1pURScsICdDLU44ODAnXSxcbiAgICAgICAgJ1pURS1DIE44ODBTJzogWydaVEUnLCAnQy1OODgwJ10sXG4gICAgICAgICdaVEUtQyBOODgwcyc6IFsnWlRFJywgJ0MtTjg4MCddLFxuICAgICAgICAnWlRFLUMgWDUwMCc6IFsnWlRFJywgJ0MtWDUwMCddLFxuICAgICAgICAnWlRFLUMgWDkyMCc6IFsnWlRFJywgJ0MtWDkyMCddLFxuICAgICAgICAnWlhZLVpURS1DIFg5MjAnOiBbJ1pURScsICdDLVg5MjAnXSxcbiAgICAgICAgJ1pURSBHVjgyMSc6IFsnWlRFJywgJ0ctVjgyMSddLFxuICAgICAgICAnWlRFIE44ODBFJzogWydaVEUnLCAnTjg4MEUnXSxcbiAgICAgICAgJ1pURS1OODgwRSc6IFsnWlRFJywgJ044ODBFJ10sXG4gICAgICAgICdNSVVJIE44ODBTJzogWydaVEUnLCAnTjg4MFMnXSxcbiAgICAgICAgJ1pURSBOODgyRSc6IFsnWlRFJywgJ044ODJFJ10sXG4gICAgICAgICdaVEUgTjg1NUQnOiBbJ1pURScsICdOODU1RCddLFxuICAgICAgICAnWlRFLU45MTAnOiBbJ1pURScsICdOOTEwJ10sXG4gICAgICAgICdFODEwJzogWydaVEUnLCAnRTgxMCddLFxuICAgICAgICAndTg4MCc6IFsnWlRFJywgJ1U4ODAnXSxcbiAgICAgICAgJ1pURSBVODgwRSc6IFsnWlRFJywgJ1U4ODBFJ10sXG4gICAgICAgICdVODgwJzogWydaVEUnLCAnVTg4MCddLFxuICAgICAgICAnWlRFIFU5NzAnOiBbJ1pURScsICdVOTcwJ10sXG4gICAgICAgICdaVEUgVjc2OCc6IFsnWlRFJywgJ1Y3NjgnXSxcbiAgICAgICAgJ1pURS1WODU2JzogWydaVEUnLCAnVjg1NiddLFxuICAgICAgICAnWlRFIFY4NzdiJzogWydaVEUnLCAnVjg3NyddLFxuICAgICAgICAnWlRFIFY4ODlEJzogWydaVEUnLCAnVjg4OSddLFxuICAgICAgICAnWlRFLVo5OTAnOiBbJ1pURScsICdaOTkwJ10sXG4gICAgICAgICdaVEVVNzkwJzogWydaVEUnLCAnVTc5MCddLFxuICAgICAgICAnMDAzWic6IFsnWlRFJywgJ1NvZnRiYW5rIDAwM1onXSxcbiAgICAgICAgJzAwOFonOiBbJ1pURScsICdTb2Z0YmFuayAwMDhaJ10sXG4gICAgICAgICcwMDlaJzogWydaVEUnLCAnU29mdGJhbmsgU3RhcjcnXSxcbiAgICAgICAgJ2ktbW9iaWxlIGk2OTEnOiBbJ2ktTW9iaWxlJywgJ2k2OTEnXSxcbiAgICAgICAgJ2ktbW9iaWxlIGk2OTUnOiBbJ2ktTW9iaWxlJywgJ2k2OTUnXSxcbiAgICAgICAgJ2ktbW9iaWxlIGk4NTgnOiBbJ2ktTW9iaWxlJywgJ2k4NTgnXSxcbiAgICAgICAgJ2ktbW9iaWxlIDNHIDg1MDAnOiBbJ2ktTW9iaWxlJywgJzNHIDg1MDAnXSxcbiAgICAgICAgJ2ktbW9iaWxlIEktTm90ZSc6IFsnaS1Nb2JpbGUnLCAnaS1Ob3RlJywgJ3RhYmxldCddLFxuICAgICAgICAnT3B0aW11cyBCb3N0b24nOiBbJ09wdGltdXMnLCAnQm9zdG9uJ10sXG4gICAgICAgICdPcHRpbXVzIFNhbiBGcmFuY2lzY28nOiBbJ09wdGltdXMnLCAnU2FuIEZyYW5jaXNjbyddLFxuICAgICAgICAnT3B0aW11cyBNb250ZSBDYXJsbyc6IFsnT3B0aW11cycsICdNb250ZSBDYXJsbyddLFxuICAgICAgICAnT3JhbmdlIEJvc3Rvbic6IFsnT3JhbmdlJywgJ0Jvc3RvbiddLFxuICAgICAgICAnT3JhbmdlIE1vbnRlIENhcmxvJzogWydPcmFuZ2UnLCAnTW9udGUgQ2FybG8nXSxcbiAgICAgICAgJ1NhbiBGcmFuY2lzY28nOiBbJ09yYW5nZScsICdTYW4gRnJhbmNpc2NvJ10sXG4gICAgICAgICdTYW4gRnJhbmNpc2NvIGZvciBPcmFuZ2UnOiBbJ09yYW5nZScsICdTYW4gRnJhbmNpc2NvJ10sXG4gICAgICAgICdPcmFuZ2UgU2FuIEZyYW5jaXNjbyc6IFsnT3JhbmdlJywgJ1NhbiBGcmFuY2lzY28nXSxcbiAgICAgICAgJ01PVkUnOiBbJ1QtTW9iaWxlJywgJ01PVkUnXSxcbiAgICAgICAgJ1QtTW9iaWxlIEcxJzogWydULU1vYmlsZScsICdHMSddLFxuICAgICAgICAnVC1Nb2JpbGUgRzInOiBbJ1QtTW9iaWxlJywgJ0cyJ10sXG4gICAgICAgICdULU1vYmlsZSBHMiBUb3VjaCc6IFsnVC1Nb2JpbGUnLCAnRzInXSxcbiAgICAgICAgJ0xHLVA5OTknOiBbJ1QtTW9iaWxlJywgJ0cyeCddLFxuICAgICAgICAnTEctRTczOSc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCddLFxuICAgICAgICAnVC1Nb2JpbGUgbXlUb3VjaCAzRyc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCAzRyddLFxuICAgICAgICAnVC1Nb2JpbGUgbXlUb3VjaCAzRyBTbGlkZSc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCAzRyBTbGlkZSddLFxuICAgICAgICAnVC1Nb2JpbGUgRXNwcmVzc28nOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggM0cgU2xpZGUnXSxcbiAgICAgICAgJ0hUQyBteVRvdWNoIDNHIFNsaWRlJzogWydULU1vYmlsZScsICdteVRvdWNoIDNHIFNsaWRlJ10sXG4gICAgICAgICdULU1vYmlsZSBteVRvdWNoIDRHJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHJ10sXG4gICAgICAgICdIVEMgR2xhY2llcic6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCA0RyddLFxuICAgICAgICAnSFRDIFBhbmFjaGUnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ215VG91Y2g0Ryc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCA0RyddLFxuICAgICAgICAnTXkgVG91Y2ggNEcnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ0hUQyBNeXRvdWNoIDRHJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHJ10sXG4gICAgICAgICdIVEMgTXkgVG91Y2ggNEcnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ0hUQyBteXRvdWNoNGcnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggNEcnXSxcbiAgICAgICAgJ0hUQyBteVRvdWNoIDRHIFNsaWRlJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHIFNsaWRlJ10sXG4gICAgICAgICdteVRvdWNoIDRHIFNsaWRlJzogWydULU1vYmlsZScsICdteVRvdWNoIDRHIFNsaWRlJ10sXG4gICAgICAgICdULU1vYmlsZSBteVRvdWNoIFEnOiBbJ1QtTW9iaWxlJywgJ215VG91Y2ggUSddLFxuICAgICAgICAnTEctQzgwMCc6IFsnVC1Nb2JpbGUnLCAnbXlUb3VjaCBRJ10sXG4gICAgICAgICdQdWxzZSBNaW5pJzogWydULU1vYmlsZScsICdQdWxzZSBNaW5pJ10sXG4gICAgICAgICdWb2RhZm9uZSA4NDUnOiBbJ1ZvZGFmb25lJywgJzg0NSBOb3ZhJ10sXG4gICAgICAgICdWb2RhZm9uZSA4NTgnOiBbJ1ZvZGFmb25lJywgJzg1OCBTbWFydCddLFxuICAgICAgICAnVm9kYWZvbmUgOTQ1JzogWydWb2RhZm9uZScsICc5NDUnXSxcbiAgICAgICAgJ1ZvZGFmb25lIFNtYXJ0IElJJzogWydWb2RhZm9uZScsICdTbWFydCBJSSddLFxuICAgICAgICAnU21hcnRUYWIxMCc6IFsnVm9kYWZvbmUnLCAnU21hcnRUYWIgMTAnLCAndGFibGV0J10sXG4gICAgICAgICdTQ0gtTjcxOSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSBJSSddLFxuICAgICAgICAnQ29vbHBhZCA4MTkwJzogWydDb29scGFkJywgJzgxOTAnXSxcbiAgICAgICAgJ1U3MDVUJzogWydPcHBvJywgJ1VsaWtlMiddLFxuICAgICAgICAnQ29vbHBhZCA4MDIwKyc6IFsnQ29vbHBhZCcsICc4MDIwJ10sXG4gICAgICAgICdIdWF3ZWkgWTMxMC01MDAwJzogWydIdWF3ZWknLCAnWTMxMCddLFxuICAgICAgICAnR1QtUzc1NzInOiBbJ1NhbXN1bmcnLCAnR2FsYXh5IFRyZW5kIER1b3MgSUknXSxcbiAgICAgICAgJ0xlbm92byBBMjc4dCc6IFsnTGVub3ZvJywgJ0EyNzh0J10sXG4gICAgICAgICdMZW5vdm8gQTY5MCc6IFsnTGVub3ZvJywgJ0E2OTAnXSxcbiAgICAgICAgJ0dULUk4MjYyRCc6IFsnU2Ftc3VuZycsICdMZVBob25lIEk4MjYyRCddLFxuICAgICAgICAnTGVub3ZvIEEyNzh0JzogWydMZW5vdm8nLCAnQTI3OHQnXSxcbiAgICAgICAgJ01JIDJDJzogWydYaWFvbWknLCAnTUktVFdPJ10sXG4gICAgICAgICdDb29scGFkIDgwNzAnOiBbJ0Nvb2xwYWQnLCAnODA3MCddLFxuICAgICAgICAnUjgxM1QnOiBbJ09wcG8nLCAnUjgxM1QnXSxcbiAgICAgICAgJ1pURSBVOTMwJzogWydaVEUnLCAnVTkzMCddLFxuICAgICAgICAnTGVub3ZvIEEzNjAnOiBbJ0xlbm92bycsICdMZVBob25lIEEzNjAnXSxcbiAgICAgICAgJ1NDSC1ONzE5JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlIElJJ10sXG4gICAgICAgICdDb29scGFkIDgwMTAnOiBbJ0Nvb2xwYWQnLCAnODAxMCddLFxuICAgICAgICAnTEVOT1ZPLUxlbm92by1BMjg4dCc6IFsnTGVub3ZvJywgJ0EyODh0J10sXG4gICAgICAgICdVNzAxVCc6IFsnT3BwbycsICdVNzAxVCddLFxuICAgICAgICAnWlRFVTc5NSc6IFsnQ29vbHBhZCcsICdVNzk1J10sXG4gICAgICAgICdIYWllci1IVC1JNjE3JzogWydIYWllcicsICdJNjE3J10sXG4gICAgICAgICdaVEVVODgwcyc6IFsnWlRFJywgJ1QtVTg4MCddLFxuICAgICAgICAnR1QtUzYzNTInOiBbJ1NhbXN1bmcnLCAnR1QtUzYzNTInXSxcbiAgICAgICAgJ0dULVM3NTY4JzogWydTYW1zdW5nJywgJ0dULVM3NTY4J10sXG4gICAgICAgICdLLVRvdWNoIFQ2MTkrJzogWydLLVRvdWNoJywgJ1Q2MTknXSxcbiAgICAgICAgJ01JIDJBJzogWydYaWFvbWknLCAnTUktVFdPIEEnXSxcbiAgICAgICAgJ0dULU43MTA4JzogWydTYW1zdW5nJywgJ0dhbGF4eSBOb3RlIElJJ10sXG4gICAgICAgICdLLVRvdWNoIFQ2MjEnOiBbJ0stVG91Y2gnLCAnVDYyMSddLFxuICAgICAgICAnTEVOT1ZPLUxlbm92by1BMjk4dCc6IFsnTGVub3ZvJywgJ0EyOTgnXSxcbiAgICAgICAgJ0Nvb2xwYWQgODE1MCc6IFsnQ29vbHBhZCcsICc4MTUwJ10sXG4gICAgICAgICc1ODYwUyc6IFsnQ29vbHBhZCcsICc1ODYwJ10sXG4gICAgICAgICdaVEVVODA3JzogWydaVEUnLCAnVTgwNyddLFxuICAgICAgICAnU0NILUk3MzknOiBbJ1NhbXN1bmcnLCAnU0NILUk3MzknXSxcbiAgICAgICAgJ1NDSC1JODI5JzogWydTYW1zdW5nJywgJ1NDSC1JODI5J10sXG4gICAgICAgICdIUy1FODMwJzogWydIaXNlbnNlJywgJ0U4MzAnXSxcbiAgICAgICAgJ0hTLUU5MjAnOiBbJ0hpc2Vuc2UnLCAnRTkyMCddLFxuICAgICAgICAnTGVub3ZvIFM3MjAnOiBbJ0xlbm92bycsICdTNzIwJ10sXG4gICAgICAgICdNSSAyQyc6IFsnWGlhb21pJywgJ01JLVRXTyddLFxuICAgICAgICAnT1BQTyBSODEzVCc6IFsnT3BwbycsICdSODEzJ10sXG4gICAgICAgICdTQ0gtSTg3OSc6IFsnU2Ftc3VuZycsICdHYWxheHkgTm90ZSddLFxuICAgICAgICAnR1QtUzYxMDJFJzogWydTYW1zdW5nJywgJ0dhbGF4eSBZIER1b3MnXVxuICAgIH1cblxuICAgIHZhciBCTEFDS0JFUlJZX01PREVMUyA9IHtcbiAgICAgICAgJzk2MDAnOiAnQm9sZCcsXG4gICAgICAgICc5NjUwJzogJ0JvbGQnLFxuICAgICAgICAnOTcwMCc6ICdCb2xkJyxcbiAgICAgICAgJzk3ODAnOiAnQm9sZCcsXG4gICAgICAgICc5NzkwJzogJ0JvbGQnLFxuICAgICAgICAnOTkwMCc6ICdCb2xkJyxcbiAgICAgICAgJzk5MzAnOiAnQm9sZCcsXG4gICAgICAgICc4MzAwJzogJ0N1cnZlJyxcbiAgICAgICAgJzgzMTAnOiAnQ3VydmUnLFxuICAgICAgICAnODMyMCc6ICdDdXJ2ZScsXG4gICAgICAgICc4MzMwJzogJ0N1cnZlJyxcbiAgICAgICAgJzgzNTBpJzogJ0N1cnZlJyxcbiAgICAgICAgJzg1MjAnOiAnQ3VydmUnLFxuICAgICAgICAnODUzMCc6ICdDdXJ2ZScsXG4gICAgICAgICc4OTAwJzogJ0N1cnZlJyxcbiAgICAgICAgJzkyMjAnOiAnQ3VydmUnLFxuICAgICAgICAnOTMwMCc6ICdDdXJ2ZScsXG4gICAgICAgICc5MzMwJzogJ0N1cnZlJyxcbiAgICAgICAgJzkzNTAnOiAnQ3VydmUnLFxuICAgICAgICAnOTM2MCc6ICdDdXJ2ZScsXG4gICAgICAgICc5MzcwJzogJ0N1cnZlJyxcbiAgICAgICAgJzkzODAnOiAnQ3VydmUnLFxuICAgICAgICAnODEwMCc6ICdQZWFybCcsXG4gICAgICAgICc4MTEwJzogJ1BlYXJsJyxcbiAgICAgICAgJzgxMjAnOiAnUGVhcmwnLFxuICAgICAgICAnODEzMCc6ICdQZWFybCcsXG4gICAgICAgICc4MjIwJzogJ1BlYXJsJyxcbiAgICAgICAgJzgyMzAnOiAnUGVhcmwnLFxuICAgICAgICAnOTEwMCc6ICdQZWFybCcsXG4gICAgICAgICc5MTA1JzogJ1BlYXJsJyxcbiAgICAgICAgJzk1MzAnOiAnU3Rvcm0nLFxuICAgICAgICAnOTU1MCc6ICdTdG9ybScsXG4gICAgICAgICc5NjcwJzogJ1N0eWxlJyxcbiAgICAgICAgJzk4MDAnOiAnVG9yY2gnLFxuICAgICAgICAnOTgxMCc6ICdUb3JjaCcsXG4gICAgICAgICc5ODUwJzogJ1RvcmNoJyxcbiAgICAgICAgJzk4NjAnOiAnVG9yY2gnLFxuICAgICAgICAnOTYzMCc6ICdUb3VyJyxcbiAgICAgICAgJzk5ODEnOiAnUG9yc2NoZSBQJ1xuICAgIH07XG5cblxuICAgIHZhciBWZXJzaW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICB9O1xuICAgIFZlcnNpb24ucHJvdG90eXBlID0ge1xuICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbCA9IHYudmFsdWUgfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYWxpYXMgPSB2LmFsaWFzIHx8IG51bGw7XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBEZXRlY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9O1xuICAgIERldGVjdGVkLnByb3RvdHlwZSA9IHtcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVhLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgdXNlRmVhdHVyZXM6IG9wdGlvbnMgJiYgb3B0aW9ucy51c2VGZWF0dXJlcyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXRlY3RDYW1vdWZsYWdlOiBvcHRpb25zICYmIG9wdGlvbnMuZGV0ZWN0Q2Ftb3VmbGFnZSB8fCB0cnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYnJvd3NlciA9IHtcbiAgICAgICAgICAgICAgICAnc3RvY2snOiB0cnVlLFxuICAgICAgICAgICAgICAgICdoaWRkZW4nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnY2hhbm5lbCc6ICcnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5lbmdpbmUgPSB7fTtcbiAgICAgICAgICAgIHRoaXMub3MgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlID0ge1xuICAgICAgICAgICAgICAgICd0eXBlJzogJ2Rlc2t0b3AnLFxuICAgICAgICAgICAgICAgICdpZGVudGlmaWVkJzogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kZXRlY3QodWEpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRldGVjdDogZnVuY3Rpb24gKHVhKSB7XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFVuaXhcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1VuaXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdVbml4JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgRnJlZUJTRFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRnJlZUJTRCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0ZyZWVCU0QnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBPcGVuQlNEXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdPcGVuQlNEJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnT3BlbkJTRCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE5ldEJTRFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnTmV0QlNEJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTmV0QlNEJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgU3VuT1NcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1N1bk9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU29sYXJpcyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIExpbnV4XG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdMaW51eCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0xpbnV4JztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnQ2VudE9TJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0NlbnRPUyc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9DZW50T1NcXC9bMC05XFwuXFwtXStlbChbMC05X10rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0ucmVwbGFjZSgvXy9nLCAnLicpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRGViaWFuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0RlYmlhbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdGZWRvcmEnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnRmVkb3JhJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0ZlZG9yYVxcL1swLTlcXC5cXC1dK2ZjKFswLTldKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnR2VudG9vJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0dlbnRvbyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdLdWJ1bnR1JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0t1YnVudHUnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnTWFuZHJpdmEgTGludXgnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTWFuZHJpdmEnO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTWFuZHJpdmEgTGludXhcXC9bMC05XFwuXFwtXSttZHYoWzAtOV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdNYWdlaWEnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTWFnZWlhJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01hZ2VpYVxcL1swLTlcXC5cXC1dK21nYShbMC05XSspLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1JlZCBIYXQnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnUmVkIEhhdCc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9SZWQgSGF0W15cXC9dKlxcL1swLTlcXC5cXC1dK2VsKFswLTlfXSspLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXS5yZXBsYWNlKC9fL2csICcuJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdTbGFja3dhcmUnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU2xhY2t3YXJlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1NVU0UnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU1VTRSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdUdXJib2xpbnV4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1R1cmJvbGludXgnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnVWJ1bnR1JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1VidW50dSc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9VYnVudHVcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgaU9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdpUGhvbmUoIFNpbXVsYXRvcik/OycpIHx8IHVhLm1hdGNoKCdpUGFkOycpIHx8IHVhLm1hdGNoKCdpUG9kOycpIHx8IHVhLm1hdGNoKC9pUGhvbmVcXHMqXFxkKnM/W2NwXT87L2kpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ2lPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzEuMCdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9PUyAoLiopIGxpa2UgTWFjIE9TIFgvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXS5yZXBsYWNlKC9fL2csICcuJylcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdpUGhvbmUgU2ltdWxhdG9yOycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZW11bGF0b3InO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodWEubWF0Y2goJ2lQb2Q7JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtZWRpYSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBcHBsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ2lQb2QgVG91Y2gnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodWEubWF0Y2goJ2lQaG9uZTsnKSB8fCB1YS5tYXRjaCgvaVBob25lXFxzKlxcZCpzP1tjcF0/Oy9pKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBcHBsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ2lQaG9uZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQXBwbGUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdpUGFkJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTWFjT1MgWFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHVhLm1hdGNoKCdNYWMgT1MgWCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ01hYyBPUyBYJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NYWMgT1MgWCAoMTBbMC05XFwuX10qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLnJlcGxhY2UoL18vZywgJy4nKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdpbmRvd3NcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1dpbmRvd3MnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9XaW5kb3dzIE5UIChbMC05XVxcLlswLTldKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gcGFyc2VWZXJzaW9uKG1hdGNoWzFdKTtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJzgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJzcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJ1Zpc3RhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNS4yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXM6ICdTZXJ2ZXIgMjAwMydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUuMSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnWFAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1LjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJzIwMDAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogJ05UICcgKyB0aGlzLm9zLnZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyA5NScpIHx8IHVhLm1hdGNoKCdXaW45NScpIHx8IHVhLm1hdGNoKCdXaW4gOXggNC4wMCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNC4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnOTUnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyA5OCcpIHx8IHVhLm1hdGNoKCdXaW45OCcpIHx8IHVhLm1hdGNoKCdXaW4gOXggNC4xMCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNC4xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnOTgnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBNRScpIHx8IHVhLm1hdGNoKCdXaW5NRScpIHx8IHVhLm1hdGNoKCdXaW4gOXggNC45MCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNC45JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnTUUnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBYUCcpIHx8IHVhLm1hdGNoKCdXaW5YUCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNS4xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiAnWFAnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV1A3JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgUGhvbmUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzcuMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5tb2RlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBDRScpIHx8IHVhLm1hdGNoKCdXaW5DRScpIHx8IHVhLm1hdGNoKCdXaW5kb3dzQ0UnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnV2luZG93cyBNb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZSA4JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNi41JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZSA3JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNi4xJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJyBJRU1vYmlsZSA2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnNi4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgQ0UnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvV2luZG93c0NFT1NcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1dpbmRvd3MgQ0UgKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdXaW5kb3dzIE1vYmlsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvV2luZG93c01vYmlsZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgTW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnV2luZG93cyBQaG9uZSBbMC05XScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1YS5tYXRjaCgvV2luZG93cyBQaG9uZSAoWzAtOS5dKikvKVsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1dpbmRvd3MgUGhvbmUgT1MnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnV2luZG93cyBQaG9uZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1YS5tYXRjaCgvV2luZG93cyBQaG9uZSBPUyAoWzAtOS5dKikvKVsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbiA8IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvSUVNb2JpbGVcXC9bXjtdKzsgKFteO10rKTsgKFteO10rKVs7fFxcKV0vLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hbnVmYWN0dXJlciA9IHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKHRoaXMuZGV2aWNlLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFdJTkRPV1NfUEhPTkVfTU9ERUxTW21hbnVmYWN0dXJlcl0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBXSU5ET1dTX1BIT05FX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFdJTkRPV1NfUEhPTkVfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBXSU5ET1dTX1BIT05FX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hbnVmYWN0dXJlciA9PT0gJ01pY3Jvc29mdCcgJiYgbW9kZWwgPT09ICdYRGV2aWNlRW11bGF0b3InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdlbXVsYXRvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQW5kcm9pZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0FuZHJvaWQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdBbmRyb2lkJztcbiAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0FuZHJvaWQoPzogKT8oPzpBbGxQaG9uZV98Q3lhbm9nZW5Nb2RfKT8oPzpcXC8pP3Y/KFswLTkuXSspLy5leGVjKHVhLnJlcGxhY2UoJy11cGRhdGUnLCAnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdBbmRyb2lkIEVjbGFpcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMi4wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLnZlcnNpb24gPj0gMykgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLnZlcnNpb24gPj0gNCAmJiB1YS5tYXRjaCgnTW9iaWxlJykpIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9FY2xhaXI7ICg/OlthLXpBLVpdW2EtekEtWl0oPzpbLV9dW2EtekEtWl1bYS16QS1aXSk/KSBCdWlsZFxcLyhbXlxcL10qKVxcLy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gLzsgKFteO10qW147XFxzXSlcXHMrQnVpbGQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IC9bYS16QS1aXVthLXpBLVpdKD86Wy1fXVthLXpBLVpdW2EtekEtWl0pPzsgKFteO10qW147XFxzXSk7XFxzK0J1aWxkLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTtVO0FuZHJvaWRcXC9bXjtdKztbMC05XStcXCpbMC05XSs7Q1RDXFwvMi4wXFwpLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSAvO1xccz8oW147XSspO1xccz9bMC05XStcXCpbMC05XSs7XFxzP0NUQ1xcLzIuMC8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL3poLWNuO1xccyooLio/KShcXC98YnVpbGQpL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL0FuZHJvaWQgW147XSs7ICg/OlthLXpBLVpdW2EtekEtWl0oPzpbLV9dW2EtekEtWl1bYS16QS1aXSk/OyApPyhbXildKylcXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdWEubWF0Y2goL1thLXpBLVpdW2EtekEtWl0oPzpbLV9dW2EtekEtWl1bYS16QS1aXSk/LykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL14oLis/KVxcL1xcUysvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLyogU29tZXRpbWVzIHdlIGdldCBhIG1vZGVsIG5hbWUgdGhhdCBzdGFydHMgd2l0aCBBbmRyb2lkLCBpbiB0aGF0IGNhc2UgaXQgaXMgYSBtaXNtYXRjaCBhbmQgd2Ugc2hvdWxkIGlnbm9yZSBpdCAqL1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS5tb2RlbCAmJiB0aGlzLmRldmljZS5tb2RlbC5zdWJzdHJpbmcoMCwgNykgPT09ICdBbmRyb2lkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV2aWNlLm1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBTkRST0lEX01PREVMU1ttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzJdICE9PSAndW5kZWZpbmVkJykgdGhpcy5kZXZpY2UudHlwZSA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsID09PSAnRW11bGF0b3InIHx8IG1vZGVsID09PSAneDg2IEVtdWxhdG9yJyB8fCBtb2RlbCA9PT0gJ3g4NiBWaXJ0dWFsQm94JyB8fCBtb2RlbCA9PT0gJ3ZtJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZW11bGF0b3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0hQIGVTdGF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0hQJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnZVN0YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RhYmxldCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1ByZVxcLzEuMCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdQYWxtJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUHJlJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMS4xJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1BhbG0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQcmUgUGx1cyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1ByZVxcLzEuMicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdQYWxtJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUHJlIDInO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQcmVcXC8zLjAnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnSFAnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQcmUgMyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1BpeGlcXC8xLjAnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUGFsbSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1BpeGknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQaXhpXFwvMS4xJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1BhbG0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQaXhpIFBsdXMnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQMTYwVU4/QT9cXC8xLjAnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnSFAnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdWZWVyJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBHb29nbGUgVFZcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0dvb2dsZVRWJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnR29vZ2xlIFRWJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnQ2hyb21lLzUuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0Nocm9tZS8xMS4nKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzInXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdvUGhvbmVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1dvUGhvbmUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXb1Bob25lJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Xb1Bob25lXFwvKFswLTlcXC5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJsYWNrQmVycnlcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0JsYWNrQmVycnknKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdCbGFja0JlcnJ5IE9TJztcblxuICAgICAgICAgICAgICAgIGlmICghdWEubWF0Y2goJ09wZXJhJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0JsYWNrQmVycnkoWzAtOV0qKVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLzsgQmxhY2tCZXJyeSAoWzAtOV0qKTsvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbiA+PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JsYWNrQmVycnknO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRldmljZS5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQkxBQ0tCRVJSWV9NT0RFTFNbdGhpcy5kZXZpY2UubW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0JsYWNrQmVycnkgJyArIEJMQUNLQkVSUllfTU9ERUxTW3RoaXMuZGV2aWNlLm1vZGVsXSArICcgJyArIHRoaXMuZGV2aWNlLm1vZGVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdCbGFja0JlcnJ5ICcgKyB0aGlzLmRldmljZS5tb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0JsYWNrQmVycnknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnQmxhY2tCZXJyeSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1JJTSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBCbGFja0JlcnJ5IFBsYXlCb29rXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdSSU0gVGFibGV0IE9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQmxhY2tCZXJyeSBUYWJsZXQgT1MnO1xuICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVhLm1hdGNoKC9SSU0gVGFibGV0IE9TIChbMC05Ll0qKS8pWzFdLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUklNJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdCbGFja0JlcnJ5IFBsYXlCb29rJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RhYmxldCc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVhLm1hdGNoKCdQbGF5Qm9vaycpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oMTBbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JsYWNrQmVycnknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdSSU0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdCbGFja0JlcnJ5IFBsYXlCb29rJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgV2ViT1NcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJyg/OndlYnxocHcpT1MnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICd3ZWJPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdWEubWF0Y2goLyg/OndlYnxocHcpT1NcXC8oWzAtOS5dKikvKVsxXVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCd0YWJsZXQnKSkgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gdWEubWF0Y2goJ2hwd09TJykgPyAnSFAnIDogJ1BhbG0nO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMS4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1ByZSc7XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQcmVcXC8xLjEnKSkgdGhpcy5kZXZpY2UubW9kZWwgPSAnUHJlIFBsdXMnO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMS4yJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1ByZTInO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUHJlXFwvMy4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1ByZTMnO1xuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUGl4aVxcLzEuMCcpKSB0aGlzLmRldmljZS5tb2RlbCA9ICdQaXhpJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1BpeGlcXC8xLjEnKSkgdGhpcy5kZXZpY2UubW9kZWwgPSAnUGl4aSBQbHVzJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1AxNjBVTj9BP1xcLzEuMCcpKSB0aGlzLmRldmljZS5tb2RlbCA9ICdWZWVyJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ1RvdWNoUGFkXFwvMS4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1RvdWNoUGFkJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRW11bGF0b3JcXC8nKSB8fCB1YS5tYXRjaCgnRGVza3RvcFxcLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZW11bGF0b3InO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFM2MFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU3ltYmlhbicpIHx8IHVhLm1hdGNoKCdTZXJpZXNbIF0/NjAnKSB8fCB1YS5tYXRjaCgnUzYwJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU2VyaWVzNjAnO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdTeW1iaWFuT1MvOS4xJykgJiYgIXVhLm1hdGNoKCdTZXJpZXM2MCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMy4wJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvU2VyaWVzNjBcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTm9raWEoW15cXC87XSspW1xcL3w7XS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdICE9PSAnQnJvd3NlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdOb2tpYSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvVmVydHUoW15cXC87XSspW1xcL3w7XS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1ZlcnR1JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1N5bWJpYW47IFU7IChbXjtdKyk7IFthLXpdW2Etel1cXC1bYS16XVthLXpdL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1NhbXN1bmdcXC8oW147XSopOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19TQU1TVU5HO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFM0MFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU2VyaWVzNDAnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdTZXJpZXM0MCc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTm9raWEoW15cXC9dKylcXC8vLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdOb2tpYSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTWVlR29cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ01lZUdvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnTWVlR28nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Ob2tpYShbXlxcKV0rKVxcKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNYWVtb1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnTWFlbW8nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdNYWVtbyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLyhOWzAtOV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBUaXplblxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnVGl6ZW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdUaXplbic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvVGl6ZW5bXFwvIF0oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTsgKFteXFwvXSspXFwvLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0gIT09ICdMaW51eCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBUSVpFTl9NT0RFTFNbdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFRJWkVOX01PREVMU1t0aGlzLmRldmljZS5tYW51ZmFjdHVyZXJdW3RoaXMuZGV2aWNlLm1vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFudWZhY3R1cmVyID0gdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBUSVpFTl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBUSVpFTl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJhZGFcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1tifEJdYWRhJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQmFkYSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvW2J8Ql1hZGFcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTsgKFteXFwvXSspXFwvLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMl0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQkFEQV9NT0RFTFNbdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEJBREFfTU9ERUxTW3RoaXMuZGV2aWNlLm1hbnVmYWN0dXJlcl1bdGhpcy5kZXZpY2UubW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFudWZhY3R1cmVyID0gdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZWwgPSBjbGVhbnVwTW9kZWwodGhpcy5kZXZpY2UubW9kZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IEJBREFfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEJBREFfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJyZXdcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goL0JSRVcvaSkgfHwgdWEubWF0Y2goJ0JNUDsgVScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JyZXcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9CUkVXOyBVOyAoWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IC87QlJFV1xcLyhbMC05Ll0qKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9cXCgoW147XSspO1U7UkVYXFwvW147XSs7QlJFV1xcL1teO10rOyg/Oi4qOyk/WzAtOV0rXFwqWzAtOV0rO0NUQ1xcLzIuMFxcKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXZpY2UubW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKHRoaXMuZGV2aWNlLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEJSRVdfTU9ERUxTW21vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IEJSRVdfTU9ERUxTW21vZGVsXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gQlJFV19NT0RFTFNbbW9kZWxdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE1US1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvXFwoTVRLOy8pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ01USyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBDck9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdDck9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQ2hyb21lIE9TJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBKb2xpIE9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdKb2xpIE9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnSm9saSBPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdkZXNrdG9wJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Kb2xpIE9TXFwvKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSGFpa3VcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0hhaWt1JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnSGFpa3UnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZGVza3RvcCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFFOWFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnUU5YJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnUU5YJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE9TLzIgV2FycFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnT1NcXC8yOyBXYXJwJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnT1MvMiBXYXJwJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09TXFwvMjsgV2FycCAoWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBHcmlkIE9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdHcmlkIE9TJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnR3JpZCBPUyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0dyaWQgT1MgKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQW1pZ2FPU1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvQW1pZ2FPUy9pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdBbWlnYU9TJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0FtaWdhT1MgKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNb3JwaE9TXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKC9Nb3JwaE9TL2kpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ01vcnBoT1MnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTW9ycGhPUyAoWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEtpbmRsZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnS2luZGxlJykgJiYgIXVhLm1hdGNoKCdGaXJlJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdBbWF6b24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0tpbmRsZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdlcmVhZGVyJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnS2luZGxlXFwvMi4wJykpIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0tpbmRsZSAyJztcbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0tpbmRsZVxcLzMuMCcpKSB0aGlzLmRldmljZS5tb2RlbCA9ICdLaW5kbGUgMyBvciBsYXRlcic7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTk9PS1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnbm9vayBicm93c2VyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQW5kcm9pZCc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQmFybmVzICYgTm9ibGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ05PT0snO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZXJlYWRlcic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEJvb2tlZW5cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ2Jvb2tlZW5cXC9jeWJvb2snKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0Jvb2tlZW4nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0N5Ym9vayc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdlcmVhZGVyJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnT3Jpem9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnQ3lib29rIE9yaXpvbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFNvbnkgUmVhZGVyXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdFQlJEMTEwMScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnU29ueSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUmVhZGVyJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2VyZWFkZXInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBpUml2ZXJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0lyaXZlciA7JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdpUml2ZXInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1N0b3J5JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2VyZWFkZXInO1xuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdFQjA3JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnU3RvcnkgSEQgRUIwNyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE5pbnRlbmRvXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjMwIChOaW50ZW5kbyBXaWk7IFU7IDsgMzY0MjsgZW4pXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuMzAgKE5pbnRlbmRvIFdpaTsgVTsgOyAyMDQ3LTc7IGVuKVxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjUwIChOaW50ZW5kbyBEU2k7IE9wZXJhLzUwNzsgVTsgZW4tVVMpXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChOaW50ZW5kbyAzRFM7IFU7IDsgZW4pIFZlcnNpb24vMS43NDU1LlVTXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChOaW50ZW5kbyAzRFM7IFU7IDsgZW4pIFZlcnNpb24vMS43NDU1LkVVXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdOaW50ZW5kbyBXaWknKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05pbnRlbmRvJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdXaWknO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdOaW50ZW5kbyBEU2knKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05pbnRlbmRvJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdEU2knO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdOaW50ZW5kbyAzRFMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05pbnRlbmRvJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICczRFMnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9WZXJzaW9uXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQbGF5U3RhdGlvbiBQb3J0YWJsZScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnU29ueSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUGxheXN0YXRpb24gUG9ydGFibGUnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnZ2FtaW5nJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdQbGF5U3RhdGlvbiBWaXRhJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9QbGF5U3RhdGlvbiBWaXRhIChbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTb255JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdQbGF5U3RhdGlvbiBWaXRhJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2dhbWluZyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvUGxheVN0YXRpb24gMy9pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1BMQVlTVEFUSU9OIDM7PyAoWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnU29ueSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnUGxheXN0YXRpb24gMyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdnYW1pbmcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBQYW5hc29uaWMgU21hcnQgVmllcmFcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChGcmVlQlNEOyBVOyBWaWVyYTsgamEtSlApIEFwcGxlV2ViS2l0LzUzNS4xIChLSFRNTCwgbGlrZSBHZWNrbykgVmllcmEvMS4yLjQgQ2hyb21lLzE0LjAuODM1LjIwMiBTYWZhcmkvNTM1LjFcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1ZpZXJhJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUGFuYXNvbmljJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdTbWFydCBWaWVyYSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBTaGFycCBBUVVPUyBUVlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERUVikgQXBwbGVXZWJLaXQvNTMxLjIgIChLSFRNTCwgbGlrZSBHZWNrbykgQVFVT1NCcm93c2VyLzEuMCAoVVMwMERUVjtWOzAwMDE7MDAwMSlcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERUVikgQXBwbGVXZWJLaXQvNTMxLjIrIChLSFRNTCwgbGlrZSBHZWNrbykgRXNwaWFsLzYuMC40IEFRVU9TQnJvd3Nlci8xLjAgKENIMDBEVFY7VjswMDAxOzAwMDEpXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY2bDsgVTsgZW4pIFByZXN0by8yLjguMTE1IFZlcnNpb24vMTEuMTAgQVFVT1MtQVMvMS4wIExDLTQwTEU4MzVYXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdBUVVPU0Jyb3dzZXInKSB8fCB1YS5tYXRjaCgnQVFVT1MtQVMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfU0hBUlA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnQXF1b3MgVFYnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgU2Ftc3VuZyBTbWFydCBUVlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKFNtYXJ0SHViOyBTTUFSVC1UVjsgVTsgTGludXgvU21hcnRUVjsgTWFwbGUyMDEyKSBBcHBsZVdlYktpdC81MzQuNyAoS0hUTUwsIGxpa2UgR2Vja28pIFNtYXJ0VFYgU2FmYXJpLzUzNC43XG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChTbWFydEh1YjsgU01BUlQtVFY7IFU7IExpbnV4L1NtYXJ0VFYpIEFwcGxlV2ViS2l0LzUzMS4yKyAoS0hUTUwsIGxpa2UgR2Vja28pIFdlYkJyb3dzZXIvMS4wIFNtYXJ0VFYgU2FmYXJpLzUzMS4yK1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU01BUlQtVFYnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfU0FNU1VORztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdTbWFydCBUVic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NYXBsZShbMC05XSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCArPSAnICcgKyBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFNvbnkgSW50ZXJuZXQgVFZcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY3bDsgVTsgSW5ldHR2QnJvd3Nlci8yLjIoMDAwMTRBO1NvbnlEVFYxMTU7MDAwMjswMTAwKSBLREwtNDZFWDY0MDsgQ0MvVVNBOyBlbikgUHJlc3RvLzIuOC4xMTUgVmVyc2lvbi8xMS4xMFxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjgwIChMaW51eCBhcm12N2w7IFU7IEluZXR0dkJyb3dzZXIvMi4yKDAwMDE0QTtTb255RFRWMTE1OzAwMDI7MDEwMCkgS0RMLTQwRVg2NDA7IENDL1VTQTsgZW4pIFByZXN0by8yLjEwLjI1MCBWZXJzaW9uLzExLjYwXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY3bDsgVTsgSW5ldHR2QnJvd3Nlci8yLjIoMDAwMTRBO1NvbnlEVFYxMTU7MDAwMjswMTAwKSBOL0E7IENDL1VTQTsgZW4pIFByZXN0by8yLjguMTE1IFZlcnNpb24vMTEuMTBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggbWlwczsgVTsgSW5ldHR2QnJvd3Nlci8yLjIgKDAwMDE0QTtTb255RFRWMTE1OzAwMDI7MDEwMCkgOyBDQy9KUE47IGVuKSBQcmVzdG8vMi45LjE2NyBWZXJzaW9uLzExLjUwXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IG1pcHM7IFU7IEluZXR0dkJyb3dzZXIvMi4yICgwMDAxNEE7U29ueURUVjExNTswMDAyOzAxMDApIEFaMkNWVDI7IENDL0NBTjsgZW4pIFByZXN0by8yLjcuNjEgVmVyc2lvbi8xMS4wMFxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjgwIChMaW51eCBhcm12Nmw7IE9wZXJhIFRWIFN0b3JlLzQyMDc7IFU7IChTb255QkRQL0JEVjExKTsgZW4pIFByZXN0by8yLjkuMTY3IFZlcnNpb24vMTEuNTBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggYXJtdjZsIDsgVTsgKFNvbnlCRFAvQkRWMTEpOyBlbikgUHJlc3RvLzIuNi4zMyBWZXJzaW9uLzEwLjYwXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY2bDsgVTsgKFNvbnlCRFAvQkRWMTEpOyBlbikgUHJlc3RvLzIuOC4xMTUgVmVyc2lvbi8xMS4xMFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU29ueURUVnxTb255QkRQfFNvbnlDRUJyb3dzZXInKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTb255JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdJbnRlcm5ldCBUVic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgUGhpbGlwcyBOZXQgVFZcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuNzAgKExpbnV4IGFybXY2bCA7IFU7IENFLUhUTUwvMS4wIE5FVFRWLzIuMC4yOyBlbikgUHJlc3RvLzIuMi4xXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhLzkuODAgKExpbnV4IGFybXY2bCA7IFU7IENFLUhUTUwvMS4wIE5FVFRWLzMuMC4xOzsgZW4pIFByZXN0by8yLjYuMzMgVmVyc2lvbi8xMC42MFxuICAgICAgICAgICAgICogICAgICBPcGVyYS85LjgwIChMaW51eCBtaXBzOyBVOyBDRS1IVE1MLzEuMCBORVRUVi8zLjAuMTsgUEhJTElQUy1BVk0tMjAxMjsgZW4pIFByZXN0by8yLjkuMTY3IFZlcnNpb24vMTEuNTBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggbWlwcyA7IFU7IEhiYlRWLzEuMS4xICg7IFBoaWxpcHM7IDsgOyA7ICkgQ0UtSFRNTC8xLjAgTkVUVFYvMy4xLjA7IGVuKSBQcmVzdG8vMi42LjMzIFZlcnNpb24vMTAuNzBcbiAgICAgICAgICAgICAqICAgICAgT3BlcmEvOS44MCAoTGludXggaTY4NjsgVTsgSGJiVFYvMS4xLjEgKDsgUGhpbGlwczsgOyA7IDsgKSBDRS1IVE1MLzEuMCBORVRUVi8zLjEuMDsgZW4pIFByZXN0by8yLjkuMTY3IFZlcnNpb24vMTEuNTBcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05FVFRWXFwvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnUGhpbGlwcyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnTmV0IFRWJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBMRyBOZXRDYXN0IFRWXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoRGlyZWN0RkI7IExpbnV4IGFybXY3bCkgQXBwbGVXZWJLaXQvNTM0LjI2KyAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNS4wIFNhZmFyaS81MzQuMjYrIExHIEJyb3dzZXIvNS4wMC4wMCgrbW91c2UrM0QrU0NSRUVOK1RVTkVSOyBMR0U7IEdMT0JBTC1QTEFUNDsgMDMuMDkuMjI7IDB4MDAwMDAwMDE7KTsgTEcgTmV0Q2FzdC5UVi0yMDEyXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChEaXJlY3RGQjsgTGludXggYXJtdjdsKSBBcHBsZVdlYktpdC81MzQuMjYrIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi81LjAgU2FmYXJpLzUzNC4yNisgTEcgQnJvd3Nlci81LjAwLjAwKCtTQ1JFRU4rVFVORVI7IExHRTsgR0xPQkFMLVBMQVQ0OyAwMS4wMC4wMDsgMHgwMDAwMDAwMTspOyBMRyBOZXRDYXN0LlRWLTIwMTJcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERpcmVjdEZCOyBVOyBMaW51eCBhcm12Nmw7IGVuKSBBcHBsZVdlYktpdC81MzEuMiAgKEtIVE1MLCBsaWtlIEdlY2tvKSBTYWZhcmkvNTMxLjIgIExHIEJyb3dzZXIvNC4xLjQoIEJEUDsgTEdFOyBNZWRpYS9CRDY2MDsgNjk3MDsgYWJjOyk7IExHIE5ldENhc3QuTWVkaWEtMjAxMVxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoRGlyZWN0RkI7IFU7IExpbnV4IDc2MzE7IGVuKSBBcHBsZVdlYktpdC81MzEuMiAgKEtIVE1MLCBsaWtlIEdlY2tvKSBTYWZhcmkvNTMxLjIgIExHIEJyb3dzZXIvNC4xLjQoIE5PX05VTTsgTEdFOyBNZWRpYS9TUDUyMDsgU1QuMy45Ny40MDkuRjsgMHgwMDAwMDAwMTspOyBMRyBOZXRDYXN0Lk1lZGlhLTIwMTFcbiAgICAgICAgICAgICAqICAgICAgTW96aWxsYS81LjAgKERpcmVjdEZCOyBVOyBMaW51eCA3NjMwOyBlbikgQXBwbGVXZWJLaXQvNTMxLjIgIChLSFRNTCwgbGlrZSBHZWNrbykgU2FmYXJpLzUzMS4yICBMRyBCcm93c2VyLzQuMS40KCAzRCBCRFAgTk9fTlVNOyBMR0U7IE1lZGlhL1NUNjAwOyBMRyBOZXRDYXN0Lk1lZGlhLTIwMTFcbiAgICAgICAgICAgICAqICAgICAgKExHU21hcnRUVi8xLjApIEFwcGxlV2ViS2l0LzUzNC4yMyBPQklHTy1UMTAvMi4wXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL0xHIE5ldENhc3RcXC4oPzpUVnxNZWRpYSktKFswLTldKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19MRztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdOZXRDYXN0IFRWICcgKyBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvTEdTbWFydFRWLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfTEc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnU21hcnQgVFYnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRvc2hpYmEgU21hcnQgVFZcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgICAgIE1vemlsbGEvNS4wIChMaW51eCBtaXBzZWw7IFU7IEhiYlRWLzEuMS4xICg7IFRPU0hJQkE7IERUVl9STDk1MzsgNTYuNy42Ni43OyB0MTI7ICkgOyBUb3NoaWJhVFAvMS4zLjAgKCtWSURFT19NUDQrVklERU9fWF9NU19BU0YrQVVESU9fTVBFRytBVURJT19NUDQrRFJNK05BVElWRUxBVU5DSCkgOyBlbikgQXBwbGVXZWJLaXQvNTM0LjEgKEtIVE1MLCBsaWtlIEdlY2tvKVxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoRFRWOyBUU0JOZXRUVi9UMzIwMTM3MTMuMDIwMy43REQ7IFRWd2l0aFZpZGVvUGxheWVyOyBsaWtlIEdlY2tvKSBOZXRGcm9udC80LjEgRFRWTmV0QnJvd3Nlci8yLjIgKDAwMDAzOTtUMzIwMTM3MTM7MDIwMzs3REQpIEluZXR0dkJyb3dzZXIvMi4yICgwMDAwMzk7VDMyMDEzNzEzOzAyMDM7N0REKVxuICAgICAgICAgICAgICogICAgICBNb3ppbGxhLzUuMCAoTGludXggbWlwc2VsOyBVOyBIYmJUVi8xLjEuMSAoOyBUT1NISUJBOyA0MFBYMjAwOyAwLjcuMy4wLjsgdDEyOyApIDsgVG9zaGliYV9UUC8xLjMuMCAoK1ZJREVPX01QNCtBVURJT19NUEVHK0FVRElPX01QNCtWSURFT19YX01TX0FTRitPRkZMSU5FQVBQKSA7IGVuKSBBcHBsZVdlYktpdC81MzQuMSAoS0hUTUwsIGxpa2UgR2VjXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdUb3NoaWJhXz9UUFxcLycpIHx8IHVhLm1hdGNoKCdUU0JOZXRUVlxcLycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1Rvc2hpYmEnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1NtYXJ0IFRWJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNYWNoQmx1ZSBYVFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9tYnh0V2ViS2l0XFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ01hY2hCbHVlIFhUJ1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBBREJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoQURCOyAoW15cXCldKylcXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ0FEQic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAobWF0Y2hbMV0gIT09ICdVbmtub3duJyA/IG1hdGNoWzFdLnJlcGxhY2UoJ0FEQicsICcnKSArICcgJyA6ICcnKSArICdJUFRWIHJlY2VpdmVyJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNU3RhclxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgvTXN0YXI7T1dCLykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTVN0YXInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ1BWUic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09yaWd5biBXZWIgQnJvd3Nlcic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRlY2huaVNhdFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9cXFRlY2huaVNhdCAoW147XSspOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVGVjaG5pU2F0JztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRlY2huaWNvbG9yXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL1xcVGVjaG5pY29sb3JfKFteO10rKTsvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1RlY2huaWNvbG9yJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdpbmJveCBFdm8yXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL1dpbmJveCBFdm8yLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdXaW5ib3gnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0V2bzInO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFJva3VcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvXlJva3VcXC9EVlAtKFswLTldKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1Jva3UnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzIwMDAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnSEQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzIwNTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnWEQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzIxMDAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnWERTJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcyNDAwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJ0xUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICczMDAwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gJzIgSEQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzMwNTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnMiBYRCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMzEwMCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICcyIFhTJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvSGJiVFZcXC8xLjEuMSBcXChbXjtdKjtcXHMqKFteO10qKVxccyo7XFxzKihbXjtdKilcXHMqOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmVuZG9yTmFtZSA9IG1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB2YXIgbW9kZWxOYW1lID0gbWF0Y2hbMl0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgJiYgdmVuZG9yTmFtZSAhPT0gJycgJiYgdmVuZG9yTmFtZSAhPT0gJ3ZlbmRvck5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmVuZG9yTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTEdFJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTEcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVE9TSElCQSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ1Rvc2hpYmEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc21hcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9ICdTbWFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0djJuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnVFYyTic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IHZlbmRvck5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGV2aWNlLm1vZGVsICYmIG1vZGVsTmFtZSAhPT0gJycgJiYgbW9kZWxOYW1lICE9PSAnbW9kZWxOYW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtb2RlbE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHTE9CQUxfUExBVDMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdOZXRDYXN0IFRWJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU21hcnRUVjIwMTInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdTbWFydCBUViAyMDEyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndmlkZW93ZWInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9ICdWaWRlb3dlYic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbW9kZWxOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVuZG9yTmFtZSA9PT0gJ0h1bWF4Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gdGhpcy5kZXZpY2UubW9kZWwudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIERldGVjdCB0eXBlIGJhc2VkIG9uIGNvbW1vbiBpZGVudGlmaWVyc1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSW5ldHR2QnJvd3NlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdNSURQJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRyeSB0byBkZXRlY3QgYW55IGRldmljZXMgYmFzZWQgb24gY29tbW9uXG4gICAgICAgICAgICAgKiAgICAgIGxvY2F0aW9ucyBvZiBtb2RlbCBpZHNcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGV2aWNlLm1vZGVsICYmICF0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2FuZGlkYXRlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF1YS5tYXRjaCgvXihNb3ppbGxhfE9wZXJhKS8pKSBpZiAobWF0Y2ggPSAvXig/Ok1RUUJyb3dzZXJcXC9bMC05XFwuXStcXC8pPyhbXlxcc10rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKC9fVEQkLywgJycpO1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoL19DTUNDJC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKC9bXyBdTW96aWxsYSQvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSgvIExpbnV4JC8sICcnKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKC8gT3BlcmEkLywgJycpO1xuICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoL1xcL1swLTldLiokLywgJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1swLTldK3hbMC05XSs7IChbXjtdKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1swLTldK1hbMC05XSsgKFteO1xcL1xcKFxcKV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvV2luZG93cyBOVCA1LjE7IChbXjtdKyk7IFdpbmRvd3MgUGhvbmUvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1xcKSBQUEM7ICg/OlswLTldK3hbMC05XSs7ICk/KFteO1xcL1xcKFxcKV0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKFteO10rKTsgVTsgV2luZG93cyBNb2JpbGUvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZvZGFmb25lXFwvMS4wXFwvKFteXFwvXSspLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2gobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9cXCAoW15cXHNdKykkLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2gobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXZpY2UubW9kZWwgJiYgIXRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKGNhbmRpZGF0ZXNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEFORFJPSURfTU9ERUxTW21vZGVsXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBTkRST0lEX01PREVMU1ttb2RlbF1bMl0gIT09ICd1bmRlZmluZWQnKSB0aGlzLmRldmljZS50eXBlID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9zLm5hbWUgfHwgdGhpcy5vcy5uYW1lID09PSAnV2luZG93cycgfHwgdGhpcy5vcy5uYW1lID09PSAnV2luZG93cyBNb2JpbGUnIHx8IHRoaXMub3MubmFtZSA9PT0gJ1dpbmRvd3MgQ0UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBXSU5ET1dTX01PQklMRV9NT0RFTFNbbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBXSU5ET1dTX01PQklMRV9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IFdJTkRPV1NfTU9CSUxFX01PREVMU1ttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSAhPT0gJ1dpbmRvd3MgTW9iaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1dpbmRvd3MgTW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXkdJT05FRS0oW15cXHNdKykvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnR2lvbmVlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IGNsZWFudXBNb2RlbChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXkhUQ18/KFteXFwvX10rKSg/OlxcL3xffCQpLy5leGVjKGNhbmRpZGF0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19IVEM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15IVUFXRUktKFteXFwvXSopLy5leGVjKGNhbmRpZGF0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19IVUFXRUk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLyg/Ol58XFwoKUxHRT8oPzpcXC98LXxffFxccykoW15cXHNdKikvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBTVFJJTkdTX0xHO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gY2xlYW51cE1vZGVsKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9eTU9ULShbXlxcL19dKykoPzpcXC98X3wkKS8uZXhlYyhjYW5kaWRhdGVzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfTU9UT1JPTEE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15Nb3Rvcm9sYV8oW15cXC9fXSspKD86XFwvfF98JCkvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBTVFJJTkdTX01PVE9ST0xBO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gY2xlYW51cE1vZGVsKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9eTm9raWEoW15cXC9dKykoPzpcXC98JCkvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnTm9raWEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gY2xlYW51cE1vZGVsKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UuaWRlbnRpZmllZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3MubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnU2VyaWVzNDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15Tb255RXJpY3Nzb24oW15cXC9fXSspKD86XFwvfF98JCkvLmV4ZWMoY2FuZGlkYXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBTVFJJTkdTX1NPTllfRVJJQ1NTT047XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBjbGVhbnVwTW9kZWwobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15TQU1TVU5HLShbXlxcL19dKykoPzpcXC98X3wkKS8uZXhlYyhjYW5kaWRhdGVzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IFNUUklOR1NfU0FNU1VORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IGNsZWFudXBNb2RlbChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ0JhZGEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW51ZmFjdHVyZXIgPSAnU0FNU1VORyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSAvSmFzbWluZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbnVmYWN0dXJlciA9ICdTQU1TVU5HJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGVsID0gY2xlYW51cE1vZGVsKHRoaXMuZGV2aWNlLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFRPVUNIV0laX01PREVMU1ttYW51ZmFjdHVyZXJdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgVE9VQ0hXSVpfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gVE9VQ0hXSVpfTU9ERUxTW21hbnVmYWN0dXJlcl1bbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBUT1VDSFdJWl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ1RvdWNod2l6JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzIuMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IC9Eb2xmaW5cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYW51ZmFjdHVyZXIgPSAnU0FNU1VORyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBCQURBX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gQkFEQV9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0JhZGEnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyLjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzEuMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzIuMic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMS4yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMy4wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcyLjAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgVE9VQ0hXSVpfTU9ERUxTW21hbnVmYWN0dXJlcl0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBUT1VDSFdJWl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBUT1VDSFdJWl9NT0RFTFNbbWFudWZhY3R1cmVyXVttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IFRPVUNIV0laX01PREVMU1ttYW51ZmFjdHVyZXJdW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnVG91Y2h3aXonO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxLjAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJzEuMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEuNSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMi4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMi4wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICczLjAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvXFwoKD86TEdbLXxcXC9dKSguKikgKD86QnJvd3NlclxcLyk/QXBwbGVXZWJraXQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gU1RSSU5HU19MRztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL15Nb3ppbGxhXFwvNS4wIFxcKCg/Ok5va2lhfE5PS0lBKSg/Olxccz8pKFteXFwpXSspXFwpVUMgQXBwbGVXZWJraXRcXChsaWtlIEdlY2tvXFwpIFNhZmFyaVxcLzUzMCQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gJ05va2lhJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdTZXJpZXM2MCc7XG4gICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBTYWZhcmlcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1NhZmFyaScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ2lPUycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1NhZmFyaSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ01hYyBPUyBYJyB8fCB0aGlzLm9zLm5hbWUgPT09ICdXaW5kb3dzJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdTYWZhcmknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSB0aGlzLm9zLm5hbWUgPT09ICdNYWMgT1MgWCc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ZlcnNpb25cXC8oWzAtOVxcLl0rKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goL0FwcGxlV2ViS2l0XFwvWzAtOVxcLl0rXFwrLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1dlYktpdCBOaWdodGx5IEJ1aWxkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ01TSUUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0ludGVybmV0IEV4cGxvcmVyJztcblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSUVNb2JpbGUnKSB8fCB1YS5tYXRjaCgnV2luZG93cyBDRScpIHx8IHVhLm1hdGNoKCdXaW5kb3dzIFBob25lJykgfHwgdWEubWF0Y2goJ1dQNycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ01vYmlsZSBJbnRlcm5ldCBFeHBsb3Jlcic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01TSUUgKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE9wZXJhXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKC9PcGVyYS9pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09wZXJhJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9PcGVyYVtcXC98IF0oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9WZXJzaW9uXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtYXRjaFsxXSkgPj0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24gJiYgdWEubWF0Y2goJ0VkaXRpb24gTGFicycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uLnR5cGUgPSAnYWxwaGEnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdMYWJzJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24gJiYgdWEubWF0Y2goJ0VkaXRpb24gTmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uLnR5cGUgPSAnYWxwaGEnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdOZXh0JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ09wZXJhIFRhYmxldCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09wZXJhIE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGFibGV0JztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ09wZXJhIE1vYmknKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBNb2JpbGUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09wZXJhIE1pbmk7Ly5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBNaW5pJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdwcm94eSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvT3BlcmEgTWluaVxcLyg/OmF0dFxcLyk/KFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBNaW5pJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAtMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAncHJveHknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnT3BlcmEnICYmIHRoaXMuZGV2aWNlLnR5cGUgPT09ICdtb2JpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09wZXJhIE1vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKC9CRVIvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT3BlcmEgTWluaSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0luZXR0dkJyb3dzZXInKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnT3BlcmEgVFYnKSB8fCB1YS5tYXRjaCgnT3BlcmEtVFYnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAndGVsZXZpc2lvbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdMaW51eCB6Ym92JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT3BlcmEgTW9iaWxlJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdMaW51eCB6dmF2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT3BlcmEgTWluaSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBGaXJlZm94XG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdGaXJlZm94JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9GaXJlZm94XFwvKFswLTlhYi5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIudmVyc2lvbi50eXBlID09PSAnYWxwaGEnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5jaGFubmVsID0gJ0F1cm9yYSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci52ZXJzaW9uLnR5cGUgPT09ICdiZXRhJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdCZXRhJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0Zlbm5lYycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ01vYmlsZTsgcnYnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdUYWJsZXQ7IHJ2JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0YWJsZXQnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS50eXBlID09PSAnbW9iaWxlJyB8fCB0aGlzLmRldmljZS50eXBlID09PSAndGFibGV0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94IE1vYmlsZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05hbW9yb2thJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9OYW1vcm9rYVxcLyhbMC05YWIuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdOYW1vcm9rYSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU2hpcmV0b2tvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlZm94JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9TaGlyZXRva29cXC8oWzAtOWFiLl0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnU2hpcmV0b2tvJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdNaW5lZmllbGQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0ZpcmVmb3gnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01pbmVmaWVsZFxcLyhbMC05YWIuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICdNaW5lZmllbGQnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ0ZpcmViaXJkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdGaXJlYmlyZCc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvRmlyZWJpcmRcXC8oWzAtOWFiLl0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBTZWFNb25rZXlcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ1NlYU1vbmtleScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnU2VhTW9ua2V5JztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9TZWFNb25rZXlcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTmV0c2NhcGVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05ldHNjYXBlJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdOZXRzY2FwZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTmV0c2NhcGVbMC05XT9cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgS29ucXVlcm9yXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdba3xLXW9ucXVlcm9yLycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnS29ucXVlcm9yJztcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9ba3xLXW9ucXVlcm9yXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIENocm9tZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC8oPzpDaHJvbWV8Q3JNb3xDcmlPUylcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnQ2hyb21lJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtYXRjaFsxXS5zcGxpdCgnLicsIDMpLmpvaW4oJy4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTYuMC45MTInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5jaGFubmVsID0gJ0JldGEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTguMC4xMDI1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbi5kZXRhaWxzID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnTmlnaHRseSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnNwbGl0KCcuJywgMykuam9pbignLicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwLjIuMTQ5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAuMy4xNTQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMC40LjE1NCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxLjAuMTU0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzIuMC4xNzInOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMy4wLjE5NSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0LjAuMjQ5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzQuMS4yNDknOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNS4wLjM3NSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2LjAuNDcyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzcuMC41MTcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOC4wLjU1Mic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5LjAuNTk3JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEwLjAuNjQ4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzExLjAuNjk2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEyLjAuNzQyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEzLjAuNzgyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE0LjAuODM1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE1LjAuODc0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE2LjAuOTEyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE3LjAuOTYzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzE4LjAuMTAyNSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxOS4wLjEwODQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMjAuMC4xMTMyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzIxLjAuMTE4MCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci52ZXJzaW9uLm1pbm9yID09PSAwKSB0aGlzLmJyb3dzZXIudmVyc2lvbi5kZXRhaWxzID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuYnJvd3Nlci52ZXJzaW9uLmRldGFpbHMgPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5jaGFubmVsID0gJ05pZ2h0bHknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBDaHJvbWUgRnJhbWVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ2Nocm9tZWZyYW1lJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuc3RvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdDaHJvbWUgRnJhbWUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL2Nocm9tZWZyYW1lXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIENocm9taXVtXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdDaHJvbWl1bScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdDaHJvbWl1bSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvQ2hyb21pdW1cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQnJvd3Nlck5HXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdCcm93c2VyTkcnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ05va2lhIEJyb3dzZXInO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0Jyb3dzZXJOR1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE5va2lhIEJyb3dzZXJcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05va2lhQnJvd3NlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnTm9raWEgQnJvd3Nlcic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTm9raWFCcm93c2VyXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBNaWNyb0JcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ01hZW1vWyB8X11Ccm93c2VyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdNaWNyb0InO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL01hZW1vWyB8X11Ccm93c2VyWyB8X10oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTmV0RnJvbnRcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goJ05ldEZyb250JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdOZXRGcm9udCc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL05ldEZyb250XFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodWEubWF0Y2goJ0luZXR0dkJyb3dzZXInKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgU2lsa1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnU2lsaycpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdTaWxrLUFjY2VsZXJhdGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnU2lsayc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL1NpbGtcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSAnQW1hem9uJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSAnS2luZGxlIEZpcmUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RhYmxldCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgIT09ICdBbmRyb2lkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgRG9sZmluXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdEb2xmaW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0RvbGZpbic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvRG9sZmluXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSXJpc1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSXJpcycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnSXJpcyc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnV2luZG93cyBNb2JpbGUnO1xuICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvSXJpc1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLyBXTShbMC05XSkgLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0gKyAnLjAnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5tb2RlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgSmFzbWluZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnSmFzbWluZScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnSmFzbWluZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvSmFzbWluZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBCb3hlZVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnQm94ZWUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ0JveGVlJztcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL0JveGVlXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIEVzcGlhbFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnRXNwaWFsJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdFc3BpYWwnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS50eXBlICE9PSAndGVsZXZpc2lvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Fc3BpYWxcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgQU5UIEdhbGlvXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9BTlRHYWxpb1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdBTlQgR2FsaW8nO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ3RlbGV2aXNpb24nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBOZXRGcm9udCBOWFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvTlhcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnTmV0RnJvbnQgTlgnO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvRFRWL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICd0ZWxldmlzaW9uJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID0gL21vYmlsZS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLnR5cGUgPSAnbW9iaWxlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgT2JpZ29cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goL09iaWdvL2kpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnT2JpZ28nO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09iaWdvXFwvKFswLTkuXSopL2kuZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09iaWdvXFwvKFtBLVpdKShbMC05Ll0qKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ09iaWdvICcgKyBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMl1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL09iaWdvLShbQS1aXSkoWzAtOS5dKilcXC8vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPYmlnbyAnICsgbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzJdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgVUMgV2ViXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKHVhLm1hdGNoKCdVQ1dFQicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnVUMgQnJvd3Nlcic7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvVUNXRUIoWzAtOV0qWy5dWzAtOV0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgPT09ICdMaW51eCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gL15JVUMgXFwoVTtcXHM/aU9TIChbMC05XFwuXSspOy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ2lPUyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvXkpVQyBcXChMaW51eDsgVTsgKFswLTlcXC5dKylbXjtdKjsgW147XSs7IChbXjtdKlteXFxzXSlcXHMqOyBbMC05XStcXCpbMC05XStcXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbChtYXRjaFsyXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBTkRST0lEX01PREVMU1ttb2RlbF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tYW51ZmFjdHVyZXIgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzJdICE9PSAndW5kZWZpbmVkJykgdGhpcy5kZXZpY2UudHlwZSA9IEFORFJPSURfTU9ERUxTW21vZGVsXVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLmlkZW50aWZpZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodWEubWF0Y2goL1xcKSBVQyAvKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1VDIEJyb3dzZXInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvVUNCcm93c2VyXFwvKFswLTkuXSopLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJ1VDIEJyb3dzZXInO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgTmluZVNreVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9OaW5lc2t5KD86LWFuZHJvaWQtbW9iaWxlKD86LWNuKT8pP1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdOaW5lU2t5JztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lICE9PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1hbnVmYWN0dXJlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlLm1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFNreWZpcmVcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvU2t5ZmlyZVxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdTa3lmaXJlJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9zLm5hbWUgPSAnQW5kcm9pZCc7XG4gICAgICAgICAgICAgICAgdGhpcy5vcy52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgRG9scGhpbiBIRFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9Eb2xwaGluSERDTlxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdEb2xwaGluJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lICE9PSAnQW5kcm9pZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL0RvbHBoaW5cXC9JTlQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnRG9scGhpbic7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBRUSBCcm93c2VyXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gLyhNP1FRQnJvd3NlcilcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnUVEgQnJvd3Nlcic7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbiA9IG1hdGNoWzJdO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uLm1hdGNoKC9eWzAtOV1bMC05XSQvKSkgdmVyc2lvbiA9IHZlcnNpb25bMF0gKyAnLicgKyB2ZXJzaW9uWzFdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnJ1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9zLm5hbWUgJiYgbWF0Y2hbMV0gPT09ICdRUUJyb3dzZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdXaW5kb3dzJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIGlCcm93c2VyXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gLyhpQnJvd3NlcilcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnaUJyb3dzZXInO1xuXG4gICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBtYXRjaFsyXTtcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbi5tYXRjaCgvWzAtOV1bMC05XS8pKSB2ZXJzaW9uID0gdmVyc2lvblswXSArICcuJyArIHZlcnNpb25bMV07XG5cbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuY2hhbm5lbCA9ICcnXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFB1ZmZpblxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9QdWZmaW5cXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnUHVmZmluJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS50eXBlID0gJ21vYmlsZSc7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnTGludXgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICAzNjAgRXh0cmVtZSBFeHBsb3JlclxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh1YS5tYXRjaCgnMzYwRUUnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5zdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJzM2MCBFeHRyZW1lIEV4cGxvcmVyJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIE1pZG9yaVxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NaWRvcmlcXC8oWzAtOS5dKikvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm5hbWUgPSAnTWlkb3JpJztcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lICE9PSAnTGludXgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MubmFtZSA9ICdMaW51eCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5tb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdkZXNrdG9wJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgT3RoZXJzXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgdmFyIGJyb3dzZXJzID0gW3tcbiAgICAgICAgICAgICAgICBuYW1lOiAnQWRvYmVBSVInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0Fkb2JlQUlSXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBd2Vzb21pdW0nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0F3ZXNvbWl1bVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ2FudmFjZScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvQ2FudmFjZSBTdGFuZGFsb25lXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdFa2lvaCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvRWtpb2hcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0phdmFGWCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvSmF2YUZYXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdHRlhlJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9HRlhlXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdMdWFLaXQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL2x1YWtpdC9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVGl0YW5pdW0nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1RpdGFuaXVtXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdPcGVuV2ViS2l0U2hhcnAnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL09wZW5XZWJLaXRTaGFycC9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUHJpc20nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1ByaXNtXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdRdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXRcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0RW1iZWRkZWQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1F0RW1iZWRkZWQvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0RW1iZWRkZWQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1F0RW1iZWRkZWQuKlF0XFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdSaG9TaW11bGF0b3InLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1Job1NpbXVsYXRvci9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVVdlYktpdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVVdlYktpdFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUGhhbnRvbUpTJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9QaGFudG9tSlNcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0dvb2dsZSBXZWIgUHJldmlldycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvR29vZ2xlIFdlYiBQcmV2aWV3L1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdHb29nbGUgRWFydGgnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0dvb2dsZSBFYXJ0aFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRUEgT3JpZ2luJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9PcmlnaW5cXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NlY29uZExpZmUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NlY29uZExpZmVcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1ZhbHZlIFN0ZWFtJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9WYWx2ZSBTdGVhbS9cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU29uZ2JpcmQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NvbmdiaXJkXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUaHVuZGVyYmlyZCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVGh1bmRlcmJpcmRcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Ficm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9BYnJvd3NlclxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXJvcmEnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1tBYV1yb3JhXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdCYWlkdSBCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9NP0JhaWR1QnJvd3NlclxcLyhbMC05Ll0qKS9pXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0NhbWlubycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvQ2FtaW5vXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDYW51cmUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0NhbnVyZVxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDb21ldEJpcmQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0NvbWV0QmlyZFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29tb2RvIERyYWdvbicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvQ29tb2RvX0RyYWdvblxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDb25rZXJvcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvW0NjXW9ua2Vyb3JcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Nvb2xOb3ZvJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC8oPzpDb29sTm92b3xDb29sTm92b0Nocm9tZVBsdXMpXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Nocm9tZVBsdXMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0Nocm9tZVBsdXMoPzpcXC8oWzAtOS5dKikpPyQvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRGFlZGFsdXMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0RhZWRhbHVzIChbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdEZW1vYnJvd3NlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvZGVtb2Jyb3dzZXJcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0Rvb2JsZScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvRG9vYmxlKD86XFwvKFswLTkuXSopKT8vXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0RXQicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvZHdiKD86LWhnKT8oPzpcXC8oWzAtOS5dKikpPy9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRXBpcGhhbnknLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0VwaXBoYW55XFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdGaXJlV2ViJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9GaXJlV2ViXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdGbG9jaycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvRmxvY2tcXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnR2FsZW9uJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9HYWxlb25cXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSGVsaXVtJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9IZWxpdW1Nb2JpbGVCcm93c2VyXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpQ2FiJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9pQ2FiXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJY2VhcGUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0ljZWFwZVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSWNlQ2F0JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9JY2VDYXQgKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJY2V3ZWFzZWwnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0ljZXdlYXNlbFxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW50ZXJuZXRTdXJmYm9hcmQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0ludGVybmV0U3VyZmJvYXJkXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdJcm9uJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9Jcm9uXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0lzaXMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0Jyb3dzZXJTZXJ2ZXIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0p1bWFuamknLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL2p1bWFuamkvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0themVoYWthc2UnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0themVoYWthc2VcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0tDaHJvbWUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0tDaHJvbWVcXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSy1NZWxlb24nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL0stTWVsZW9uXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdMZWVjaGNyYWZ0JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9MZWVjaGNyYWZ0KD86XFwvKFswLTkuXSopKT8vLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTGlnaHRuaW5nJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9MaWdodG5pbmdcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0x1bmFzY2FwZScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvTHVuYXNjYXBlW1xcL3wgXShbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpTHVuYXNjYXBlJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9pTHVuYXNjYXBlXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ01heHRob24nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01heHRob25bXFwvIF0oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTWluaUJyb3dzZXInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01pbmlCcj9vd3Nlck1cXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ01pbmlCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9NaW5pQnJvd3Nlck1vYmlsZVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTWl4U2hhcmsnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01peFNoYXJrXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdNb3Rvcm9sYSBXZWJLaXQnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL01vdG9yb2xhV2ViS2l0XFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ05ldEZyb250IExpZmVCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9OZXRGcm9udExpZmVCcm93c2VyXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdOZXRzY2FwZSBOYXZpZ2F0b3InLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL05hdmlnYXRvclxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogM1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdPZHlzc2V5JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9PV0JcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ09tbmlXZWInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL09tbmlXZWIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ09yY2EnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL09yY2FcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ09yaWd5bicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvT3JpZ3luIFdlYiBCcm93c2VyL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdQYWxlbW9vbicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUGFsZVttTV1vb25cXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1BoYW50b20nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1BoYW50b21cXC9WKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdQb2xhcmlzJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9Qb2xhcmlzXFwvdj8oWzAtOS5dKikvaSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0Q3JlYXRvcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXRDcmVhdG9yXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdRdFFtbFZpZXdlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXRRbWxWaWV3ZXIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0VGVzdEJyb3dzZXInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1F0VGVzdEJyb3dzZXJcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1F0V2ViJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9RdFdlYiBJbnRlcm5ldCBCcm93c2VyXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdRdXBaaWxsYScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUXVwWmlsbGFcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JvY2NhdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUm9jY2F0XFwvKFswLTldXFwuWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JhdmVuIGZvciBNYWMnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1JhdmVuIGZvciBNYWNcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jla29ucScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvcmVrb25xL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdSb2NrTWVsdCcsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvUm9ja01lbHRcXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2xlaXBuaXInLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NsZWlwbmlyXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NNQnJvd3NlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU01Ccm93c2VyL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTb2dvdSBFeHBsb3JlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU0UgMi5YIE1ldGFTci9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU25vd3Nob2UnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1Nub3dzaG9lXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1NwdXRuaWsnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1NwdXRuaWtcXC8oWzAtOS5dKikvaSxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1N0YWlubGVzcycsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU3RhaW5sZXNzXFwvKFswLTkuXSopL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTdW5DaHJvbWUnLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1N1bkNocm9tZVxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnU3VyZicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvU3VyZlxcLyhbMC05Ll0qKS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVGFvQnJvd3NlcicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVGFvQnJvd3NlclxcLyhbMC05Ll0qKS8sXG4gICAgICAgICAgICAgICAgZGV0YWlsczogMlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdUYW9tZWVCcm93c2VyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9UYW9tZWVCcm93c2VyXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1RheldlYicsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVGF6V2ViL1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdWaWVyYScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVmllcmFcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1ZpbGxhbm92YScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvVmlsbGFub3ZhXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAzXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1dhdmVsaW5rIFZlbG9jaXR5JyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9XYXZlbGluayBWZWxvY2l0eSBCcm93c2VyXFwvKFswLTkuXSopLyxcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiAyXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1dlYlBvc2l0aXZlJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9XZWJQb3NpdGl2ZS9cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnV2ViUmVuZGVyJyxcbiAgICAgICAgICAgICAgICByZWdleHA6IC9XZWJSZW5kZXIvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1d5em8nLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1d5em9cXC8oWzAtOS5dKikvLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IDNcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnWmV0YWtleScsXG4gICAgICAgICAgICAgICAgcmVnZXhwOiAvWmV0YWtleSBXZWJraXRcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1pldGFrZXknLFxuICAgICAgICAgICAgICAgIHJlZ2V4cDogL1pldGFrZXlcXC8oWzAtOS5dKikvXG4gICAgICAgICAgICB9XVxuXG4gICAgICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8IGJyb3dzZXJzLmxlbmd0aDsgYisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gYnJvd3NlcnNbYl0ucmVnZXhwLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gYnJvd3NlcnNbYl0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLmNoYW5uZWwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnN0b2NrID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczogYnJvd3NlcnNbYl0uZGV0YWlscyB8fCBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFdlYktpdFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9XZWJLaXRcXC8oWzAtOS5dKikvaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnV2Via2l0JztcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL0Jyb3dzZXJcXC9BcHBsZVdlYktpdChbMC05Ll0qKS9pLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUubmFtZSA9ICdXZWJraXQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBLSFRNTFxuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmIChtYXRjaCA9IC9LSFRNTFxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ0tIVE1MJztcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgR2Vja29cbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAoL0dlY2tvLy5leGVjKHVhKSAmJiAhL2xpa2UgR2Vja28vaS5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnR2Vja28nO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gLzsgcnY6KFteXFwpXSspXFwpLy5leGVjKHVhKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgICAgICAqICAgICAgUHJlc3RvXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgaWYgKG1hdGNoID0gL1ByZXN0b1xcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ1ByZXN0byc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzFdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIFRyaWRlbnRcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAobWF0Y2ggPSAvVHJpZGVudFxcLyhbMC05Ll0qKS8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ1RyaWRlbnQnO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsxXVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnSW50ZXJuZXQgRXhwbG9yZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVZlcnNpb24odGhpcy5lbmdpbmUudmVyc2lvbikgPT09IDYgJiYgcGFyc2VGbG9hdCh0aGlzLmJyb3dzZXIudmVyc2lvbikgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxMC4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdjb21wYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVmVyc2lvbih0aGlzLmVuZ2luZS52ZXJzaW9uKSA9PT0gNSAmJiBwYXJzZUZsb2F0KHRoaXMuYnJvd3Nlci52ZXJzaW9uKSA8IDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnOS4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdjb21wYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVmVyc2lvbih0aGlzLmVuZ2luZS52ZXJzaW9uKSA9PT0gNCAmJiBwYXJzZUZsb2F0KHRoaXMuYnJvd3Nlci52ZXJzaW9uKSA8IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnOC4wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubW9kZSA9ICdjb21wYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ1dpbmRvd3MgUGhvbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVZlcnNpb24odGhpcy5lbmdpbmUudmVyc2lvbikgPT09IDUgJiYgcGFyc2VGbG9hdCh0aGlzLm9zLnZlcnNpb24pIDwgNy41KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICc3LjUnXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICogICAgICBDb3JyZWN0aW9uc1xuICAgICAgICAgICAgICovXG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgPT09ICdBbmRyb2lkJyAmJiB0aGlzLmJyb3dzZXIuc3RvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSA9PT0gJ2lPUycgJiYgdGhpcy5icm93c2VyLm5hbWUgPT09ICdPcGVyYSBNaW5pJykge1xuICAgICAgICAgICAgICAgIHRoaXMub3MudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIubmFtZSA9PT0gJ01pZG9yaScgJiYgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ1dlYmtpdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZS5uYW1lID0gJ1dlYmtpdCc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRldmljZS50eXBlID09PSAndGVsZXZpc2lvbicgJiYgdGhpcy5icm93c2VyLm5hbWUgPT09ICdPcGVyYScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIubmFtZSA9ICdPcGVyYSBEZXZpY2VzJztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjEwJyk6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMy4yXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuOScpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDMuMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjgnKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAzLjBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5lbmdpbmUudmVyc2lvbi5pcygnMi43Jyk6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMi45XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuNicpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDIuOFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjQnKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxMC4zXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuMycpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDEwXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRoaXMuZW5naW5lLnZlcnNpb24uaXMoJzIuMicpOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLnZlcnNpb24gPSBuZXcgVmVyc2lvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDkuN1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGlzLmVuZ2luZS52ZXJzaW9uLmlzKCcyLjEnKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbmV3IFZlcnNpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiA5LjZcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXIudmVyc2lvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAgICAgKiAgICAgIENhbW91ZmxhZ2VcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRldGVjdENhbW91ZmxhZ2UpIHtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaCA9IC9NYWMgT1MgWCAxMF82XzM7IChbXjtdKyk7IFthLXpdezJ9LSg/OlthLXpdezJ9KT9cXCkvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnV2Via2l0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEFORFJPSURfTU9ERUxTW21vZGVsXVsyXSAhPT0gJ3VuZGVmaW5lZCcpIHRoaXMuZGV2aWNlLnR5cGUgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmREZXZpY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPSAvTGludXggVmVudGFuYTsgW2Etel17Mn0tW2Etel17Mn07ICguKykgQnVpbGQvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci5uYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlci52ZXJzaW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icm93c2VyLm1vZGUgPSAnZGVza3RvcCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcy5uYW1lID0gJ0FuZHJvaWQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9zLnZlcnNpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5naW5lLm5hbWUgPSAnV2Via2l0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmdpbmUudmVyc2lvbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UudHlwZSA9ICdtb2JpbGUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGNsZWFudXBNb2RlbCh0aGlzLmRldmljZS5tb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQU5EUk9JRF9NT0RFTFNbbW9kZWxdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubWFudWZhY3R1cmVyID0gQU5EUk9JRF9NT0RFTFNbbW9kZWxdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2UubW9kZWwgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEFORFJPSURfTU9ERUxTW21vZGVsXVsyXSAhPT0gJ3VuZGVmaW5lZCcpIHRoaXMuZGV2aWNlLnR5cGUgPSBBTkRST0lEX01PREVMU1ttb2RlbF1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZS5pZGVudGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmREZXZpY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLm5hbWUgPT09ICdTYWZhcmknKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLm5hbWUgIT09ICdpT1MnICYmIC9BcHBsZVdlYktpdFxcLyhbMC05XSsuWzAtOV0rKS9pLmV4ZWModWEpWzFdICE9PSAvU2FmYXJpXFwvKFswLTldKy5bMC05XSspL2kuZXhlYyh1YSlbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnc2FmYXJpTWlzbWF0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnaU9TJyAmJiAhdWEubWF0Y2goL15Nb3ppbGxhLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnbm9Nb3ppbGxhUHJlZml4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCEvVmVyc2lvblxcL1swLTlcXC5dKy8uZXhlYyh1YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnbm9WZXJzaW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnQ2hyb21lJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIS8oPzpDaHJvbWV8Q3JNb3xDcmlPUylcXC8oWzAtOV17MSwyfVxcLlswLTldXFwuWzAtOV17Myw0fVxcLlswLTldKykvLmV4ZWModWEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ3dyb25nVmVyc2lvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51c2VGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAvKiBJZiBpdCBjbGFpbXMgbm90IHRvIGJlIFRyaWRlbnQsIGJ1dCBpdCBpcyBwcm9iYWJseSBUcmlkZW50IHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCd0cmlkZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ1RyaWRlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHlwZW9mIHRoaXMuYnJvd3Nlci5uYW1lID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLmJyb3dzZXIubmFtZSAhPT0gJ01heHRob24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQgY2xhaW1zIG5vdCB0byBiZSBPcGVyYSwgYnV0IGl0IGlzIHByb2JhYmx5IE9wZXJhIHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cub3BlcmEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgncHJlc3RvJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lbmdpbmUubmFtZSAhPT0gJ1ByZXN0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLm5hbWUgPT09ICdJbnRlcm5ldCBFeHBsb3JlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyogSWYgaXQgY2xhaW1zIG5vdCB0byBiZSBHZWNrbywgYnV0IGl0IGlzIHByb2JhYmx5IEdlY2tvIHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICgnZ2V0Qm94T2JqZWN0Rm9yJyBpbiBkb2N1bWVudCB8fCAnbW96SW5uZXJTY3JlZW5YJyBpbiB3aW5kb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZ2Vja28nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZ2luZS5uYW1lICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZ2luZS5uYW1lICE9PSAnR2Vja28nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnSW50ZXJuZXQgRXhwbG9yZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qIElmIGl0IGNsYWltcyBub3QgdG8gYmUgV2Via2l0LCBidXQgaXQgaXMgcHJvYmFibHkgV2Via2l0IHJ1bm5pbmcgY2Ftb3VmbGFnZSBtb2RlICovXG4gICAgICAgICAgICAgICAgICAgIGlmICgnV2ViS2l0Q1NTTWF0cml4JyBpbiB3aW5kb3cgfHwgJ1dlYktpdFBvaW50JyBpbiB3aW5kb3cgfHwgJ3dlYmtpdFN0b3JhZ2VJbmZvJyBpbiB3aW5kb3cgfHwgJ3dlYmtpdFVSTCcgaW4gd2luZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ3dlYmtpdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5naW5lLm5hbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5naW5lLm5hbWUgIT09ICdXZWJraXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlci5uYW1lID09PSAnSW50ZXJuZXQgRXhwbG9yZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cblxuICAgICAgICAgICAgICAgICAgICAvKiBJZiBpdCBjbGFpbXMgdG8gYmUgU2FmYXJpIGFuZCB1c2VzIFY4LCBpdCBpcyBwcm9iYWJseSBhbiBBbmRyb2lkIGRldmljZSBydW5uaW5nIGNhbW91ZmxhZ2UgbW9kZSAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmdpbmUubmFtZSA9PT0gJ1dlYmtpdCcgJiYgKHt9LnRvU3RyaW5nKS50b1N0cmluZygpLmluZGV4T2YoJ1xcbicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCd2OCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyICE9PSBudWxsICYmIHRoaXMuYnJvd3Nlci5uYW1lID09PSAnU2FmYXJpJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG5cbiAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBhbiBpUGFkIHRoYXQgaXMgbm90IDc2OCB4IDEwMjQsIHdlIGhhdmUgYW4gaW1wb3N0ZXIgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV2aWNlLm1vZGVsID09PSAnaVBhZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2NyZWVuLndpZHRoICE9PSAwICYmIHNjcmVlbi5oZWlnaHQgIT09IDApICYmIChzY3JlZW4ud2lkdGggIT09IDc2OCAmJiBzY3JlZW4uaGVpZ2h0ICE9PSAxMDI0KSAmJiAoc2NyZWVuLndpZHRoICE9PSAxMDI0ICYmIHNjcmVlbi5oZWlnaHQgIT09IDc2OCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ3NpemVNaXNtYXRjaCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGFuIGlQaG9uZSBvciBpUG9kIHRoYXQgaXMgbm90IDMyMCB4IDQ4MCwgd2UgaGF2ZSBhbiBpbXBvc3RlciAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXZpY2UubW9kZWwgPT09ICdpUGhvbmUnIHx8IHRoaXMuZGV2aWNlLm1vZGVsID09PSAnaVBvZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2NyZWVuLndpZHRoICE9PSAwICYmIHNjcmVlbi5oZWlnaHQgIT09IDApICYmIChzY3JlZW4ud2lkdGggIT09IDMyMCAmJiBzY3JlZW4uaGVpZ2h0ICE9PSA0ODApICYmIChzY3JlZW4ud2lkdGggIT09IDQ4MCAmJiBzY3JlZW4uaGVpZ2h0ICE9PSAzMjApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdzaXplTWlzbWF0Y2gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy5uYW1lID09PSAnaU9TJyAmJiB0aGlzLm9zLnZlcnNpb24pIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbi5pc09sZGVyKCc0LjAnKSAmJiAnc2FuZGJveCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ2ZvdW5kU2FuZGJveCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9zLnZlcnNpb24uaXNPbGRlcignNC4yJykgJiYgJ1dlYlNvY2tldCcgaW4gd2luZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdmb3VuZFNvY2tldHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcy52ZXJzaW9uLmlzT2xkZXIoJzUuMCcpICYmICEhIHdpbmRvdy5Xb3JrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ2ZvdW5kV29ya2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MudmVyc2lvbi5pc05ld2VyKCcyLjEnKSAmJiAhd2luZG93LmFwcGxpY2F0aW9uQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goJ25vQXBwQ2FjaGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3MubmFtZSAhPT0gJ2lPUycgJiYgdGhpcy5icm93c2VyLm5hbWUgPT09ICdTYWZhcmknICYmIHRoaXMuYnJvd3Nlci52ZXJzaW9uKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIudmVyc2lvbi5pc09sZGVyKCc0LjAnKSAmJiAhISB3aW5kb3cuYXBwbGljYXRpb25DYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmRBcHBDYWNoZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Ftb3VmbGFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXIudmVyc2lvbi5pc09sZGVyKCc0LjEnKSAmJiAhISAod2luZG93Lmhpc3RvcnkgJiYgaGlzdG9yeS5wdXNoU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdmb3VuZEhpc3RvcnknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24uaXNPbGRlcignNS4xJykgJiYgISEgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKCdmb3VuZEZ1bGxzY3JlZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbW91ZmxhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icm93c2VyLnZlcnNpb24uaXNPbGRlcignNS4yJykgJiYgJ0ZpbGVSZWFkZXInIGluIHdpbmRvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMucHVzaCgnZm91bmRGaWxlUmVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1vdWZsYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kZWwocykge1xuICAgICAgICBzID0gdHlwZW9mIHMgPT09ICd1bmRlZmluZWQnID8gJycgOiBzO1xuXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL19URCQvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL19DTUNDJC8sICcnKTtcblxuICAgICAgICBzID0gcy5yZXBsYWNlKC9fL2csICcgJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXFwvW14vXSskLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9cXC9bXi9dKyBBbmRyb2lkXFwvLiovLCAnJyk7XG5cbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXnRpdGEgb24gLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQW5kcm9pZCBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15BbmRyb2lkIGZvciAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15JQ1MgQU9TUCBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15GdWxsIEFPU1Agb24gLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eRnVsbCBBbmRyb2lkIG9uIC8sICcnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkZ1bGwgQ2FwcHVjY2lubyBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15GdWxsIE1JUFMgQW5kcm9pZCBvbiAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15GdWxsIEFuZHJvaWQvLCAnJyk7XG5cbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkFjZXIgPy9pLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15JY29uaWEgLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQWlub2wgLywgJycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQ29vbHBhZCA/L2ksICdDb29scGFkICcpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eQUxDQVRFTCAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15BbGNhdGVsIE9ULSguKikvLCAnb25lIHRvdWNoICQxJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15ZTC0vLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15Ob3ZvNyA/L2ksICdOb3ZvNyAnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkdJT05FRSAvLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15IVy0vLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15IdWF3ZWlbIC1dL2ksICdIdWF3ZWkgJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15TQU1TVU5HWyAtXS9pLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15Tb255RXJpY3Nzb24vLCAnJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15MZW5vdm8gTGVub3ZvLywgJ0xlbm92bycpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eTE5WLUxlbm92by8sICdMZW5vdm8nKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXkxlbm92by0vLCAnTGVub3ZvICcpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eKExHKVsgX1xcL10vLCAnJDEtJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL14oSFRDLiopXFxzKD86dnxWKT9bMC05Ll0rJC8sICckMScpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9eKEhUQylbLVxcL10vLCAnJDEgJyk7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL14oSFRDKShbQS1aXVswLTldWzAtOV1bMC05XSkvLCAnJDEgJDInKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXihNb3Rvcm9sYVtcXHN8LV0pLywgJycpXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL14oTW90b3xNT1QtKS8sICcnKVxuXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoLy0/KG9yYW5nZSgtbHMpP3x2b2RhZm9uZXxib3V5Z3VlcykkL2ksICcnKTtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvaHR0cDpcXC9cXC8uKyQvaSwgJycpO1xuXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcblxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVZlcnNpb24odmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICB2YXIgY29tcG9uZW50cyA9IHZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgdmFyIG1ham9yID0gY29tcG9uZW50cy5zaGlmdCgpO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYWpvciArICcuJyArIGNvbXBvbmVudHMuam9pbignJykpO1xuICAgIH1cblxuICAgIHJldHVybiBEZXRlY3RlZDtcblxufSkoKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_ua-device@0.1.10@ua-device/lib/useragent-base.js\n");
/***/ }),
/***/ "./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js":
/*!**********************************************************************************************!*\
!*** ./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js ***!
\**********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("!function(e,t){ true?module.exports=t(__webpack_require__(/*! swiper/dist/js/swiper.js */ \"./node_modules/_swiper@4.5.1@swiper/dist/js/swiper.js\")):undefined}(this,function(e){return function(e){function t(i){if(n[i])return n[i].exports;var s=n[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,t),s.l=!0,s.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"/\",t(t.s=4)}([function(t,n){t.exports=e},function(e,t){e.exports=function(e,t,n,i,s,r){var o,a=e=e||{},u=typeof e.default;\"object\"!==u&&\"function\"!==u||(o=e,a=e.default);var p=\"function\"==typeof a?a.options:a;t&&(p.render=t.render,p.staticRenderFns=t.staticRenderFns,p._compiled=!0),n&&(p.functional=!0),s&&(p._scopeId=s);var l;if(r?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},p._ssrRegister=l):i&&(l=i),l){var c=p.functional,d=c?p.render:p.beforeCreate;c?(p._injectStyles=l,p.render=function(e,t){return l.call(t),d(e,t)}):p.beforeCreate=d?[].concat(d,l):[l]}return{esModule:o,exports:a,options:p}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(5),s=n.n(i),r=n(8),o=n(1),a=o(s.a,r.a,!1,null,null,null);t.default=a.exports},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(6),s=n.n(i),r=n(7),o=n(1),a=o(s.a,r.a,!1,null,null,null);t.default=a.exports},function(e,t,n){\"use strict\";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.install=t.swiperSlide=t.swiper=t.Swiper=void 0;var s=n(0),r=i(s),o=n(2),a=i(o),u=n(3),p=i(u),l=window.Swiper||r.default,c=p.default,d=a.default,f=function(e,t){t&&(p.default.props.globalOptions.default=function(){return t}),e.component(p.default.name,p.default),e.component(a.default.name,a.default)},h={Swiper:l,swiper:c,swiperSlide:d,install:f};t.default=h,t.Swiper=l,t.swiper=c,t.swiperSlide=d,t.install=f},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"swiper-slide\",data:function(){return{slideClass:\"swiper-slide\"}},ready:function(){this.update()},mounted:function(){this.update(),this.$parent&&this.$parent.options&&this.$parent.options.slideClass&&(this.slideClass=this.$parent.options.slideClass)},updated:function(){this.update()},attached:function(){this.update()},methods:{update:function(){this.$parent&&this.$parent.swiper&&this.$parent.update()}}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(0),s=function(e){return e&&e.__esModule?e:{default:e}}(i),r=window.Swiper||s.default;\"function\"!=typeof Object.assign&&Object.defineProperty(Object,\"assign\",{value:function(e,t){if(null==e)throw new TypeError(\"Cannot convert undefined or null to object\");for(var n=Object(e),i=1;i<arguments.length;i++){var s=arguments[i];if(null!=s)for(var r in s)Object.prototype.hasOwnProperty.call(s,r)&&(n[r]=s[r])}return n},writable:!0,configurable:!0});var o=[\"beforeDestroy\",\"slideChange\",\"slideChangeTransitionStart\",\"slideChangeTransitionEnd\",\"slideNextTransitionStart\",\"slideNextTransitionEnd\",\"slidePrevTransitionStart\",\"slidePrevTransitionEnd\",\"transitionStart\",\"transitionEnd\",\"touchStart\",\"touchMove\",\"touchMoveOpposite\",\"sliderMove\",\"touchEnd\",\"click\",\"tap\",\"doubleTap\",\"imagesReady\",\"progress\",\"reachBeginning\",\"reachEnd\",\"fromEdge\",\"setTranslate\",\"setTransition\",\"resize\"];t.default={name:\"swiper\",props:{options:{type:Object,default:function(){return{}}},globalOptions:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{swiper:null,classes:{wrapperClass:\"swiper-wrapper\"}}},ready:function(){this.swiper||this.mountInstance()},mounted:function(){if(!this.swiper){var e=!1;for(var t in this.classes)this.classes.hasOwnProperty(t)&&this.options[t]&&(e=!0,this.classes[t]=this.options[t]);e?this.$nextTick(this.mountInstance):this.mountInstance()}},activated:function(){this.update()},updated:function(){this.update()},beforeDestroy:function(){this.$nextTick(function(){this.swiper&&(this.swiper.destroy&&this.swiper.destroy(),delete this.swiper)})},methods:{update:function(){this.swiper&&(this.swiper.update&&this.swiper.update(),this.swiper.navigation&&this.swiper.navigation.update(),this.swiper.pagination&&this.swiper.pagination.render(),this.swiper.pagination&&this.swiper.pagination.update())},mountInstance:function(){var e=Object.assign({},this.globalOptions,this.options);this.swiper=new r(this.$el,e),this.bindEvents(),this.$emit(\"ready\",this.swiper)},bindEvents:function(){var e=this,t=this;o.forEach(function(n){e.swiper.on(n,function(){t.$emit.apply(t,[n].concat(Array.prototype.slice.call(arguments))),t.$emit.apply(t,[n.replace(/([A-Z])/g,\"-$1\").toLowerCase()].concat(Array.prototype.slice.call(arguments)))})})}}}},function(e,t,n){\"use strict\";var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{staticClass:\"swiper-container\"},[e._t(\"parallax-bg\"),e._v(\" \"),n(\"div\",{class:e.classes.wrapperClass},[e._t(\"default\")],2),e._v(\" \"),e._t(\"pagination\"),e._v(\" \"),e._t(\"button-prev\"),e._v(\" \"),e._t(\"button-next\"),e._v(\" \"),e._t(\"scrollbar\")],2)},s=[],r={render:i,staticRenderFns:s};t.a=r},function(e,t,n){\"use strict\";var i=function(){var e=this,t=e.$createElement;return(e._self._c||t)(\"div\",{class:e.slideClass},[e._t(\"default\")],2)},s=[],r={render:i,staticRenderFns:s};t.a=r}])});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1hd2Vzb21lLXN3aXBlckAzLjEuM0B2dWUtYXdlc29tZS1zd2lwZXIvZGlzdC92dWUtYXdlc29tZS1zd2lwZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvX3Z1ZS1hd2Vzb21lLXN3aXBlckAzLjEuM0B2dWUtYXdlc29tZS1zd2lwZXIvZGlzdC92dWUtYXdlc29tZS1zd2lwZXIuanM/NmZlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoXCJWdWVBd2Vzb21lU3dpcGVyXCIsW1wic3dpcGVyXCJdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuVnVlQXdlc29tZVN3aXBlcj10KHJlcXVpcmUoXCJzd2lwZXIvZGlzdC9qcy9zd2lwZXIuanNcIikpOmUuVnVlQXdlc29tZVN3aXBlcj10KGUuU3dpcGVyKX0odGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtpZihuW2ldKXJldHVybiBuW2ldLmV4cG9ydHM7dmFyIHM9bltpXT17aTppLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChzLmV4cG9ydHMscyxzLmV4cG9ydHMsdCkscy5sPSEwLHMuZXhwb3J0c312YXIgbj17fTtyZXR1cm4gdC5tPWUsdC5jPW4sdC5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSx0LmQ9ZnVuY3Rpb24oZSxuLGkpe3QubyhlLG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6aX0pfSx0Lm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHQuZChuLFwiYVwiLG4pLG59LHQubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sdC5wPVwiL1wiLHQodC5zPTQpfShbZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4saSxzLHIpe3ZhciBvLGE9ZT1lfHx7fSx1PXR5cGVvZiBlLmRlZmF1bHQ7XCJvYmplY3RcIiE9PXUmJlwiZnVuY3Rpb25cIiE9PXV8fChvPWUsYT1lLmRlZmF1bHQpO3ZhciBwPVwiZnVuY3Rpb25cIj09dHlwZW9mIGE/YS5vcHRpb25zOmE7dCYmKHAucmVuZGVyPXQucmVuZGVyLHAuc3RhdGljUmVuZGVyRm5zPXQuc3RhdGljUmVuZGVyRm5zLHAuX2NvbXBpbGVkPSEwKSxuJiYocC5mdW5jdGlvbmFsPSEwKSxzJiYocC5fc2NvcGVJZD1zKTt2YXIgbDtpZihyPyhsPWZ1bmN0aW9uKGUpe2U9ZXx8dGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR8fHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC4kdm5vZGUmJnRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0LGV8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9ffHwoZT1fX1ZVRV9TU1JfQ09OVEVYVF9fKSxpJiZpLmNhbGwodGhpcyxlKSxlJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cyYmZS5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKHIpfSxwLl9zc3JSZWdpc3Rlcj1sKTppJiYobD1pKSxsKXt2YXIgYz1wLmZ1bmN0aW9uYWwsZD1jP3AucmVuZGVyOnAuYmVmb3JlQ3JlYXRlO2M/KHAuX2luamVjdFN0eWxlcz1sLHAucmVuZGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwuY2FsbCh0KSxkKGUsdCl9KTpwLmJlZm9yZUNyZWF0ZT1kP1tdLmNvbmNhdChkLGwpOltsXX1yZXR1cm57ZXNNb2R1bGU6byxleHBvcnRzOmEsb3B0aW9uczpwfX19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgaT1uKDUpLHM9bi5uKGkpLHI9big4KSxvPW4oMSksYT1vKHMuYSxyLmEsITEsbnVsbCxudWxsLG51bGwpO3QuZGVmYXVsdD1hLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgaT1uKDYpLHM9bi5uKGkpLHI9big3KSxvPW4oMSksYT1vKHMuYSxyLmEsITEsbnVsbCxudWxsLG51bGwpO3QuZGVmYXVsdD1hLmV4cG9ydHN9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0Lmluc3RhbGw9dC5zd2lwZXJTbGlkZT10LnN3aXBlcj10LlN3aXBlcj12b2lkIDA7dmFyIHM9bigwKSxyPWkocyksbz1uKDIpLGE9aShvKSx1PW4oMykscD1pKHUpLGw9d2luZG93LlN3aXBlcnx8ci5kZWZhdWx0LGM9cC5kZWZhdWx0LGQ9YS5kZWZhdWx0LGY9ZnVuY3Rpb24oZSx0KXt0JiYocC5kZWZhdWx0LnByb3BzLmdsb2JhbE9wdGlvbnMuZGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0fSksZS5jb21wb25lbnQocC5kZWZhdWx0Lm5hbWUscC5kZWZhdWx0KSxlLmNvbXBvbmVudChhLmRlZmF1bHQubmFtZSxhLmRlZmF1bHQpfSxoPXtTd2lwZXI6bCxzd2lwZXI6Yyxzd2lwZXJTbGlkZTpkLGluc3RhbGw6Zn07dC5kZWZhdWx0PWgsdC5Td2lwZXI9bCx0LnN3aXBlcj1jLHQuc3dpcGVyU2xpZGU9ZCx0Lmluc3RhbGw9Zn0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD17bmFtZTpcInN3aXBlci1zbGlkZVwiLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2xpZGVDbGFzczpcInN3aXBlci1zbGlkZVwifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGUoKSx0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5vcHRpb25zJiZ0aGlzLiRwYXJlbnQub3B0aW9ucy5zbGlkZUNsYXNzJiYodGhpcy5zbGlkZUNsYXNzPXRoaXMuJHBhcmVudC5vcHRpb25zLnNsaWRlQ2xhc3MpfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGUoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfSxtZXRob2RzOnt1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5zd2lwZXImJnRoaXMuJHBhcmVudC51cGRhdGUoKX19fX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KGkpLHI9d2luZG93LlN3aXBlcnx8cy5kZWZhdWx0O1wiZnVuY3Rpb25cIiE9dHlwZW9mIE9iamVjdC5hc3NpZ24mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsXCJhc3NpZ25cIix7dmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7Zm9yKHZhciBuPU9iamVjdChlKSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHM9YXJndW1lbnRzW2ldO2lmKG51bGwhPXMpZm9yKHZhciByIGluIHMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMscikmJihuW3JdPXNbcl0pfXJldHVybiBufSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgbz1bXCJiZWZvcmVEZXN0cm95XCIsXCJzbGlkZUNoYW5nZVwiLFwic2xpZGVDaGFuZ2VUcmFuc2l0aW9uU3RhcnRcIixcInNsaWRlQ2hhbmdlVHJhbnNpdGlvbkVuZFwiLFwic2xpZGVOZXh0VHJhbnNpdGlvblN0YXJ0XCIsXCJzbGlkZU5leHRUcmFuc2l0aW9uRW5kXCIsXCJzbGlkZVByZXZUcmFuc2l0aW9uU3RhcnRcIixcInNsaWRlUHJldlRyYW5zaXRpb25FbmRcIixcInRyYW5zaXRpb25TdGFydFwiLFwidHJhbnNpdGlvbkVuZFwiLFwidG91Y2hTdGFydFwiLFwidG91Y2hNb3ZlXCIsXCJ0b3VjaE1vdmVPcHBvc2l0ZVwiLFwic2xpZGVyTW92ZVwiLFwidG91Y2hFbmRcIixcImNsaWNrXCIsXCJ0YXBcIixcImRvdWJsZVRhcFwiLFwiaW1hZ2VzUmVhZHlcIixcInByb2dyZXNzXCIsXCJyZWFjaEJlZ2lubmluZ1wiLFwicmVhY2hFbmRcIixcImZyb21FZGdlXCIsXCJzZXRUcmFuc2xhdGVcIixcInNldFRyYW5zaXRpb25cIixcInJlc2l6ZVwiXTt0LmRlZmF1bHQ9e25hbWU6XCJzd2lwZXJcIixwcm9wczp7b3B0aW9uczp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sZ2xvYmFsT3B0aW9uczp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITEsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c3dpcGVyOm51bGwsY2xhc3Nlczp7d3JhcHBlckNsYXNzOlwic3dpcGVyLXdyYXBwZXJcIn19fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc3dpcGVyfHx0aGlzLm1vdW50SW5zdGFuY2UoKX0sbW91bnRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLnN3aXBlcil7dmFyIGU9ITE7Zm9yKHZhciB0IGluIHRoaXMuY2xhc3Nlcyl0aGlzLmNsYXNzZXMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMub3B0aW9uc1t0XSYmKGU9ITAsdGhpcy5jbGFzc2VzW3RdPXRoaXMub3B0aW9uc1t0XSk7ZT90aGlzLiRuZXh0VGljayh0aGlzLm1vdW50SW5zdGFuY2UpOnRoaXMubW91bnRJbnN0YW5jZSgpfX0sYWN0aXZhdGVkOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGUoKX0sdXBkYXRlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlKCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3RoaXMuc3dpcGVyJiYodGhpcy5zd2lwZXIuZGVzdHJveSYmdGhpcy5zd2lwZXIuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLnN3aXBlcil9KX0sbWV0aG9kczp7dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5zd2lwZXImJih0aGlzLnN3aXBlci51cGRhdGUmJnRoaXMuc3dpcGVyLnVwZGF0ZSgpLHRoaXMuc3dpcGVyLm5hdmlnYXRpb24mJnRoaXMuc3dpcGVyLm5hdmlnYXRpb24udXBkYXRlKCksdGhpcy5zd2lwZXIucGFnaW5hdGlvbiYmdGhpcy5zd2lwZXIucGFnaW5hdGlvbi5yZW5kZXIoKSx0aGlzLnN3aXBlci5wYWdpbmF0aW9uJiZ0aGlzLnN3aXBlci5wYWdpbmF0aW9uLnVwZGF0ZSgpKX0sbW91bnRJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nbG9iYWxPcHRpb25zLHRoaXMub3B0aW9ucyk7dGhpcy5zd2lwZXI9bmV3IHIodGhpcy4kZWwsZSksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy4kZW1pdChcInJlYWR5XCIsdGhpcy5zd2lwZXIpfSxiaW5kRXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXM7by5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Uuc3dpcGVyLm9uKG4sZnVuY3Rpb24oKXt0LiRlbWl0LmFwcGx5KHQsW25dLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSksdC4kZW1pdC5hcHBseSh0LFtuLnJlcGxhY2UoLyhbQS1aXSkvZyxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpfSl9KX19fX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwic3dpcGVyLWNvbnRhaW5lclwifSxbZS5fdChcInBhcmFsbGF4LWJnXCIpLGUuX3YoXCIgXCIpLG4oXCJkaXZcIix7Y2xhc3M6ZS5jbGFzc2VzLndyYXBwZXJDbGFzc30sW2UuX3QoXCJkZWZhdWx0XCIpXSwyKSxlLl92KFwiIFwiKSxlLl90KFwicGFnaW5hdGlvblwiKSxlLl92KFwiIFwiKSxlLl90KFwiYnV0dG9uLXByZXZcIiksZS5fdihcIiBcIiksZS5fdChcImJ1dHRvbi1uZXh0XCIpLGUuX3YoXCIgXCIpLGUuX3QoXCJzY3JvbGxiYXJcIildLDIpfSxzPVtdLHI9e3JlbmRlcjppLHN0YXRpY1JlbmRlckZuczpzfTt0LmE9cn0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQ7cmV0dXJuKGUuX3NlbGYuX2N8fHQpKFwiZGl2XCIse2NsYXNzOmUuc2xpZGVDbGFzc30sW2UuX3QoXCJkZWZhdWx0XCIpXSwyKX0scz1bXSxyPXtyZW5kZXI6aSxzdGF0aWNSZW5kZXJGbnM6c307dC5hPXJ9XSl9KTsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js\n");
/***/ }),
/***/ "./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js":
/*!*********************************************************************************!*\
!*** ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js ***!
\*********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var Vue // late bind\nvar version\nvar map = Object.create(null)\nif (typeof window !== 'undefined') {\n window.__VUE_HOT_MAP__ = map\n}\nvar installed = false\nvar isBrowserify = false\nvar initHookName = 'beforeCreate'\n\nexports.install = function (vue, browserify) {\n if (installed) { return }\n installed = true\n\n Vue = vue.__esModule ? vue.default : vue\n version = Vue.version.split('.').map(Number)\n isBrowserify = browserify\n\n // compat with < 2.0.0-alpha.7\n if (Vue.config._lifecycleHooks.indexOf('init') > -1) {\n initHookName = 'init'\n }\n\n exports.compatible = version[0] >= 2\n if (!exports.compatible) {\n console.warn(\n '[HMR] You are using a version of vue-hot-reload-api that is ' +\n 'only compatible with Vue.js core ^2.0.0.'\n )\n return\n }\n}\n\n/**\n * Create a record for a hot module, which keeps track of its constructor\n * and instances\n *\n * @param {String} id\n * @param {Object} options\n */\n\nexports.createRecord = function (id, options) {\n if(map[id]) { return }\n\n var Ctor = null\n if (typeof options === 'function') {\n Ctor = options\n options = Ctor.options\n }\n makeOptionsHot(id, options)\n map[id] = {\n Ctor: Ctor,\n options: options,\n instances: []\n }\n}\n\n/**\n * Check if module is recorded\n *\n * @param {String} id\n */\n\nexports.isRecorded = function (id) {\n return typeof map[id] !== 'undefined'\n}\n\n/**\n * Make a Component options object hot.\n *\n * @param {String} id\n * @param {Object} options\n */\n\nfunction makeOptionsHot(id, options) {\n if (options.functional) {\n var render = options.render\n options.render = function (h, ctx) {\n var instances = map[id].instances\n if (ctx && instances.indexOf(ctx.parent) < 0) {\n instances.push(ctx.parent)\n }\n return render(h, ctx)\n }\n } else {\n injectHook(options, initHookName, function() {\n var record = map[id]\n if (!record.Ctor) {\n record.Ctor = this.constructor\n }\n record.instances.push(this)\n })\n injectHook(options, 'beforeDestroy', function() {\n var instances = map[id].instances\n instances.splice(instances.indexOf(this), 1)\n })\n }\n}\n\n/**\n * Inject a hook to a hot reloadable component so that\n * we can keep track of it.\n *\n * @param {Object} options\n * @param {String} name\n * @param {Function} hook\n */\n\nfunction injectHook(options, name, hook) {\n var existing = options[name]\n options[name] = existing\n ? Array.isArray(existing) ? existing.concat(hook) : [existing, hook]\n : [hook]\n}\n\nfunction tryWrap(fn) {\n return function (id, arg) {\n try {\n fn(id, arg)\n } catch (e) {\n console.error(e)\n console.warn(\n 'Something went wrong during Vue component hot-reload. Full reload required.'\n )\n }\n }\n}\n\nfunction updateOptions (oldOptions, newOptions) {\n for (var key in oldOptions) {\n if (!(key in newOptions)) {\n delete oldOptions[key]\n }\n }\n for (var key$1 in newOptions) {\n oldOptions[key$1] = newOptions[key$1]\n }\n}\n\nexports.rerender = tryWrap(function (id, options) {\n var record = map[id]\n if (!options) {\n record.instances.slice().forEach(function (instance) {\n instance.$forceUpdate()\n })\n return\n }\n if (typeof options === 'function') {\n options = options.options\n }\n if (record.Ctor) {\n record.Ctor.options.render = options.render\n record.Ctor.options.staticRenderFns = options.staticRenderFns\n record.instances.slice().forEach(function (instance) {\n instance.$options.render = options.render\n instance.$options.staticRenderFns = options.staticRenderFns\n // reset static trees\n // pre 2.5, all static trees are cached together on the instance\n if (instance._staticTrees) {\n instance._staticTrees = []\n }\n // 2.5.0\n if (Array.isArray(record.Ctor.options.cached)) {\n record.Ctor.options.cached = []\n }\n // 2.5.3\n if (Array.isArray(instance.$options.cached)) {\n instance.$options.cached = []\n }\n\n // post 2.5.4: v-once trees are cached on instance._staticTrees.\n // Pure static trees are cached on the staticRenderFns array\n // (both already reset above)\n\n // 2.6: temporarily mark rendered scoped slots as unstable so that\n // child components can be forced to update\n var restore = patchScopedSlots(instance)\n instance.$forceUpdate()\n instance.$nextTick(restore)\n })\n } else {\n // functional or no instance created yet\n record.options.render = options.render\n record.options.staticRenderFns = options.staticRenderFns\n\n // handle functional component re-render\n if (record.options.functional) {\n // rerender with full options\n if (Object.keys(options).length > 2) {\n updateOptions(record.options, options)\n } else {\n // template-only rerender.\n // need to inject the style injection code for CSS modules\n // to work properly.\n var injectStyles = record.options._injectStyles\n if (injectStyles) {\n var render = options.render\n record.options.render = function (h, ctx) {\n injectStyles.call(ctx)\n return render(h, ctx)\n }\n }\n }\n record.options._Ctor = null\n // 2.5.3\n if (Array.isArray(record.options.cached)) {\n record.options.cached = []\n }\n record.instances.slice().forEach(function (instance) {\n instance.$forceUpdate()\n })\n }\n }\n})\n\nexports.reload = tryWrap(function (id, options) {\n var record = map[id]\n if (options) {\n if (typeof options === 'function') {\n options = options.options\n }\n makeOptionsHot(id, options)\n if (record.Ctor) {\n if (version[1] < 2) {\n // preserve pre 2.2 behavior for global mixin handling\n record.Ctor.extendOptions = options\n }\n var newCtor = record.Ctor.super.extend(options)\n // prevent record.options._Ctor from being overwritten accidentally\n newCtor.options._Ctor = record.options._Ctor\n record.Ctor.options = newCtor.options\n record.Ctor.cid = newCtor.cid\n record.Ctor.prototype = newCtor.prototype\n if (newCtor.release) {\n // temporary global mixin strategy used in < 2.0.0-alpha.6\n newCtor.release()\n }\n } else {\n updateOptions(record.options, options)\n }\n }\n record.instances.slice().forEach(function (instance) {\n if (instance.$vnode && instance.$vnode.context) {\n instance.$vnode.context.$forceUpdate()\n } else {\n console.warn(\n 'Root or manually mounted instance modified. Full reload required.'\n )\n }\n })\n})\n\n// 2.6 optimizes template-compiled scoped slots and skips updates if child\n// only uses scoped slots. We need to patch the scoped slots resolving helper\n// to temporarily mark all scoped slots as unstable in order to force child\n// updates.\nfunction patchScopedSlots (instance) {\n if (!instance._u) { return }\n // https://github.com/vuejs/vue/blob/dev/src/core/instance/render-helpers/resolve-scoped-slots.js\n var original = instance._u\n instance._u = function (slots) {\n try {\n // 2.6.4 ~ 2.6.6\n return original(slots, true)\n } catch (e) {\n // 2.5 / >= 2.6.7\n return original(slots, null, true)\n }\n }\n return function () {\n instance._u = original\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1ob3QtcmVsb2FkLWFwaUAyLjMuNEB2dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdnVlLWhvdC1yZWxvYWQtYXBpQDIuMy40QHZ1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzP2Q1NDUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIFZ1ZSAvLyBsYXRlIGJpbmRcbnZhciB2ZXJzaW9uXG52YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHdpbmRvdy5fX1ZVRV9IT1RfTUFQX18gPSBtYXBcbn1cbnZhciBpbnN0YWxsZWQgPSBmYWxzZVxudmFyIGlzQnJvd3NlcmlmeSA9IGZhbHNlXG52YXIgaW5pdEhvb2tOYW1lID0gJ2JlZm9yZUNyZWF0ZSdcblxuZXhwb3J0cy5pbnN0YWxsID0gZnVuY3Rpb24gKHZ1ZSwgYnJvd3NlcmlmeSkge1xuICBpZiAoaW5zdGFsbGVkKSB7IHJldHVybiB9XG4gIGluc3RhbGxlZCA9IHRydWVcblxuICBWdWUgPSB2dWUuX19lc01vZHVsZSA/IHZ1ZS5kZWZhdWx0IDogdnVlXG4gIHZlcnNpb24gPSBWdWUudmVyc2lvbi5zcGxpdCgnLicpLm1hcChOdW1iZXIpXG4gIGlzQnJvd3NlcmlmeSA9IGJyb3dzZXJpZnlcblxuICAvLyBjb21wYXQgd2l0aCA8IDIuMC4wLWFscGhhLjdcbiAgaWYgKFZ1ZS5jb25maWcuX2xpZmVjeWNsZUhvb2tzLmluZGV4T2YoJ2luaXQnKSA+IC0xKSB7XG4gICAgaW5pdEhvb2tOYW1lID0gJ2luaXQnXG4gIH1cblxuICBleHBvcnRzLmNvbXBhdGlibGUgPSB2ZXJzaW9uWzBdID49IDJcbiAgaWYgKCFleHBvcnRzLmNvbXBhdGlibGUpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW0hNUl0gWW91IGFyZSB1c2luZyBhIHZlcnNpb24gb2YgdnVlLWhvdC1yZWxvYWQtYXBpIHRoYXQgaXMgJyArXG4gICAgICAgICdvbmx5IGNvbXBhdGlibGUgd2l0aCBWdWUuanMgY29yZSBeMi4wLjAuJ1xuICAgIClcbiAgICByZXR1cm5cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJlY29yZCBmb3IgYSBob3QgbW9kdWxlLCB3aGljaCBrZWVwcyB0cmFjayBvZiBpdHMgY29uc3RydWN0b3JcbiAqIGFuZCBpbnN0YW5jZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVSZWNvcmQgPSBmdW5jdGlvbiAoaWQsIG9wdGlvbnMpIHtcbiAgaWYobWFwW2lkXSkgeyByZXR1cm4gfVxuXG4gIHZhciBDdG9yID0gbnVsbFxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBDdG9yID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnNcbiAgfVxuICBtYWtlT3B0aW9uc0hvdChpZCwgb3B0aW9ucylcbiAgbWFwW2lkXSA9IHtcbiAgICBDdG9yOiBDdG9yLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgaW5zdGFuY2VzOiBbXVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgbW9kdWxlIGlzIHJlY29yZGVkXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkXG4gKi9cblxuZXhwb3J0cy5pc1JlY29yZGVkID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiB0eXBlb2YgbWFwW2lkXSAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuLyoqXG4gKiBNYWtlIGEgQ29tcG9uZW50IG9wdGlvbnMgb2JqZWN0IGhvdC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKi9cblxuZnVuY3Rpb24gbWFrZU9wdGlvbnNIb3QoaWQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgIHZhciByZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gKGgsIGN0eCkge1xuICAgICAgdmFyIGluc3RhbmNlcyA9IG1hcFtpZF0uaW5zdGFuY2VzXG4gICAgICBpZiAoY3R4ICYmIGluc3RhbmNlcy5pbmRleE9mKGN0eC5wYXJlbnQpIDwgMCkge1xuICAgICAgICBpbnN0YW5jZXMucHVzaChjdHgucGFyZW50KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlbmRlcihoLCBjdHgpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGluamVjdEhvb2sob3B0aW9ucywgaW5pdEhvb2tOYW1lLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWNvcmQgPSBtYXBbaWRdXG4gICAgICBpZiAoIXJlY29yZC5DdG9yKSB7XG4gICAgICAgIHJlY29yZC5DdG9yID0gdGhpcy5jb25zdHJ1Y3RvclxuICAgICAgfVxuICAgICAgcmVjb3JkLmluc3RhbmNlcy5wdXNoKHRoaXMpXG4gICAgfSlcbiAgICBpbmplY3RIb29rKG9wdGlvbnMsICdiZWZvcmVEZXN0cm95JywgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaW5zdGFuY2VzID0gbWFwW2lkXS5pbnN0YW5jZXNcbiAgICAgIGluc3RhbmNlcy5zcGxpY2UoaW5zdGFuY2VzLmluZGV4T2YodGhpcyksIDEpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEluamVjdCBhIGhvb2sgdG8gYSBob3QgcmVsb2FkYWJsZSBjb21wb25lbnQgc28gdGhhdFxuICogd2UgY2FuIGtlZXAgdHJhY2sgb2YgaXQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBob29rXG4gKi9cblxuZnVuY3Rpb24gaW5qZWN0SG9vayhvcHRpb25zLCBuYW1lLCBob29rKSB7XG4gIHZhciBleGlzdGluZyA9IG9wdGlvbnNbbmFtZV1cbiAgb3B0aW9uc1tuYW1lXSA9IGV4aXN0aW5nXG4gICAgPyBBcnJheS5pc0FycmF5KGV4aXN0aW5nKSA/IGV4aXN0aW5nLmNvbmNhdChob29rKSA6IFtleGlzdGluZywgaG9va11cbiAgICA6IFtob29rXVxufVxuXG5mdW5jdGlvbiB0cnlXcmFwKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaWQsIGFyZykge1xuICAgIHRyeSB7XG4gICAgICBmbihpZCwgYXJnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1NvbWV0aGluZyB3ZW50IHdyb25nIGR1cmluZyBWdWUgY29tcG9uZW50IGhvdC1yZWxvYWQuIEZ1bGwgcmVsb2FkIHJlcXVpcmVkLidcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9ucyAob2xkT3B0aW9ucywgbmV3T3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb2xkT3B0aW9ucykge1xuICAgIGlmICghKGtleSBpbiBuZXdPcHRpb25zKSkge1xuICAgICAgZGVsZXRlIG9sZE9wdGlvbnNba2V5XVxuICAgIH1cbiAgfVxuICBmb3IgKHZhciBrZXkkMSBpbiBuZXdPcHRpb25zKSB7XG4gICAgb2xkT3B0aW9uc1trZXkkMV0gPSBuZXdPcHRpb25zW2tleSQxXVxuICB9XG59XG5cbmV4cG9ydHMucmVyZW5kZXIgPSB0cnlXcmFwKGZ1bmN0aW9uIChpZCwgb3B0aW9ucykge1xuICB2YXIgcmVjb3JkID0gbWFwW2lkXVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICByZWNvcmQuaW5zdGFuY2VzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlLiRmb3JjZVVwZGF0ZSgpXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucy5vcHRpb25zXG4gIH1cbiAgaWYgKHJlY29yZC5DdG9yKSB7XG4gICAgcmVjb3JkLkN0b3Iub3B0aW9ucy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgIHJlY29yZC5DdG9yLm9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNcbiAgICByZWNvcmQuaW5zdGFuY2VzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlLiRvcHRpb25zLnJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBpbnN0YW5jZS4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZuc1xuICAgICAgLy8gcmVzZXQgc3RhdGljIHRyZWVzXG4gICAgICAvLyBwcmUgMi41LCBhbGwgc3RhdGljIHRyZWVzIGFyZSBjYWNoZWQgdG9nZXRoZXIgb24gdGhlIGluc3RhbmNlXG4gICAgICBpZiAoaW5zdGFuY2UuX3N0YXRpY1RyZWVzKSB7XG4gICAgICAgIGluc3RhbmNlLl9zdGF0aWNUcmVlcyA9IFtdXG4gICAgICB9XG4gICAgICAvLyAyLjUuMFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVjb3JkLkN0b3Iub3B0aW9ucy5jYWNoZWQpKSB7XG4gICAgICAgIHJlY29yZC5DdG9yLm9wdGlvbnMuY2FjaGVkID0gW11cbiAgICAgIH1cbiAgICAgIC8vIDIuNS4zXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnN0YW5jZS4kb3B0aW9ucy5jYWNoZWQpKSB7XG4gICAgICAgIGluc3RhbmNlLiRvcHRpb25zLmNhY2hlZCA9IFtdXG4gICAgICB9XG5cbiAgICAgIC8vIHBvc3QgMi41LjQ6IHYtb25jZSB0cmVlcyBhcmUgY2FjaGVkIG9uIGluc3RhbmNlLl9zdGF0aWNUcmVlcy5cbiAgICAgIC8vIFB1cmUgc3RhdGljIHRyZWVzIGFyZSBjYWNoZWQgb24gdGhlIHN0YXRpY1JlbmRlckZucyBhcnJheVxuICAgICAgLy8gKGJvdGggYWxyZWFkeSByZXNldCBhYm92ZSlcblxuICAgICAgLy8gMi42OiB0ZW1wb3JhcmlseSBtYXJrIHJlbmRlcmVkIHNjb3BlZCBzbG90cyBhcyB1bnN0YWJsZSBzbyB0aGF0XG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzIGNhbiBiZSBmb3JjZWQgdG8gdXBkYXRlXG4gICAgICB2YXIgcmVzdG9yZSA9IHBhdGNoU2NvcGVkU2xvdHMoaW5zdGFuY2UpXG4gICAgICBpbnN0YW5jZS4kZm9yY2VVcGRhdGUoKVxuICAgICAgaW5zdGFuY2UuJG5leHRUaWNrKHJlc3RvcmUpXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICAvLyBmdW5jdGlvbmFsIG9yIG5vIGluc3RhbmNlIGNyZWF0ZWQgeWV0XG4gICAgcmVjb3JkLm9wdGlvbnMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICByZWNvcmQub3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZuc1xuXG4gICAgLy8gaGFuZGxlIGZ1bmN0aW9uYWwgY29tcG9uZW50IHJlLXJlbmRlclxuICAgIGlmIChyZWNvcmQub3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyByZXJlbmRlciB3aXRoIGZ1bGwgb3B0aW9uc1xuICAgICAgaWYgKE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdXBkYXRlT3B0aW9ucyhyZWNvcmQub3B0aW9ucywgb3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRlbXBsYXRlLW9ubHkgcmVyZW5kZXIuXG4gICAgICAgIC8vIG5lZWQgdG8gaW5qZWN0IHRoZSBzdHlsZSBpbmplY3Rpb24gY29kZSBmb3IgQ1NTIG1vZHVsZXNcbiAgICAgICAgLy8gdG8gd29yayBwcm9wZXJseS5cbiAgICAgICAgdmFyIGluamVjdFN0eWxlcyA9IHJlY29yZC5vcHRpb25zLl9pbmplY3RTdHlsZXNcbiAgICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICAgIHZhciByZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgICAgIHJlY29yZC5vcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIChoLCBjdHgpIHtcbiAgICAgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKGN0eClcbiAgICAgICAgICAgIHJldHVybiByZW5kZXIoaCwgY3R4KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVjb3JkLm9wdGlvbnMuX0N0b3IgPSBudWxsXG4gICAgICAvLyAyLjUuM1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVjb3JkLm9wdGlvbnMuY2FjaGVkKSkge1xuICAgICAgICByZWNvcmQub3B0aW9ucy5jYWNoZWQgPSBbXVxuICAgICAgfVxuICAgICAgcmVjb3JkLmluc3RhbmNlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLiRmb3JjZVVwZGF0ZSgpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcblxuZXhwb3J0cy5yZWxvYWQgPSB0cnlXcmFwKGZ1bmN0aW9uIChpZCwgb3B0aW9ucykge1xuICB2YXIgcmVjb3JkID0gbWFwW2lkXVxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMub3B0aW9uc1xuICAgIH1cbiAgICBtYWtlT3B0aW9uc0hvdChpZCwgb3B0aW9ucylcbiAgICBpZiAocmVjb3JkLkN0b3IpIHtcbiAgICAgIGlmICh2ZXJzaW9uWzFdIDwgMikge1xuICAgICAgICAvLyBwcmVzZXJ2ZSBwcmUgMi4yIGJlaGF2aW9yIGZvciBnbG9iYWwgbWl4aW4gaGFuZGxpbmdcbiAgICAgICAgcmVjb3JkLkN0b3IuZXh0ZW5kT3B0aW9ucyA9IG9wdGlvbnNcbiAgICAgIH1cbiAgICAgIHZhciBuZXdDdG9yID0gcmVjb3JkLkN0b3Iuc3VwZXIuZXh0ZW5kKG9wdGlvbnMpXG4gICAgICAvLyBwcmV2ZW50IHJlY29yZC5vcHRpb25zLl9DdG9yIGZyb20gYmVpbmcgb3ZlcndyaXR0ZW4gYWNjaWRlbnRhbGx5XG4gICAgICBuZXdDdG9yLm9wdGlvbnMuX0N0b3IgPSByZWNvcmQub3B0aW9ucy5fQ3RvclxuICAgICAgcmVjb3JkLkN0b3Iub3B0aW9ucyA9IG5ld0N0b3Iub3B0aW9uc1xuICAgICAgcmVjb3JkLkN0b3IuY2lkID0gbmV3Q3Rvci5jaWRcbiAgICAgIHJlY29yZC5DdG9yLnByb3RvdHlwZSA9IG5ld0N0b3IucHJvdG90eXBlXG4gICAgICBpZiAobmV3Q3Rvci5yZWxlYXNlKSB7XG4gICAgICAgIC8vIHRlbXBvcmFyeSBnbG9iYWwgbWl4aW4gc3RyYXRlZ3kgdXNlZCBpbiA8IDIuMC4wLWFscGhhLjZcbiAgICAgICAgbmV3Q3Rvci5yZWxlYXNlKClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlT3B0aW9ucyhyZWNvcmQub3B0aW9ucywgb3B0aW9ucylcbiAgICB9XG4gIH1cbiAgcmVjb3JkLmluc3RhbmNlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgaWYgKGluc3RhbmNlLiR2bm9kZSAmJiBpbnN0YW5jZS4kdm5vZGUuY29udGV4dCkge1xuICAgICAgaW5zdGFuY2UuJHZub2RlLmNvbnRleHQuJGZvcmNlVXBkYXRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnUm9vdCBvciBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlIG1vZGlmaWVkLiBGdWxsIHJlbG9hZCByZXF1aXJlZC4nXG4gICAgICApXG4gICAgfVxuICB9KVxufSlcblxuLy8gMi42IG9wdGltaXplcyB0ZW1wbGF0ZS1jb21waWxlZCBzY29wZWQgc2xvdHMgYW5kIHNraXBzIHVwZGF0ZXMgaWYgY2hpbGRcbi8vIG9ubHkgdXNlcyBzY29wZWQgc2xvdHMuIFdlIG5lZWQgdG8gcGF0Y2ggdGhlIHNjb3BlZCBzbG90cyByZXNvbHZpbmcgaGVscGVyXG4vLyB0byB0ZW1wb3JhcmlseSBtYXJrIGFsbCBzY29wZWQgc2xvdHMgYXMgdW5zdGFibGUgaW4gb3JkZXIgdG8gZm9yY2UgY2hpbGRcbi8vIHVwZGF0ZXMuXG5mdW5jdGlvbiBwYXRjaFNjb3BlZFNsb3RzIChpbnN0YW5jZSkge1xuICBpZiAoIWluc3RhbmNlLl91KSB7IHJldHVybiB9XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvYmxvYi9kZXYvc3JjL2NvcmUvaW5zdGFuY2UvcmVuZGVyLWhlbHBlcnMvcmVzb2x2ZS1zY29wZWQtc2xvdHMuanNcbiAgdmFyIG9yaWdpbmFsID0gaW5zdGFuY2UuX3VcbiAgaW5zdGFuY2UuX3UgPSBmdW5jdGlvbiAoc2xvdHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gMi42LjQgfiAyLjYuNlxuICAgICAgcmV0dXJuIG9yaWdpbmFsKHNsb3RzLCB0cnVlKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIDIuNSAvID49IDIuNi43XG4gICAgICByZXR1cm4gb3JpZ2luYWwoc2xvdHMsIG51bGwsIHRydWUpXG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaW5zdGFuY2UuX3UgPSBvcmlnaW5hbFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\n");
/***/ }),
/***/ "./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js":
/*!*********************************************************************!*\
!*** ./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js ***!
\*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/*!\n * vue-i18n v8.15.0 \n * (c) 2019 kazuya kawaguchi\n * Released under the MIT License.\n */\n/* */\n\n/**\n * constants\n */\n\nvar numberFormatKeys = [\n 'style',\n 'currency',\n 'currencyDisplay',\n 'useGrouping',\n 'minimumIntegerDigits',\n 'minimumFractionDigits',\n 'maximumFractionDigits',\n 'minimumSignificantDigits',\n 'maximumSignificantDigits',\n 'localeMatcher',\n 'formatMatcher'\n];\n\n/**\n * utilities\n */\n\nfunction warn (msg, err) {\n if (typeof console !== 'undefined') {\n console.warn('[vue-i18n] ' + msg);\n /* istanbul ignore if */\n if (err) {\n console.warn(err.stack);\n }\n }\n}\n\nfunction error (msg, err) {\n if (typeof console !== 'undefined') {\n console.error('[vue-i18n] ' + msg);\n /* istanbul ignore if */\n if (err) {\n console.error(err.stack);\n }\n }\n}\n\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\nvar toString = Object.prototype.toString;\nvar OBJECT_STRING = '[object Object]';\nfunction isPlainObject (obj) {\n return toString.call(obj) === OBJECT_STRING\n}\n\nfunction isNull (val) {\n return val === null || val === undefined\n}\n\nfunction parseArgs () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var locale = null;\n var params = null;\n if (args.length === 1) {\n if (isObject(args[0]) || Array.isArray(args[0])) {\n params = args[0];\n } else if (typeof args[0] === 'string') {\n locale = args[0];\n }\n } else if (args.length === 2) {\n if (typeof args[0] === 'string') {\n locale = args[0];\n }\n /* istanbul ignore if */\n if (isObject(args[1]) || Array.isArray(args[1])) {\n params = args[1];\n }\n }\n\n return { locale: locale, params: params }\n}\n\nfunction looseClone (obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\nfunction merge (target) {\n var arguments$1 = arguments;\n\n var output = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments$1[i];\n if (source !== undefined && source !== null) {\n var key = (void 0);\n for (key in source) {\n if (hasOwn(source, key)) {\n if (isObject(source[key])) {\n output[key] = merge(output[key], source[key]);\n } else {\n output[key] = source[key];\n }\n }\n }\n }\n }\n return output\n}\n\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/* */\n\nfunction extend (Vue) {\n if (!Vue.prototype.hasOwnProperty('$i18n')) {\n // $FlowFixMe\n Object.defineProperty(Vue.prototype, '$i18n', {\n get: function get () { return this._i18n }\n });\n }\n\n Vue.prototype.$t = function (key) {\n var values = [], len = arguments.length - 1;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n\n var i18n = this.$i18n;\n return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values ))\n };\n\n Vue.prototype.$tc = function (key, choice) {\n var values = [], len = arguments.length - 2;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];\n\n var i18n = this.$i18n;\n return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values ))\n };\n\n Vue.prototype.$te = function (key, locale) {\n var i18n = this.$i18n;\n return i18n._te(key, i18n.locale, i18n._getMessages(), locale)\n };\n\n Vue.prototype.$d = function (value) {\n var ref;\n\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n return (ref = this.$i18n).d.apply(ref, [ value ].concat( args ))\n };\n\n Vue.prototype.$n = function (value) {\n var ref;\n\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n return (ref = this.$i18n).n.apply(ref, [ value ].concat( args ))\n };\n}\n\n/* */\n\nvar mixin = {\n beforeCreate: function beforeCreate () {\n var options = this.$options;\n options.i18n = options.i18n || (options.__i18n ? {} : null);\n\n if (options.i18n) {\n if (options.i18n instanceof VueI18n) {\n // init locale messages via custom blocks\n if (options.__i18n) {\n try {\n var localeMessages = {};\n options.__i18n.forEach(function (resource) {\n localeMessages = merge(localeMessages, JSON.parse(resource));\n });\n Object.keys(localeMessages).forEach(function (locale) {\n options.i18n.mergeLocaleMessage(locale, localeMessages[locale]);\n });\n } catch (e) {\n if (true) {\n warn(\"Cannot parse locale messages via custom blocks.\", e);\n }\n }\n }\n this._i18n = options.i18n;\n this._i18nWatcher = this._i18n.watchI18nData();\n } else if (isPlainObject(options.i18n)) {\n // component local i18n\n if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n options.i18n.root = this.$root;\n options.i18n.formatter = this.$root.$i18n.formatter;\n options.i18n.fallbackLocale = this.$root.$i18n.fallbackLocale;\n options.i18n.formatFallbackMessages = this.$root.$i18n.formatFallbackMessages;\n options.i18n.silentTranslationWarn = this.$root.$i18n.silentTranslationWarn;\n options.i18n.silentFallbackWarn = this.$root.$i18n.silentFallbackWarn;\n options.i18n.pluralizationRules = this.$root.$i18n.pluralizationRules;\n options.i18n.preserveDirectiveContent = this.$root.$i18n.preserveDirectiveContent;\n }\n\n // init locale messages via custom blocks\n if (options.__i18n) {\n try {\n var localeMessages$1 = {};\n options.__i18n.forEach(function (resource) {\n localeMessages$1 = merge(localeMessages$1, JSON.parse(resource));\n });\n options.i18n.messages = localeMessages$1;\n } catch (e) {\n if (true) {\n warn(\"Cannot parse locale messages via custom blocks.\", e);\n }\n }\n }\n\n var ref = options.i18n;\n var sharedMessages = ref.sharedMessages;\n if (sharedMessages && isPlainObject(sharedMessages)) {\n options.i18n.messages = merge(options.i18n.messages, sharedMessages);\n }\n\n this._i18n = new VueI18n(options.i18n);\n this._i18nWatcher = this._i18n.watchI18nData();\n\n if (options.i18n.sync === undefined || !!options.i18n.sync) {\n this._localeWatcher = this.$i18n.watchLocale();\n }\n } else {\n if (true) {\n warn(\"Cannot be interpreted 'i18n' option.\");\n }\n }\n } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n // root i18n\n this._i18n = this.$root.$i18n;\n } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {\n // parent i18n\n this._i18n = options.parent.$i18n;\n }\n },\n\n beforeMount: function beforeMount () {\n var options = this.$options;\n options.i18n = options.i18n || (options.__i18n ? {} : null);\n\n if (options.i18n) {\n if (options.i18n instanceof VueI18n) {\n // init locale messages via custom blocks\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n } else if (isPlainObject(options.i18n)) {\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n } else {\n if (true) {\n warn(\"Cannot be interpreted 'i18n' option.\");\n }\n }\n } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {\n this._i18n.subscribeDataChanging(this);\n this._subscribing = true;\n }\n },\n\n beforeDestroy: function beforeDestroy () {\n if (!this._i18n) { return }\n\n var self = this;\n this.$nextTick(function () {\n if (self._subscribing) {\n self._i18n.unsubscribeDataChanging(self);\n delete self._subscribing;\n }\n\n if (self._i18nWatcher) {\n self._i18nWatcher();\n self._i18n.destroyVM();\n delete self._i18nWatcher;\n }\n\n if (self._localeWatcher) {\n self._localeWatcher();\n delete self._localeWatcher;\n }\n\n self._i18n = null;\n });\n }\n};\n\n/* */\n\nvar interpolationComponent = {\n name: 'i18n',\n functional: true,\n props: {\n tag: {\n type: String\n },\n path: {\n type: String,\n required: true\n },\n locale: {\n type: String\n },\n places: {\n type: [Array, Object]\n }\n },\n render: function render (h, ref) {\n var data = ref.data;\n var parent = ref.parent;\n var props = ref.props;\n var slots = ref.slots;\n\n var $i18n = parent.$i18n;\n if (!$i18n) {\n if (true) {\n warn('Cannot find VueI18n instance!');\n }\n return\n }\n\n var path = props.path;\n var locale = props.locale;\n var places = props.places;\n var params = slots();\n var children = $i18n.i(\n path,\n locale,\n onlyHasDefaultPlace(params) || places\n ? useLegacyPlaces(params.default, places)\n : params\n );\n\n var tag = props.tag || 'span';\n return tag ? h(tag, data, children) : children\n }\n};\n\nfunction onlyHasDefaultPlace (params) {\n var prop;\n for (prop in params) {\n if (prop !== 'default') { return false }\n }\n return Boolean(prop)\n}\n\nfunction useLegacyPlaces (children, places) {\n var params = places ? createParamsFromPlaces(places) : {};\n\n if (!children) { return params }\n\n // Filter empty text nodes\n children = children.filter(function (child) {\n return child.tag || child.text.trim() !== ''\n });\n\n var everyPlace = children.every(vnodeHasPlaceAttribute);\n if ( true && everyPlace) {\n warn('`place` attribute is deprecated in next major version. Please switch to Vue slots.');\n }\n\n return children.reduce(\n everyPlace ? assignChildPlace : assignChildIndex,\n params\n )\n}\n\nfunction createParamsFromPlaces (places) {\n if (true) {\n warn('`places` prop is deprecated in next major version. Please switch to Vue slots.');\n }\n\n return Array.isArray(places)\n ? places.reduce(assignChildIndex, {})\n : Object.assign({}, places)\n}\n\nfunction assignChildPlace (params, child) {\n if (child.data && child.data.attrs && child.data.attrs.place) {\n params[child.data.attrs.place] = child;\n }\n return params\n}\n\nfunction assignChildIndex (params, child, index) {\n params[index] = child;\n return params\n}\n\nfunction vnodeHasPlaceAttribute (vnode) {\n return Boolean(vnode.data && vnode.data.attrs && vnode.data.attrs.place)\n}\n\n/* */\n\nvar numberComponent = {\n name: 'i18n-n',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'span'\n },\n value: {\n type: Number,\n required: true\n },\n format: {\n type: [String, Object]\n },\n locale: {\n type: String\n }\n },\n render: function render (h, ref) {\n var props = ref.props;\n var parent = ref.parent;\n var data = ref.data;\n\n var i18n = parent.$i18n;\n\n if (!i18n) {\n if (true) {\n warn('Cannot find VueI18n instance!');\n }\n return null\n }\n\n var key = null;\n var options = null;\n\n if (typeof props.format === 'string') {\n key = props.format;\n } else if (isObject(props.format)) {\n if (props.format.key) {\n key = props.format.key;\n }\n\n // Filter out number format options only\n options = Object.keys(props.format).reduce(function (acc, prop) {\n var obj;\n\n if (numberFormatKeys.includes(prop)) {\n return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj ))\n }\n return acc\n }, null);\n }\n\n var locale = props.locale || i18n.locale;\n var parts = i18n._ntp(props.value, locale, key, options);\n\n var values = parts.map(function (part, index) {\n var obj;\n\n var slot = data.scopedSlots && data.scopedSlots[part.type];\n return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value\n });\n\n return h(props.tag, {\n attrs: data.attrs,\n 'class': data['class'],\n staticClass: data.staticClass\n }, values)\n }\n};\n\n/* */\n\nfunction bind (el, binding, vnode) {\n if (!assert(el, vnode)) { return }\n\n t(el, binding, vnode);\n}\n\nfunction update (el, binding, vnode, oldVNode) {\n if (!assert(el, vnode)) { return }\n\n var i18n = vnode.context.$i18n;\n if (localeEqual(el, vnode) &&\n (looseEqual(binding.value, binding.oldValue) &&\n looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return }\n\n t(el, binding, vnode);\n}\n\nfunction unbind (el, binding, vnode, oldVNode) {\n var vm = vnode.context;\n if (!vm) {\n warn('Vue instance does not exists in VNode context');\n return\n }\n\n var i18n = vnode.context.$i18n || {};\n if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) {\n el.textContent = '';\n }\n el._vt = undefined;\n delete el['_vt'];\n el._locale = undefined;\n delete el['_locale'];\n el._localeMessage = undefined;\n delete el['_localeMessage'];\n}\n\nfunction assert (el, vnode) {\n var vm = vnode.context;\n if (!vm) {\n warn('Vue instance does not exists in VNode context');\n return false\n }\n\n if (!vm.$i18n) {\n warn('VueI18n instance does not exists in Vue instance');\n return false\n }\n\n return true\n}\n\nfunction localeEqual (el, vnode) {\n var vm = vnode.context;\n return el._locale === vm.$i18n.locale\n}\n\nfunction t (el, binding, vnode) {\n var ref$1, ref$2;\n\n var value = binding.value;\n\n var ref = parseValue(value);\n var path = ref.path;\n var locale = ref.locale;\n var args = ref.args;\n var choice = ref.choice;\n if (!path && !locale && !args) {\n warn('value type not supported');\n return\n }\n\n if (!path) {\n warn('`path` is required in v-t directive');\n return\n }\n\n var vm = vnode.context;\n if (choice) {\n el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) ));\n } else {\n el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) ));\n }\n el._locale = vm.$i18n.locale;\n el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale);\n}\n\nfunction parseValue (value) {\n var path;\n var locale;\n var args;\n var choice;\n\n if (typeof value === 'string') {\n path = value;\n } else if (isPlainObject(value)) {\n path = value.path;\n locale = value.locale;\n args = value.args;\n choice = value.choice;\n }\n\n return { path: path, locale: locale, args: args, choice: choice }\n}\n\nfunction makeParams (locale, args) {\n var params = [];\n\n locale && params.push(locale);\n if (args && (Array.isArray(args) || isPlainObject(args))) {\n params.push(args);\n }\n\n return params\n}\n\nvar Vue;\n\nfunction install (_Vue) {\n /* istanbul ignore if */\n if ( true && install.installed && _Vue === Vue) {\n warn('already installed.');\n return\n }\n install.installed = true;\n\n Vue = _Vue;\n\n var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1;\n /* istanbul ignore if */\n if ( true && version < 2) {\n warn((\"vue-i18n (\" + (install.version) + \") need to use Vue 2.0 or later (Vue: \" + (Vue.version) + \").\"));\n return\n }\n\n extend(Vue);\n Vue.mixin(mixin);\n Vue.directive('t', { bind: bind, update: update, unbind: unbind });\n Vue.component(interpolationComponent.name, interpolationComponent);\n Vue.component(numberComponent.name, numberComponent);\n\n // use simple mergeStrategies to prevent i18n instance lose '__proto__'\n var strats = Vue.config.optionMergeStrategies;\n strats.i18n = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n };\n}\n\n/* */\n\nvar BaseFormatter = function BaseFormatter () {\n this._caches = Object.create(null);\n};\n\nBaseFormatter.prototype.interpolate = function interpolate (message, values) {\n if (!values) {\n return [message]\n }\n var tokens = this._caches[message];\n if (!tokens) {\n tokens = parse(message);\n this._caches[message] = tokens;\n }\n return compile(tokens, values)\n};\n\n\n\nvar RE_TOKEN_LIST_VALUE = /^(?:\\d)+/;\nvar RE_TOKEN_NAMED_VALUE = /^(?:\\w)+/;\n\nfunction parse (format) {\n var tokens = [];\n var position = 0;\n\n var text = '';\n while (position < format.length) {\n var char = format[position++];\n if (char === '{') {\n if (text) {\n tokens.push({ type: 'text', value: text });\n }\n\n text = '';\n var sub = '';\n char = format[position++];\n while (char !== undefined && char !== '}') {\n sub += char;\n char = format[position++];\n }\n var isClosed = char === '}';\n\n var type = RE_TOKEN_LIST_VALUE.test(sub)\n ? 'list'\n : isClosed && RE_TOKEN_NAMED_VALUE.test(sub)\n ? 'named'\n : 'unknown';\n tokens.push({ value: sub, type: type });\n } else if (char === '%') {\n // when found rails i18n syntax, skip text capture\n if (format[(position)] !== '{') {\n text += char;\n }\n } else {\n text += char;\n }\n }\n\n text && tokens.push({ type: 'text', value: text });\n\n return tokens\n}\n\nfunction compile (tokens, values) {\n var compiled = [];\n var index = 0;\n\n var mode = Array.isArray(values)\n ? 'list'\n : isObject(values)\n ? 'named'\n : 'unknown';\n if (mode === 'unknown') { return compiled }\n\n while (index < tokens.length) {\n var token = tokens[index];\n switch (token.type) {\n case 'text':\n compiled.push(token.value);\n break\n case 'list':\n compiled.push(values[parseInt(token.value, 10)]);\n break\n case 'named':\n if (mode === 'named') {\n compiled.push((values)[token.value]);\n } else {\n if (true) {\n warn((\"Type of token '\" + (token.type) + \"' and format of value '\" + mode + \"' don't match!\"));\n }\n }\n break\n case 'unknown':\n if (true) {\n warn(\"Detect 'unknown' type of token!\");\n }\n break\n }\n index++;\n }\n\n return compiled\n}\n\n/* */\n\n/**\n * Path parser\n * - Inspired:\n * Vue.js Path parser\n */\n\n// actions\nvar APPEND = 0;\nvar PUSH = 1;\nvar INC_SUB_PATH_DEPTH = 2;\nvar PUSH_SUB_PATH = 3;\n\n// states\nvar BEFORE_PATH = 0;\nvar IN_PATH = 1;\nvar BEFORE_IDENT = 2;\nvar IN_IDENT = 3;\nvar IN_SUB_PATH = 4;\nvar IN_SINGLE_QUOTE = 5;\nvar IN_DOUBLE_QUOTE = 6;\nvar AFTER_PATH = 7;\nvar ERROR = 8;\n\nvar pathStateMachine = [];\n\npathStateMachine[BEFORE_PATH] = {\n 'ws': [BEFORE_PATH],\n 'ident': [IN_IDENT, APPEND],\n '[': [IN_SUB_PATH],\n 'eof': [AFTER_PATH]\n};\n\npathStateMachine[IN_PATH] = {\n 'ws': [IN_PATH],\n '.': [BEFORE_IDENT],\n '[': [IN_SUB_PATH],\n 'eof': [AFTER_PATH]\n};\n\npathStateMachine[BEFORE_IDENT] = {\n 'ws': [BEFORE_IDENT],\n 'ident': [IN_IDENT, APPEND],\n '0': [IN_IDENT, APPEND],\n 'number': [IN_IDENT, APPEND]\n};\n\npathStateMachine[IN_IDENT] = {\n 'ident': [IN_IDENT, APPEND],\n '0': [IN_IDENT, APPEND],\n 'number': [IN_IDENT, APPEND],\n 'ws': [IN_PATH, PUSH],\n '.': [BEFORE_IDENT, PUSH],\n '[': [IN_SUB_PATH, PUSH],\n 'eof': [AFTER_PATH, PUSH]\n};\n\npathStateMachine[IN_SUB_PATH] = {\n \"'\": [IN_SINGLE_QUOTE, APPEND],\n '\"': [IN_DOUBLE_QUOTE, APPEND],\n '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],\n ']': [IN_PATH, PUSH_SUB_PATH],\n 'eof': ERROR,\n 'else': [IN_SUB_PATH, APPEND]\n};\n\npathStateMachine[IN_SINGLE_QUOTE] = {\n \"'\": [IN_SUB_PATH, APPEND],\n 'eof': ERROR,\n 'else': [IN_SINGLE_QUOTE, APPEND]\n};\n\npathStateMachine[IN_DOUBLE_QUOTE] = {\n '\"': [IN_SUB_PATH, APPEND],\n 'eof': ERROR,\n 'else': [IN_DOUBLE_QUOTE, APPEND]\n};\n\n/**\n * Check if an expression is a literal value.\n */\n\nvar literalValueRE = /^\\s?(?:true|false|-?[\\d.]+|'[^']*'|\"[^\"]*\")\\s?$/;\nfunction isLiteral (exp) {\n return literalValueRE.test(exp)\n}\n\n/**\n * Strip quotes from a string\n */\n\nfunction stripQuotes (str) {\n var a = str.charCodeAt(0);\n var b = str.charCodeAt(str.length - 1);\n return a === b && (a === 0x22 || a === 0x27)\n ? str.slice(1, -1)\n : str\n}\n\n/**\n * Determine the type of a character in a keypath.\n */\n\nfunction getPathCharType (ch) {\n if (ch === undefined || ch === null) { return 'eof' }\n\n var code = ch.charCodeAt(0);\n\n switch (code) {\n case 0x5B: // [\n case 0x5D: // ]\n case 0x2E: // .\n case 0x22: // \"\n case 0x27: // '\n return ch\n\n case 0x5F: // _\n case 0x24: // $\n case 0x2D: // -\n return 'ident'\n\n case 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n case 0xA0: // No-break space\n case 0xFEFF: // Byte Order Mark\n case 0x2028: // Line Separator\n case 0x2029: // Paragraph Separator\n return 'ws'\n }\n\n return 'ident'\n}\n\n/**\n * Format a subPath, return its plain form if it is\n * a literal string or number. Otherwise prepend the\n * dynamic indicator (*).\n */\n\nfunction formatSubPath (path) {\n var trimmed = path.trim();\n // invalid leading 0\n if (path.charAt(0) === '0' && isNaN(path)) { return false }\n\n return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed\n}\n\n/**\n * Parse a string path into an array of segments\n */\n\nfunction parse$1 (path) {\n var keys = [];\n var index = -1;\n var mode = BEFORE_PATH;\n var subPathDepth = 0;\n var c;\n var key;\n var newChar;\n var type;\n var transition;\n var action;\n var typeMap;\n var actions = [];\n\n actions[PUSH] = function () {\n if (key !== undefined) {\n keys.push(key);\n key = undefined;\n }\n };\n\n actions[APPEND] = function () {\n if (key === undefined) {\n key = newChar;\n } else {\n key += newChar;\n }\n };\n\n actions[INC_SUB_PATH_DEPTH] = function () {\n actions[APPEND]();\n subPathDepth++;\n };\n\n actions[PUSH_SUB_PATH] = function () {\n if (subPathDepth > 0) {\n subPathDepth--;\n mode = IN_SUB_PATH;\n actions[APPEND]();\n } else {\n subPathDepth = 0;\n if (key === undefined) { return false }\n key = formatSubPath(key);\n if (key === false) {\n return false\n } else {\n actions[PUSH]();\n }\n }\n };\n\n function maybeUnescapeQuote () {\n var nextChar = path[index + 1];\n if ((mode === IN_SINGLE_QUOTE && nextChar === \"'\") ||\n (mode === IN_DOUBLE_QUOTE && nextChar === '\"')) {\n index++;\n newChar = '\\\\' + nextChar;\n actions[APPEND]();\n return true\n }\n }\n\n while (mode !== null) {\n index++;\n c = path[index];\n\n if (c === '\\\\' && maybeUnescapeQuote()) {\n continue\n }\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mode];\n transition = typeMap[type] || typeMap['else'] || ERROR;\n\n if (transition === ERROR) {\n return // parse error\n }\n\n mode = transition[0];\n action = actions[transition[1]];\n if (action) {\n newChar = transition[2];\n newChar = newChar === undefined\n ? c\n : newChar;\n if (action() === false) {\n return\n }\n }\n\n if (mode === AFTER_PATH) {\n return keys\n }\n }\n}\n\n\n\n\n\nvar I18nPath = function I18nPath () {\n this._cache = Object.create(null);\n};\n\n/**\n * External parse that check for a cache hit first\n */\nI18nPath.prototype.parsePath = function parsePath (path) {\n var hit = this._cache[path];\n if (!hit) {\n hit = parse$1(path);\n if (hit) {\n this._cache[path] = hit;\n }\n }\n return hit || []\n};\n\n/**\n * Get path value from path string\n */\nI18nPath.prototype.getPathValue = function getPathValue (obj, path) {\n if (!isObject(obj)) { return null }\n\n var paths = this.parsePath(path);\n if (paths.length === 0) {\n return null\n } else {\n var length = paths.length;\n var last = obj;\n var i = 0;\n while (i < length) {\n var value = last[paths[i]];\n if (value === undefined) {\n return null\n }\n last = value;\n i++;\n }\n\n return last\n }\n};\n\n/* */\n\n\n\nvar htmlTagMatcher = /<\\/?[\\w\\s=\"/.':;#-\\/]+>/;\nvar linkKeyMatcher = /(?:@(?:\\.[a-z]+)?:(?:[\\w\\-_|.]+|\\([\\w\\-_|.]+\\)))/g;\nvar linkKeyPrefixMatcher = /^@(?:\\.([a-z]+))?:/;\nvar bracketsMatcher = /[()]/g;\nvar defaultModifiers = {\n 'upper': function (str) { return str.toLocaleUpperCase(); },\n 'lower': function (str) { return str.toLocaleLowerCase(); }\n};\n\nvar defaultFormatter = new BaseFormatter();\n\nvar VueI18n = function VueI18n (options) {\n var this$1 = this;\n if ( options === void 0 ) options = {};\n\n // Auto install if it is not done yet and `window` has `Vue`.\n // To allow users to avoid auto-installation in some cases,\n // this code should be placed here. See #290\n /* istanbul ignore if */\n if (!Vue && typeof window !== 'undefined' && window.Vue) {\n install(window.Vue);\n }\n\n var locale = options.locale || 'en-US';\n var fallbackLocale = options.fallbackLocale || 'en-US';\n var messages = options.messages || {};\n var dateTimeFormats = options.dateTimeFormats || {};\n var numberFormats = options.numberFormats || {};\n\n this._vm = null;\n this._formatter = options.formatter || defaultFormatter;\n this._modifiers = options.modifiers || {};\n this._missing = options.missing || null;\n this._root = options.root || null;\n this._sync = options.sync === undefined ? true : !!options.sync;\n this._fallbackRoot = options.fallbackRoot === undefined\n ? true\n : !!options.fallbackRoot;\n this._formatFallbackMessages = options.formatFallbackMessages === undefined\n ? false\n : !!options.formatFallbackMessages;\n this._silentTranslationWarn = options.silentTranslationWarn === undefined\n ? false\n : options.silentTranslationWarn;\n this._silentFallbackWarn = options.silentFallbackWarn === undefined\n ? false\n : !!options.silentFallbackWarn;\n this._dateTimeFormatters = {};\n this._numberFormatters = {};\n this._path = new I18nPath();\n this._dataListeners = [];\n this._preserveDirectiveContent = options.preserveDirectiveContent === undefined\n ? false\n : !!options.preserveDirectiveContent;\n this.pluralizationRules = options.pluralizationRules || {};\n this._warnHtmlInMessage = options.warnHtmlInMessage || 'off';\n\n this._exist = function (message, key) {\n if (!message || !key) { return false }\n if (!isNull(this$1._path.getPathValue(message, key))) { return true }\n // fallback for flat key\n if (message[key]) { return true }\n return false\n };\n\n if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n Object.keys(messages).forEach(function (locale) {\n this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);\n });\n }\n\n this._initVM({\n locale: locale,\n fallbackLocale: fallbackLocale,\n messages: messages,\n dateTimeFormats: dateTimeFormats,\n numberFormats: numberFormats\n });\n};\n\nvar prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },formatFallbackMessages: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true },warnHtmlInMessage: { configurable: true } };\n\nVueI18n.prototype._checkLocaleMessage = function _checkLocaleMessage (locale, level, message) {\n var paths = [];\n\n var fn = function (level, locale, message, paths) {\n if (isPlainObject(message)) {\n Object.keys(message).forEach(function (key) {\n var val = message[key];\n if (isPlainObject(val)) {\n paths.push(key);\n paths.push('.');\n fn(level, locale, val, paths);\n paths.pop();\n paths.pop();\n } else {\n paths.push(key);\n fn(level, locale, val, paths);\n paths.pop();\n }\n });\n } else if (Array.isArray(message)) {\n message.forEach(function (item, index) {\n if (isPlainObject(item)) {\n paths.push((\"[\" + index + \"]\"));\n paths.push('.');\n fn(level, locale, item, paths);\n paths.pop();\n paths.pop();\n } else {\n paths.push((\"[\" + index + \"]\"));\n fn(level, locale, item, paths);\n paths.pop();\n }\n });\n } else if (typeof message === 'string') {\n var ret = htmlTagMatcher.test(message);\n if (ret) {\n var msg = \"Detected HTML in message '\" + message + \"' of keypath '\" + (paths.join('')) + \"' at '\" + locale + \"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp\";\n if (level === 'warn') {\n warn(msg);\n } else if (level === 'error') {\n error(msg);\n }\n }\n }\n };\n\n fn(level, locale, message, paths);\n};\n\nVueI18n.prototype._initVM = function _initVM (data) {\n var silent = Vue.config.silent;\n Vue.config.silent = true;\n this._vm = new Vue({ data: data });\n Vue.config.silent = silent;\n};\n\nVueI18n.prototype.destroyVM = function destroyVM () {\n this._vm.$destroy();\n};\n\nVueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) {\n this._dataListeners.push(vm);\n};\n\nVueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) {\n remove(this._dataListeners, vm);\n};\n\nVueI18n.prototype.watchI18nData = function watchI18nData () {\n var self = this;\n return this._vm.$watch('$data', function () {\n var i = self._dataListeners.length;\n while (i--) {\n Vue.nextTick(function () {\n self._dataListeners[i] && self._dataListeners[i].$forceUpdate();\n });\n }\n }, { deep: true })\n};\n\nVueI18n.prototype.watchLocale = function watchLocale () {\n /* istanbul ignore if */\n if (!this._sync || !this._root) { return null }\n var target = this._vm;\n return this._root.$i18n.vm.$watch('locale', function (val) {\n target.$set(target, 'locale', val);\n target.$forceUpdate();\n }, { immediate: true })\n};\n\nprototypeAccessors.vm.get = function () { return this._vm };\n\nprototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) };\nprototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) };\nprototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) };\nprototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() };\n\nprototypeAccessors.locale.get = function () { return this._vm.locale };\nprototypeAccessors.locale.set = function (locale) {\n this._vm.$set(this._vm, 'locale', locale);\n};\n\nprototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale };\nprototypeAccessors.fallbackLocale.set = function (locale) {\n this._vm.$set(this._vm, 'fallbackLocale', locale);\n};\n\nprototypeAccessors.formatFallbackMessages.get = function () { return this._formatFallbackMessages };\nprototypeAccessors.formatFallbackMessages.set = function (fallback) { this._formatFallbackMessages = fallback; };\n\nprototypeAccessors.missing.get = function () { return this._missing };\nprototypeAccessors.missing.set = function (handler) { this._missing = handler; };\n\nprototypeAccessors.formatter.get = function () { return this._formatter };\nprototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; };\n\nprototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn };\nprototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; };\n\nprototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn };\nprototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; };\n\nprototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent };\nprototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; };\n\nprototypeAccessors.warnHtmlInMessage.get = function () { return this._warnHtmlInMessage };\nprototypeAccessors.warnHtmlInMessage.set = function (level) {\n var this$1 = this;\n\n var orgLevel = this._warnHtmlInMessage;\n this._warnHtmlInMessage = level;\n if (orgLevel !== level && (level === 'warn' || level === 'error')) {\n var messages = this._getMessages();\n Object.keys(messages).forEach(function (locale) {\n this$1._checkLocaleMessage(locale, this$1._warnHtmlInMessage, messages[locale]);\n });\n }\n};\n\nVueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages };\nVueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats };\nVueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats };\n\nVueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values) {\n if (!isNull(result)) { return result }\n if (this._missing) {\n var missingRet = this._missing.apply(null, [locale, key, vm, values]);\n if (typeof missingRet === 'string') {\n return missingRet\n }\n } else {\n if ( true && !this._isSilentTranslationWarn(key)) {\n warn(\n \"Cannot translate the value of keypath '\" + key + \"'. \" +\n 'Use the value of keypath as default.'\n );\n }\n }\n\n if (this._formatFallbackMessages) {\n var parsedArgs = parseArgs.apply(void 0, values);\n return this._render(key, 'string', parsedArgs.params, key)\n } else {\n return key\n }\n};\n\nVueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) {\n return !val && !isNull(this._root) && this._fallbackRoot\n};\n\nVueI18n.prototype._isSilentFallbackWarn = function _isSilentFallbackWarn (key) {\n return this._silentFallbackWarn instanceof RegExp\n ? this._silentFallbackWarn.test(key)\n : this._silentFallbackWarn\n};\n\nVueI18n.prototype._isSilentFallback = function _isSilentFallback (locale, key) {\n return this._isSilentFallbackWarn(key) && (this._isFallbackRoot() || locale !== this.fallbackLocale)\n};\n\nVueI18n.prototype._isSilentTranslationWarn = function _isSilentTranslationWarn (key) {\n return this._silentTranslationWarn instanceof RegExp\n ? this._silentTranslationWarn.test(key)\n : this._silentTranslationWarn\n};\n\nVueI18n.prototype._interpolate = function _interpolate (\n locale,\n message,\n key,\n host,\n interpolateMode,\n values,\n visitedLinkStack\n) {\n if (!message) { return null }\n\n var pathRet = this._path.getPathValue(message, key);\n if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet }\n\n var ret;\n if (isNull(pathRet)) {\n /* istanbul ignore else */\n if (isPlainObject(message)) {\n ret = message[key];\n if (typeof ret !== 'string') {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {\n warn((\"Value of key '\" + key + \"' is not a string!\"));\n }\n return null\n }\n } else {\n return null\n }\n } else {\n /* istanbul ignore else */\n if (typeof pathRet === 'string') {\n ret = pathRet;\n } else {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallback(locale, key)) {\n warn((\"Value of key '\" + key + \"' is not a string!\"));\n }\n return null\n }\n }\n\n // Check for the existence of links within the translated string\n if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) {\n ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack);\n }\n\n return this._render(ret, interpolateMode, values, key)\n};\n\nVueI18n.prototype._link = function _link (\n locale,\n message,\n str,\n host,\n interpolateMode,\n values,\n visitedLinkStack\n) {\n var ret = str;\n\n // Match all the links within the local\n // We are going to replace each of\n // them with its translation\n var matches = ret.match(linkKeyMatcher);\n for (var idx in matches) {\n // ie compatible: filter custom array\n // prototype method\n if (!matches.hasOwnProperty(idx)) {\n continue\n }\n var link = matches[idx];\n var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher);\n var linkPrefix = linkKeyPrefixMatches[0];\n var formatterName = linkKeyPrefixMatches[1];\n\n // Remove the leading @:, @.case: and the brackets\n var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, '');\n\n if (visitedLinkStack.includes(linkPlaceholder)) {\n if (true) {\n warn((\"Circular reference found. \\\"\" + link + \"\\\" is already visited in the chain of \" + (visitedLinkStack.reverse().join(' <- '))));\n }\n return ret\n }\n visitedLinkStack.push(linkPlaceholder);\n\n // Translate the link\n var translated = this._interpolate(\n locale, message, linkPlaceholder, host,\n interpolateMode === 'raw' ? 'string' : interpolateMode,\n interpolateMode === 'raw' ? undefined : values,\n visitedLinkStack\n );\n\n if (this._isFallbackRoot(translated)) {\n if ( true && !this._isSilentTranslationWarn(linkPlaceholder)) {\n warn((\"Fall back to translate the link placeholder '\" + linkPlaceholder + \"' with root locale.\"));\n }\n /* istanbul ignore if */\n if (!this._root) { throw Error('unexpected error') }\n var root = this._root.$i18n;\n translated = root._translate(\n root._getMessages(), root.locale, root.fallbackLocale,\n linkPlaceholder, host, interpolateMode, values\n );\n }\n translated = this._warnDefault(\n locale, linkPlaceholder, translated, host,\n Array.isArray(values) ? values : [values]\n );\n\n if (this._modifiers.hasOwnProperty(formatterName)) {\n translated = this._modifiers[formatterName](translated);\n } else if (defaultModifiers.hasOwnProperty(formatterName)) {\n translated = defaultModifiers[formatterName](translated);\n }\n\n visitedLinkStack.pop();\n\n // Replace the link with the translated\n ret = !translated ? ret : ret.replace(link, translated);\n }\n\n return ret\n};\n\nVueI18n.prototype._render = function _render (message, interpolateMode, values, path) {\n var ret = this._formatter.interpolate(message, values, path);\n\n // If the custom formatter refuses to work - apply the default one\n if (!ret) {\n ret = defaultFormatter.interpolate(message, values, path);\n }\n\n // if interpolateMode is **not** 'string' ('row'),\n // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter\n return interpolateMode === 'string' ? ret.join('') : ret\n};\n\nVueI18n.prototype._translate = function _translate (\n messages,\n locale,\n fallback,\n key,\n host,\n interpolateMode,\n args\n) {\n var res =\n this._interpolate(locale, messages[locale], key, host, interpolateMode, args, [key]);\n if (!isNull(res)) { return res }\n\n res = this._interpolate(fallback, messages[fallback], key, host, interpolateMode, args, [key]);\n if (!isNull(res)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn((\"Fall back to translate the keypath '\" + key + \"' with '\" + fallback + \"' locale.\"));\n }\n return res\n } else {\n return null\n }\n};\n\nVueI18n.prototype._t = function _t (key, _locale, messages, host) {\n var ref;\n\n var values = [], len = arguments.length - 4;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ];\n if (!key) { return '' }\n\n var parsedArgs = parseArgs.apply(void 0, values);\n var locale = parsedArgs.locale || _locale;\n\n var ret = this._translate(\n messages, locale, this.fallbackLocale, key,\n host, 'string', parsedArgs.params\n );\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn((\"Fall back to translate the keypath '\" + key + \"' with root locale.\"));\n }\n /* istanbul ignore if */\n if (!this._root) { throw Error('unexpected error') }\n return (ref = this._root).$t.apply(ref, [ key ].concat( values ))\n } else {\n return this._warnDefault(locale, key, ret, host, values)\n }\n};\n\nVueI18n.prototype.t = function t (key) {\n var ref;\n\n var values = [], len = arguments.length - 1;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];\n return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values ))\n};\n\nVueI18n.prototype._i = function _i (key, locale, messages, host, values) {\n var ret =\n this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key)) {\n warn((\"Fall back to interpolate the keypath '\" + key + \"' with root locale.\"));\n }\n if (!this._root) { throw Error('unexpected error') }\n return this._root.$i18n.i(key, locale, values)\n } else {\n return this._warnDefault(locale, key, ret, host, [values])\n }\n};\n\nVueI18n.prototype.i = function i (key, locale, values) {\n /* istanbul ignore if */\n if (!key) { return '' }\n\n if (typeof locale !== 'string') {\n locale = this.locale;\n }\n\n return this._i(key, locale, this._getMessages(), null, values)\n};\n\nVueI18n.prototype._tc = function _tc (\n key,\n _locale,\n messages,\n host,\n choice\n) {\n var ref;\n\n var values = [], len = arguments.length - 5;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ];\n if (!key) { return '' }\n if (choice === undefined) {\n choice = 1;\n }\n\n var predefined = { 'count': choice, 'n': choice };\n var parsedArgs = parseArgs.apply(void 0, values);\n parsedArgs.params = Object.assign(predefined, parsedArgs.params);\n values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params];\n return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice)\n};\n\nVueI18n.prototype.fetchChoice = function fetchChoice (message, choice) {\n /* istanbul ignore if */\n if (!message && typeof message !== 'string') { return null }\n var choices = message.split('|');\n\n choice = this.getChoiceIndex(choice, choices.length);\n if (!choices[choice]) { return message }\n return choices[choice].trim()\n};\n\n/**\n * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)`\n * @param choicesLength {number} an overall amount of available choices\n * @returns a final choice index\n*/\nVueI18n.prototype.getChoiceIndex = function getChoiceIndex (choice, choicesLength) {\n // Default (old) getChoiceIndex implementation - english-compatible\n var defaultImpl = function (_choice, _choicesLength) {\n _choice = Math.abs(_choice);\n\n if (_choicesLength === 2) {\n return _choice\n ? _choice > 1\n ? 1\n : 0\n : 1\n }\n\n return _choice ? Math.min(_choice, 2) : 0\n };\n\n if (this.locale in this.pluralizationRules) {\n return this.pluralizationRules[this.locale].apply(this, [choice, choicesLength])\n } else {\n return defaultImpl(choice, choicesLength)\n }\n};\n\nVueI18n.prototype.tc = function tc (key, choice) {\n var ref;\n\n var values = [], len = arguments.length - 2;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];\n return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values ))\n};\n\nVueI18n.prototype._te = function _te (key, locale, messages) {\n var args = [], len = arguments.length - 3;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ];\n\n var _locale = parseArgs.apply(void 0, args).locale || locale;\n return this._exist(messages[_locale], key)\n};\n\nVueI18n.prototype.te = function te (key, locale) {\n return this._te(key, this.locale, this._getMessages(), locale)\n};\n\nVueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) {\n return looseClone(this._vm.messages[locale] || {})\n};\n\nVueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) {\n if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);\n if (this._warnHtmlInMessage === 'error') { return }\n }\n this._vm.$set(this._vm.messages, locale, message);\n};\n\nVueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) {\n if (this._warnHtmlInMessage === 'warn' || this._warnHtmlInMessage === 'error') {\n this._checkLocaleMessage(locale, this._warnHtmlInMessage, message);\n if (this._warnHtmlInMessage === 'error') { return }\n }\n this._vm.$set(this._vm.messages, locale, merge(this._vm.messages[locale] || {}, message));\n};\n\nVueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) {\n return looseClone(this._vm.dateTimeFormats[locale] || {})\n};\n\nVueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) {\n this._vm.$set(this._vm.dateTimeFormats, locale, format);\n};\n\nVueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) {\n this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format));\n};\n\nVueI18n.prototype._localizeDateTime = function _localizeDateTime (\n value,\n locale,\n fallback,\n dateTimeFormats,\n key\n) {\n var _locale = locale;\n var formats = dateTimeFormats[_locale];\n\n // fallback locale\n if (isNull(formats) || isNull(formats[key])) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn((\"Fall back to '\" + fallback + \"' datetime formats from '\" + locale + \"' datetime formats.\"));\n }\n _locale = fallback;\n formats = dateTimeFormats[_locale];\n }\n\n if (isNull(formats) || isNull(formats[key])) {\n return null\n } else {\n var format = formats[key];\n var id = _locale + \"__\" + key;\n var formatter = this._dateTimeFormatters[id];\n if (!formatter) {\n formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format);\n }\n return formatter.format(value)\n }\n};\n\nVueI18n.prototype._d = function _d (value, locale, key) {\n /* istanbul ignore if */\n if ( true && !VueI18n.availabilities.dateTimeFormat) {\n warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.');\n return ''\n }\n\n if (!key) {\n return new Intl.DateTimeFormat(locale).format(value)\n }\n\n var ret =\n this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn((\"Fall back to datetime localization of root: key '\" + key + \"'.\"));\n }\n /* istanbul ignore if */\n if (!this._root) { throw Error('unexpected error') }\n return this._root.$i18n.d(value, key, locale)\n } else {\n return ret || ''\n }\n};\n\nVueI18n.prototype.d = function d (value) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n var locale = this.locale;\n var key = null;\n\n if (args.length === 1) {\n if (typeof args[0] === 'string') {\n key = args[0];\n } else if (isObject(args[0])) {\n if (args[0].locale) {\n locale = args[0].locale;\n }\n if (args[0].key) {\n key = args[0].key;\n }\n }\n } else if (args.length === 2) {\n if (typeof args[0] === 'string') {\n key = args[0];\n }\n if (typeof args[1] === 'string') {\n locale = args[1];\n }\n }\n\n return this._d(value, locale, key)\n};\n\nVueI18n.prototype.getNumberFormat = function getNumberFormat (locale) {\n return looseClone(this._vm.numberFormats[locale] || {})\n};\n\nVueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) {\n this._vm.$set(this._vm.numberFormats, locale, format);\n};\n\nVueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) {\n this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format));\n};\n\nVueI18n.prototype._getNumberFormatter = function _getNumberFormatter (\n value,\n locale,\n fallback,\n numberFormats,\n key,\n options\n) {\n var _locale = locale;\n var formats = numberFormats[_locale];\n\n // fallback locale\n if (isNull(formats) || isNull(formats[key])) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn((\"Fall back to '\" + fallback + \"' number formats from '\" + locale + \"' number formats.\"));\n }\n _locale = fallback;\n formats = numberFormats[_locale];\n }\n\n if (isNull(formats) || isNull(formats[key])) {\n return null\n } else {\n var format = formats[key];\n\n var formatter;\n if (options) {\n // If options specified - create one time number formatter\n formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options));\n } else {\n var id = _locale + \"__\" + key;\n formatter = this._numberFormatters[id];\n if (!formatter) {\n formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format);\n }\n }\n return formatter\n }\n};\n\nVueI18n.prototype._n = function _n (value, locale, key, options) {\n /* istanbul ignore if */\n if (!VueI18n.availabilities.numberFormat) {\n if (true) {\n warn('Cannot format a Number value due to not supported Intl.NumberFormat.');\n }\n return ''\n }\n\n if (!key) {\n var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);\n return nf.format(value)\n }\n\n var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);\n var ret = formatter && formatter.format(value);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key) && !this._isSilentFallbackWarn(key)) {\n warn((\"Fall back to number localization of root: key '\" + key + \"'.\"));\n }\n /* istanbul ignore if */\n if (!this._root) { throw Error('unexpected error') }\n return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options))\n } else {\n return ret || ''\n }\n};\n\nVueI18n.prototype.n = function n (value) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n var locale = this.locale;\n var key = null;\n var options = null;\n\n if (args.length === 1) {\n if (typeof args[0] === 'string') {\n key = args[0];\n } else if (isObject(args[0])) {\n if (args[0].locale) {\n locale = args[0].locale;\n }\n if (args[0].key) {\n key = args[0].key;\n }\n\n // Filter out number format options only\n options = Object.keys(args[0]).reduce(function (acc, key) {\n var obj;\n\n if (numberFormatKeys.includes(key)) {\n return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj ))\n }\n return acc\n }, null);\n }\n } else if (args.length === 2) {\n if (typeof args[0] === 'string') {\n key = args[0];\n }\n if (typeof args[1] === 'string') {\n locale = args[1];\n }\n }\n\n return this._n(value, locale, key, options)\n};\n\nVueI18n.prototype._ntp = function _ntp (value, locale, key, options) {\n /* istanbul ignore if */\n if (!VueI18n.availabilities.numberFormat) {\n if (true) {\n warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.');\n }\n return []\n }\n\n if (!key) {\n var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);\n return nf.formatToParts(value)\n }\n\n var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);\n var ret = formatter && formatter.formatToParts(value);\n if (this._isFallbackRoot(ret)) {\n if ( true && !this._isSilentTranslationWarn(key)) {\n warn((\"Fall back to format number to parts of root: key '\" + key + \"' .\"));\n }\n /* istanbul ignore if */\n if (!this._root) { throw Error('unexpected error') }\n return this._root.$i18n._ntp(value, locale, key, options)\n } else {\n return ret || []\n }\n};\n\nObject.defineProperties( VueI18n.prototype, prototypeAccessors );\n\nvar availabilities;\n// $FlowFixMe\nObject.defineProperty(VueI18n, 'availabilities', {\n get: function get () {\n if (!availabilities) {\n var intlDefined = typeof Intl !== 'undefined';\n availabilities = {\n dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',\n numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined'\n };\n }\n\n return availabilities\n }\n});\n\nVueI18n.install = install;\nVueI18n.version = '8.15.0';\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (VueI18n);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1pMThuQDguMTUuMEB2dWUtaTE4bi9kaXN0L3Z1ZS1pMThuLmVzbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdnVlLWkxOG5AOC4xNS4wQHZ1ZS1pMThuL2Rpc3QvdnVlLWkxOG4uZXNtLmpzPzRiYTQiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiB2dWUtaTE4biB2OC4xNS4wIFxuICogKGMpIDIwMTkga2F6dXlhIGthd2FndWNoaVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxuLyoqXG4gKiBjb25zdGFudHNcbiAqL1xuXG52YXIgbnVtYmVyRm9ybWF0S2V5cyA9IFtcbiAgJ3N0eWxlJyxcbiAgJ2N1cnJlbmN5JyxcbiAgJ2N1cnJlbmN5RGlzcGxheScsXG4gICd1c2VHcm91cGluZycsXG4gICdtaW5pbXVtSW50ZWdlckRpZ2l0cycsXG4gICdtaW5pbXVtRnJhY3Rpb25EaWdpdHMnLFxuICAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJyxcbiAgJ21pbmltdW1TaWduaWZpY2FudERpZ2l0cycsXG4gICdtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMnLFxuICAnbG9jYWxlTWF0Y2hlcicsXG4gICdmb3JtYXRNYXRjaGVyJ1xuXTtcblxuLyoqXG4gKiB1dGlsaXRpZXNcbiAqL1xuXG5mdW5jdGlvbiB3YXJuIChtc2csIGVycikge1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS53YXJuKCdbdnVlLWkxOG5dICcgKyBtc2cpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihlcnIuc3RhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvciAobXNnLCBlcnIpIHtcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWUtaTE4bl0gJyArIG1zZyk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIuc3RhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBPQkpFQ1RfU1RSSU5HID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gT0JKRUNUX1NUUklOR1xufVxuXG5mdW5jdGlvbiBpc051bGwgKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJncyAoKSB7XG4gIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgdmFyIGxvY2FsZSA9IG51bGw7XG4gIHZhciBwYXJhbXMgPSBudWxsO1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoaXNPYmplY3QoYXJnc1swXSkgfHwgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkge1xuICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1swXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBsb2NhbGUgPSBhcmdzWzBdO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNPYmplY3QoYXJnc1sxXSkgfHwgQXJyYXkuaXNBcnJheShhcmdzWzFdKSkge1xuICAgICAgcGFyYW1zID0gYXJnc1sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBsb2NhbGU6IGxvY2FsZSwgcGFyYW1zOiBwYXJhbXMgfVxufVxuXG5mdW5jdGlvbiBsb29zZUNsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGFyci5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG5mdW5jdGlvbiBtZXJnZSAodGFyZ2V0KSB7XG4gIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50cyQxW2ldO1xuICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIHZhciBrZXkgPSAodm9pZCAwKTtcbiAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzT3duKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gbWVyZ2Uob3V0cHV0W2tleV0sIHNvdXJjZVtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZXh0ZW5kIChWdWUpIHtcbiAgaWYgKCFWdWUucHJvdG90eXBlLmhhc093blByb3BlcnR5KCckaTE4bicpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGkxOG4nLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7IHJldHVybiB0aGlzLl9pMThuIH1cbiAgICB9KTtcbiAgfVxuXG4gIFZ1ZS5wcm90b3R5cGUuJHQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgIHZhciBpMThuID0gdGhpcy4kaTE4bjtcbiAgICByZXR1cm4gaTE4bi5fdC5hcHBseShpMThuLCBbIGtleSwgaTE4bi5sb2NhbGUsIGkxOG4uX2dldE1lc3NhZ2VzKCksIHRoaXMgXS5jb25jYXQoIHZhbHVlcyApKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHRjID0gZnVuY3Rpb24gKGtleSwgY2hvaWNlKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDIgXTtcblxuICAgIHZhciBpMThuID0gdGhpcy4kaTE4bjtcbiAgICByZXR1cm4gaTE4bi5fdGMuYXBwbHkoaTE4biwgWyBrZXksIGkxOG4ubG9jYWxlLCBpMThuLl9nZXRNZXNzYWdlcygpLCB0aGlzLCBjaG9pY2UgXS5jb25jYXQoIHZhbHVlcyApKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHRlID0gZnVuY3Rpb24gKGtleSwgbG9jYWxlKSB7XG4gICAgdmFyIGkxOG4gPSB0aGlzLiRpMThuO1xuICAgIHJldHVybiBpMThuLl90ZShrZXksIGkxOG4ubG9jYWxlLCBpMThuLl9nZXRNZXNzYWdlcygpLCBsb2NhbGUpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciByZWY7XG5cbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG4gICAgcmV0dXJuIChyZWYgPSB0aGlzLiRpMThuKS5kLmFwcGx5KHJlZiwgWyB2YWx1ZSBdLmNvbmNhdCggYXJncyApKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuICAgIHJldHVybiAocmVmID0gdGhpcy4kaTE4bikubi5hcHBseShyZWYsIFsgdmFsdWUgXS5jb25jYXQoIGFyZ3MgKSlcbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBtaXhpbiA9IHtcbiAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUgKCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICBvcHRpb25zLmkxOG4gPSBvcHRpb25zLmkxOG4gfHwgKG9wdGlvbnMuX19pMThuID8ge30gOiBudWxsKTtcblxuICAgIGlmIChvcHRpb25zLmkxOG4pIHtcbiAgICAgIGlmIChvcHRpb25zLmkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAgIC8vIGluaXQgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzXG4gICAgICAgIGlmIChvcHRpb25zLl9faTE4bikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlTWVzc2FnZXMgPSB7fTtcbiAgICAgICAgICAgIG9wdGlvbnMuX19pMThuLmZvckVhY2goZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgICAgICAgICAgIGxvY2FsZU1lc3NhZ2VzID0gbWVyZ2UobG9jYWxlTWVzc2FnZXMsIEpTT04ucGFyc2UocmVzb3VyY2UpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMobG9jYWxlTWVzc2FnZXMpLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICAgICAgICBvcHRpb25zLmkxOG4ubWVyZ2VMb2NhbGVNZXNzYWdlKGxvY2FsZSwgbG9jYWxlTWVzc2FnZXNbbG9jYWxlXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFwiQ2Fubm90IHBhcnNlIGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrcy5cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2kxOG4gPSBvcHRpb25zLmkxOG47XG4gICAgICAgIHRoaXMuX2kxOG5XYXRjaGVyID0gdGhpcy5faTE4bi53YXRjaEkxOG5EYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9ucy5pMThuKSkge1xuICAgICAgICAvLyBjb21wb25lbnQgbG9jYWwgaTE4blxuICAgICAgICBpZiAodGhpcy4kcm9vdCAmJiB0aGlzLiRyb290LiRpMThuICYmIHRoaXMuJHJvb3QuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnJvb3QgPSB0aGlzLiRyb290O1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5mb3JtYXR0ZXIgPSB0aGlzLiRyb290LiRpMThuLmZvcm1hdHRlcjtcbiAgICAgICAgICBvcHRpb25zLmkxOG4uZmFsbGJhY2tMb2NhbGUgPSB0aGlzLiRyb290LiRpMThuLmZhbGxiYWNrTG9jYWxlO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5mb3JtYXRGYWxsYmFja01lc3NhZ2VzID0gdGhpcy4kcm9vdC4kaTE4bi5mb3JtYXRGYWxsYmFja01lc3NhZ2VzO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5zaWxlbnRUcmFuc2xhdGlvbldhcm4gPSB0aGlzLiRyb290LiRpMThuLnNpbGVudFRyYW5zbGF0aW9uV2FybjtcbiAgICAgICAgICBvcHRpb25zLmkxOG4uc2lsZW50RmFsbGJhY2tXYXJuID0gdGhpcy4kcm9vdC4kaTE4bi5zaWxlbnRGYWxsYmFja1dhcm47XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnBsdXJhbGl6YXRpb25SdWxlcyA9IHRoaXMuJHJvb3QuJGkxOG4ucGx1cmFsaXphdGlvblJ1bGVzO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgPSB0aGlzLiRyb290LiRpMThuLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluaXQgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzXG4gICAgICAgIGlmIChvcHRpb25zLl9faTE4bikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlTWVzc2FnZXMkMSA9IHt9O1xuICAgICAgICAgICAgb3B0aW9ucy5fX2kxOG4uZm9yRWFjaChmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgbG9jYWxlTWVzc2FnZXMkMSA9IG1lcmdlKGxvY2FsZU1lc3NhZ2VzJDEsIEpTT04ucGFyc2UocmVzb3VyY2UpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3B0aW9ucy5pMThuLm1lc3NhZ2VzID0gbG9jYWxlTWVzc2FnZXMkMTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFwiQ2Fubm90IHBhcnNlIGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrcy5cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZiA9IG9wdGlvbnMuaTE4bjtcbiAgICAgICAgdmFyIHNoYXJlZE1lc3NhZ2VzID0gcmVmLnNoYXJlZE1lc3NhZ2VzO1xuICAgICAgICBpZiAoc2hhcmVkTWVzc2FnZXMgJiYgaXNQbGFpbk9iamVjdChzaGFyZWRNZXNzYWdlcykpIHtcbiAgICAgICAgICBvcHRpb25zLmkxOG4ubWVzc2FnZXMgPSBtZXJnZShvcHRpb25zLmkxOG4ubWVzc2FnZXMsIHNoYXJlZE1lc3NhZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2kxOG4gPSBuZXcgVnVlSTE4bihvcHRpb25zLmkxOG4pO1xuICAgICAgICB0aGlzLl9pMThuV2F0Y2hlciA9IHRoaXMuX2kxOG4ud2F0Y2hJMThuRGF0YSgpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmkxOG4uc3luYyA9PT0gdW5kZWZpbmVkIHx8ICEhb3B0aW9ucy5pMThuLnN5bmMpIHtcbiAgICAgICAgICB0aGlzLl9sb2NhbGVXYXRjaGVyID0gdGhpcy4kaTE4bi53YXRjaExvY2FsZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXCJDYW5ub3QgYmUgaW50ZXJwcmV0ZWQgJ2kxOG4nIG9wdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuJHJvb3QgJiYgdGhpcy4kcm9vdC4kaTE4biAmJiB0aGlzLiRyb290LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgLy8gcm9vdCBpMThuXG4gICAgICB0aGlzLl9pMThuID0gdGhpcy4kcm9vdC4kaTE4bjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRpMThuICYmIG9wdGlvbnMucGFyZW50LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgLy8gcGFyZW50IGkxOG5cbiAgICAgIHRoaXMuX2kxOG4gPSBvcHRpb25zLnBhcmVudC4kaTE4bjtcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gICAgb3B0aW9ucy5pMThuID0gb3B0aW9ucy5pMThuIHx8IChvcHRpb25zLl9faTE4biA/IHt9IDogbnVsbCk7XG5cbiAgICBpZiAob3B0aW9ucy5pMThuKSB7XG4gICAgICBpZiAob3B0aW9ucy5pMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgICAvLyBpbml0IGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrc1xuICAgICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnMuaTE4bikpIHtcbiAgICAgICAgdGhpcy5faTE4bi5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcodGhpcyk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybihcIkNhbm5vdCBiZSBpbnRlcnByZXRlZCAnaTE4bicgb3B0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy4kcm9vdCAmJiB0aGlzLiRyb290LiRpMThuICYmIHRoaXMuJHJvb3QuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRpMThuICYmIG9wdGlvbnMucGFyZW50LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgdGhpcy5faTE4bi5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcodGhpcyk7XG4gICAgICB0aGlzLl9zdWJzY3JpYmluZyA9IHRydWU7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3kgKCkge1xuICAgIGlmICghdGhpcy5faTE4bikgeyByZXR1cm4gfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLl9zdWJzY3JpYmluZykge1xuICAgICAgICBzZWxmLl9pMThuLnVuc3Vic2NyaWJlRGF0YUNoYW5naW5nKHNlbGYpO1xuICAgICAgICBkZWxldGUgc2VsZi5fc3Vic2NyaWJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLl9pMThuV2F0Y2hlcikge1xuICAgICAgICBzZWxmLl9pMThuV2F0Y2hlcigpO1xuICAgICAgICBzZWxmLl9pMThuLmRlc3Ryb3lWTSgpO1xuICAgICAgICBkZWxldGUgc2VsZi5faTE4bldhdGNoZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLl9sb2NhbGVXYXRjaGVyKSB7XG4gICAgICAgIHNlbGYuX2xvY2FsZVdhdGNoZXIoKTtcbiAgICAgICAgZGVsZXRlIHNlbGYuX2xvY2FsZVdhdGNoZXI7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX2kxOG4gPSBudWxsO1xuICAgIH0pO1xuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIGludGVycG9sYXRpb25Db21wb25lbnQgPSB7XG4gIG5hbWU6ICdpMThuJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgcGF0aDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBwbGFjZXM6IHtcbiAgICAgIHR5cGU6IFtBcnJheSwgT2JqZWN0XVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgsIHJlZikge1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG4gICAgdmFyIHBhcmVudCA9IHJlZi5wYXJlbnQ7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBzbG90cyA9IHJlZi5zbG90cztcblxuICAgIHZhciAkaTE4biA9IHBhcmVudC4kaTE4bjtcbiAgICBpZiAoISRpMThuKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKCdDYW5ub3QgZmluZCBWdWVJMThuIGluc3RhbmNlIScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIHBhdGggPSBwcm9wcy5wYXRoO1xuICAgIHZhciBsb2NhbGUgPSBwcm9wcy5sb2NhbGU7XG4gICAgdmFyIHBsYWNlcyA9IHByb3BzLnBsYWNlcztcbiAgICB2YXIgcGFyYW1zID0gc2xvdHMoKTtcbiAgICB2YXIgY2hpbGRyZW4gPSAkaTE4bi5pKFxuICAgICAgcGF0aCxcbiAgICAgIGxvY2FsZSxcbiAgICAgIG9ubHlIYXNEZWZhdWx0UGxhY2UocGFyYW1zKSB8fCBwbGFjZXNcbiAgICAgICAgPyB1c2VMZWdhY3lQbGFjZXMocGFyYW1zLmRlZmF1bHQsIHBsYWNlcylcbiAgICAgICAgOiBwYXJhbXNcbiAgICApO1xuXG4gICAgdmFyIHRhZyA9IHByb3BzLnRhZyB8fCAnc3Bhbic7XG4gICAgcmV0dXJuIHRhZyA/IGgodGFnLCBkYXRhLCBjaGlsZHJlbikgOiBjaGlsZHJlblxuICB9XG59O1xuXG5mdW5jdGlvbiBvbmx5SGFzRGVmYXVsdFBsYWNlIChwYXJhbXMpIHtcbiAgdmFyIHByb3A7XG4gIGZvciAocHJvcCBpbiBwYXJhbXMpIHtcbiAgICBpZiAocHJvcCAhPT0gJ2RlZmF1bHQnKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4ocHJvcClcbn1cblxuZnVuY3Rpb24gdXNlTGVnYWN5UGxhY2VzIChjaGlsZHJlbiwgcGxhY2VzKSB7XG4gIHZhciBwYXJhbXMgPSBwbGFjZXMgPyBjcmVhdGVQYXJhbXNGcm9tUGxhY2VzKHBsYWNlcykgOiB7fTtcblxuICBpZiAoIWNoaWxkcmVuKSB7IHJldHVybiBwYXJhbXMgfVxuXG4gIC8vIEZpbHRlciBlbXB0eSB0ZXh0IG5vZGVzXG4gIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZC50YWcgfHwgY2hpbGQudGV4dC50cmltKCkgIT09ICcnXG4gIH0pO1xuXG4gIHZhciBldmVyeVBsYWNlID0gY2hpbGRyZW4uZXZlcnkodm5vZGVIYXNQbGFjZUF0dHJpYnV0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGV2ZXJ5UGxhY2UpIHtcbiAgICB3YXJuKCdgcGxhY2VgIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkIGluIG5leHQgbWFqb3IgdmVyc2lvbi4gUGxlYXNlIHN3aXRjaCB0byBWdWUgc2xvdHMuJyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW4ucmVkdWNlKFxuICAgIGV2ZXJ5UGxhY2UgPyBhc3NpZ25DaGlsZFBsYWNlIDogYXNzaWduQ2hpbGRJbmRleCxcbiAgICBwYXJhbXNcbiAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXJhbXNGcm9tUGxhY2VzIChwbGFjZXMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKCdgcGxhY2VzYCBwcm9wIGlzIGRlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLiBQbGVhc2Ugc3dpdGNoIHRvIFZ1ZSBzbG90cy4nKTtcbiAgfVxuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBsYWNlcylcbiAgICA/IHBsYWNlcy5yZWR1Y2UoYXNzaWduQ2hpbGRJbmRleCwge30pXG4gICAgOiBPYmplY3QuYXNzaWduKHt9LCBwbGFjZXMpXG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNoaWxkUGxhY2UgKHBhcmFtcywgY2hpbGQpIHtcbiAgaWYgKGNoaWxkLmRhdGEgJiYgY2hpbGQuZGF0YS5hdHRycyAmJiBjaGlsZC5kYXRhLmF0dHJzLnBsYWNlKSB7XG4gICAgcGFyYW1zW2NoaWxkLmRhdGEuYXR0cnMucGxhY2VdID0gY2hpbGQ7XG4gIH1cbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DaGlsZEluZGV4IChwYXJhbXMsIGNoaWxkLCBpbmRleCkge1xuICBwYXJhbXNbaW5kZXhdID0gY2hpbGQ7XG4gIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gdm5vZGVIYXNQbGFjZUF0dHJpYnV0ZSAodm5vZGUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMucGxhY2UpXG59XG5cbi8qICAqL1xuXG52YXIgbnVtYmVyQ29tcG9uZW50ID0ge1xuICBuYW1lOiAnaTE4bi1uJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdzcGFuJ1xuICAgIH0sXG4gICAgdmFsdWU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCwgcmVmKSB7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBwYXJlbnQgPSByZWYucGFyZW50O1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG5cbiAgICB2YXIgaTE4biA9IHBhcmVudC4kaTE4bjtcblxuICAgIGlmICghaTE4bikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybignQ2Fubm90IGZpbmQgVnVlSTE4biBpbnN0YW5jZSEnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdmFyIGtleSA9IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5mb3JtYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBwcm9wcy5mb3JtYXQ7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChwcm9wcy5mb3JtYXQpKSB7XG4gICAgICBpZiAocHJvcHMuZm9ybWF0LmtleSkge1xuICAgICAgICBrZXkgPSBwcm9wcy5mb3JtYXQua2V5O1xuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgb3V0IG51bWJlciBmb3JtYXQgb3B0aW9ucyBvbmx5XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmtleXMocHJvcHMuZm9ybWF0KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcHJvcCkge1xuICAgICAgICB2YXIgb2JqO1xuXG4gICAgICAgIGlmIChudW1iZXJGb3JtYXRLZXlzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGFjYywgKCBvYmogPSB7fSwgb2JqW3Byb3BdID0gcHJvcHMuZm9ybWF0W3Byb3BdLCBvYmogKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBudWxsKTtcbiAgICB9XG5cbiAgICB2YXIgbG9jYWxlID0gcHJvcHMubG9jYWxlIHx8IGkxOG4ubG9jYWxlO1xuICAgIHZhciBwYXJ0cyA9IGkxOG4uX250cChwcm9wcy52YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpO1xuXG4gICAgdmFyIHZhbHVlcyA9IHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCwgaW5kZXgpIHtcbiAgICAgIHZhciBvYmo7XG5cbiAgICAgIHZhciBzbG90ID0gZGF0YS5zY29wZWRTbG90cyAmJiBkYXRhLnNjb3BlZFNsb3RzW3BhcnQudHlwZV07XG4gICAgICByZXR1cm4gc2xvdCA/IHNsb3QoKCBvYmogPSB7fSwgb2JqW3BhcnQudHlwZV0gPSBwYXJ0LnZhbHVlLCBvYmouaW5kZXggPSBpbmRleCwgb2JqLnBhcnRzID0gcGFydHMsIG9iaiApKSA6IHBhcnQudmFsdWVcbiAgICB9KTtcblxuICAgIHJldHVybiBoKHByb3BzLnRhZywge1xuICAgICAgYXR0cnM6IGRhdGEuYXR0cnMsXG4gICAgICAnY2xhc3MnOiBkYXRhWydjbGFzcyddLFxuICAgICAgc3RhdGljQ2xhc3M6IGRhdGEuc3RhdGljQ2xhc3NcbiAgICB9LCB2YWx1ZXMpXG4gIH1cbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgaWYgKCFhc3NlcnQoZWwsIHZub2RlKSkgeyByZXR1cm4gfVxuXG4gIHQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZOb2RlKSB7XG4gIGlmICghYXNzZXJ0KGVsLCB2bm9kZSkpIHsgcmV0dXJuIH1cblxuICB2YXIgaTE4biA9IHZub2RlLmNvbnRleHQuJGkxOG47XG4gIGlmIChsb2NhbGVFcXVhbChlbCwgdm5vZGUpICYmXG4gICAgKGxvb3NlRXF1YWwoYmluZGluZy52YWx1ZSwgYmluZGluZy5vbGRWYWx1ZSkgJiZcbiAgICAgbG9vc2VFcXVhbChlbC5fbG9jYWxlTWVzc2FnZSwgaTE4bi5nZXRMb2NhbGVNZXNzYWdlKGkxOG4ubG9jYWxlKSkpKSB7IHJldHVybiB9XG5cbiAgdChlbCwgYmluZGluZywgdm5vZGUpO1xufVxuXG5mdW5jdGlvbiB1bmJpbmQgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVk5vZGUpIHtcbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgaWYgKCF2bSkge1xuICAgIHdhcm4oJ1Z1ZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdHMgaW4gVk5vZGUgY29udGV4dCcpO1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGkxOG4gPSB2bm9kZS5jb250ZXh0LiRpMThuIHx8IHt9O1xuICBpZiAoIWJpbmRpbmcubW9kaWZpZXJzLnByZXNlcnZlICYmICFpMThuLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudCkge1xuICAgIGVsLnRleHRDb250ZW50ID0gJyc7XG4gIH1cbiAgZWwuX3Z0ID0gdW5kZWZpbmVkO1xuICBkZWxldGUgZWxbJ192dCddO1xuICBlbC5fbG9jYWxlID0gdW5kZWZpbmVkO1xuICBkZWxldGUgZWxbJ19sb2NhbGUnXTtcbiAgZWwuX2xvY2FsZU1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gIGRlbGV0ZSBlbFsnX2xvY2FsZU1lc3NhZ2UnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0IChlbCwgdm5vZGUpIHtcbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgaWYgKCF2bSkge1xuICAgIHdhcm4oJ1Z1ZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdHMgaW4gVk5vZGUgY29udGV4dCcpO1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKCF2bS4kaTE4bikge1xuICAgIHdhcm4oJ1Z1ZUkxOG4gaW5zdGFuY2UgZG9lcyBub3QgZXhpc3RzIGluIFZ1ZSBpbnN0YW5jZScpO1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gbG9jYWxlRXF1YWwgKGVsLCB2bm9kZSkge1xuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICByZXR1cm4gZWwuX2xvY2FsZSA9PT0gdm0uJGkxOG4ubG9jYWxlXG59XG5cbmZ1bmN0aW9uIHQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICB2YXIgcmVmJDEsIHJlZiQyO1xuXG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG5cbiAgdmFyIHJlZiA9IHBhcnNlVmFsdWUodmFsdWUpO1xuICB2YXIgcGF0aCA9IHJlZi5wYXRoO1xuICB2YXIgbG9jYWxlID0gcmVmLmxvY2FsZTtcbiAgdmFyIGFyZ3MgPSByZWYuYXJncztcbiAgdmFyIGNob2ljZSA9IHJlZi5jaG9pY2U7XG4gIGlmICghcGF0aCAmJiAhbG9jYWxlICYmICFhcmdzKSB7XG4gICAgd2FybigndmFsdWUgdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIXBhdGgpIHtcbiAgICB3YXJuKCdgcGF0aGAgaXMgcmVxdWlyZWQgaW4gdi10IGRpcmVjdGl2ZScpO1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgaWYgKGNob2ljZSkge1xuICAgIGVsLl92dCA9IGVsLnRleHRDb250ZW50ID0gKHJlZiQxID0gdm0uJGkxOG4pLnRjLmFwcGx5KHJlZiQxLCBbIHBhdGgsIGNob2ljZSBdLmNvbmNhdCggbWFrZVBhcmFtcyhsb2NhbGUsIGFyZ3MpICkpO1xuICB9IGVsc2Uge1xuICAgIGVsLl92dCA9IGVsLnRleHRDb250ZW50ID0gKHJlZiQyID0gdm0uJGkxOG4pLnQuYXBwbHkocmVmJDIsIFsgcGF0aCBdLmNvbmNhdCggbWFrZVBhcmFtcyhsb2NhbGUsIGFyZ3MpICkpO1xuICB9XG4gIGVsLl9sb2NhbGUgPSB2bS4kaTE4bi5sb2NhbGU7XG4gIGVsLl9sb2NhbGVNZXNzYWdlID0gdm0uJGkxOG4uZ2V0TG9jYWxlTWVzc2FnZSh2bS4kaTE4bi5sb2NhbGUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlICh2YWx1ZSkge1xuICB2YXIgcGF0aDtcbiAgdmFyIGxvY2FsZTtcbiAgdmFyIGFyZ3M7XG4gIHZhciBjaG9pY2U7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXRoID0gdmFsdWU7XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICBwYXRoID0gdmFsdWUucGF0aDtcbiAgICBsb2NhbGUgPSB2YWx1ZS5sb2NhbGU7XG4gICAgYXJncyA9IHZhbHVlLmFyZ3M7XG4gICAgY2hvaWNlID0gdmFsdWUuY2hvaWNlO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0aDogcGF0aCwgbG9jYWxlOiBsb2NhbGUsIGFyZ3M6IGFyZ3MsIGNob2ljZTogY2hvaWNlIH1cbn1cblxuZnVuY3Rpb24gbWFrZVBhcmFtcyAobG9jYWxlLCBhcmdzKSB7XG4gIHZhciBwYXJhbXMgPSBbXTtcblxuICBsb2NhbGUgJiYgcGFyYW1zLnB1c2gobG9jYWxlKTtcbiAgaWYgKGFyZ3MgJiYgKEFycmF5LmlzQXJyYXkoYXJncykgfHwgaXNQbGFpbk9iamVjdChhcmdzKSkpIHtcbiAgICBwYXJhbXMucHVzaChhcmdzKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXNcbn1cblxudmFyIFZ1ZTtcblxuZnVuY3Rpb24gaW5zdGFsbCAoX1Z1ZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW5zdGFsbC5pbnN0YWxsZWQgJiYgX1Z1ZSA9PT0gVnVlKSB7XG4gICAgd2FybignYWxyZWFkeSBpbnN0YWxsZWQuJyk7XG4gICAgcmV0dXJuXG4gIH1cbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlO1xuXG4gIFZ1ZSA9IF9WdWU7XG5cbiAgdmFyIHZlcnNpb24gPSAoVnVlLnZlcnNpb24gJiYgTnVtYmVyKFZ1ZS52ZXJzaW9uLnNwbGl0KCcuJylbMF0pKSB8fCAtMTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZlcnNpb24gPCAyKSB7XG4gICAgd2FybigoXCJ2dWUtaTE4biAoXCIgKyAoaW5zdGFsbC52ZXJzaW9uKSArIFwiKSBuZWVkIHRvIHVzZSBWdWUgMi4wIG9yIGxhdGVyIChWdWU6IFwiICsgKFZ1ZS52ZXJzaW9uKSArIFwiKS5cIikpO1xuICAgIHJldHVyblxuICB9XG5cbiAgZXh0ZW5kKFZ1ZSk7XG4gIFZ1ZS5taXhpbihtaXhpbik7XG4gIFZ1ZS5kaXJlY3RpdmUoJ3QnLCB7IGJpbmQ6IGJpbmQsIHVwZGF0ZTogdXBkYXRlLCB1bmJpbmQ6IHVuYmluZCB9KTtcbiAgVnVlLmNvbXBvbmVudChpbnRlcnBvbGF0aW9uQ29tcG9uZW50Lm5hbWUsIGludGVycG9sYXRpb25Db21wb25lbnQpO1xuICBWdWUuY29tcG9uZW50KG51bWJlckNvbXBvbmVudC5uYW1lLCBudW1iZXJDb21wb25lbnQpO1xuXG4gIC8vIHVzZSBzaW1wbGUgbWVyZ2VTdHJhdGVnaWVzIHRvIHByZXZlbnQgaTE4biBpbnN0YW5jZSBsb3NlICdfX3Byb3RvX18nXG4gIHZhciBzdHJhdHMgPSBWdWUuY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcbiAgc3RyYXRzLmkxOG4gPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHBhcmVudFZhbFxuICAgICAgOiBjaGlsZFZhbFxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIEJhc2VGb3JtYXR0ZXIgPSBmdW5jdGlvbiBCYXNlRm9ybWF0dGVyICgpIHtcbiAgdGhpcy5fY2FjaGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn07XG5cbkJhc2VGb3JtYXR0ZXIucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gaW50ZXJwb2xhdGUgKG1lc3NhZ2UsIHZhbHVlcykge1xuICBpZiAoIXZhbHVlcykge1xuICAgIHJldHVybiBbbWVzc2FnZV1cbiAgfVxuICB2YXIgdG9rZW5zID0gdGhpcy5fY2FjaGVzW21lc3NhZ2VdO1xuICBpZiAoIXRva2Vucykge1xuICAgIHRva2VucyA9IHBhcnNlKG1lc3NhZ2UpO1xuICAgIHRoaXMuX2NhY2hlc1ttZXNzYWdlXSA9IHRva2VucztcbiAgfVxuICByZXR1cm4gY29tcGlsZSh0b2tlbnMsIHZhbHVlcylcbn07XG5cblxuXG52YXIgUkVfVE9LRU5fTElTVF9WQUxVRSA9IC9eKD86XFxkKSsvO1xudmFyIFJFX1RPS0VOX05BTUVEX1ZBTFVFID0gL14oPzpcXHcpKy87XG5cbmZ1bmN0aW9uIHBhcnNlIChmb3JtYXQpIHtcbiAgdmFyIHRva2VucyA9IFtdO1xuICB2YXIgcG9zaXRpb24gPSAwO1xuXG4gIHZhciB0ZXh0ID0gJyc7XG4gIHdoaWxlIChwb3NpdGlvbiA8IGZvcm1hdC5sZW5ndGgpIHtcbiAgICB2YXIgY2hhciA9IGZvcm1hdFtwb3NpdGlvbisrXTtcbiAgICBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHRleHQgfSk7XG4gICAgICB9XG5cbiAgICAgIHRleHQgPSAnJztcbiAgICAgIHZhciBzdWIgPSAnJztcbiAgICAgIGNoYXIgPSBmb3JtYXRbcG9zaXRpb24rK107XG4gICAgICB3aGlsZSAoY2hhciAhPT0gdW5kZWZpbmVkICYmIGNoYXIgIT09ICd9Jykge1xuICAgICAgICBzdWIgKz0gY2hhcjtcbiAgICAgICAgY2hhciA9IGZvcm1hdFtwb3NpdGlvbisrXTtcbiAgICAgIH1cbiAgICAgIHZhciBpc0Nsb3NlZCA9IGNoYXIgPT09ICd9JztcblxuICAgICAgdmFyIHR5cGUgPSBSRV9UT0tFTl9MSVNUX1ZBTFVFLnRlc3Qoc3ViKVxuICAgICAgICA/ICdsaXN0J1xuICAgICAgICA6IGlzQ2xvc2VkICYmIFJFX1RPS0VOX05BTUVEX1ZBTFVFLnRlc3Qoc3ViKVxuICAgICAgICAgID8gJ25hbWVkJ1xuICAgICAgICAgIDogJ3Vua25vd24nO1xuICAgICAgdG9rZW5zLnB1c2goeyB2YWx1ZTogc3ViLCB0eXBlOiB0eXBlIH0pO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJyUnKSB7XG4gICAgICAvLyB3aGVuIGZvdW5kIHJhaWxzIGkxOG4gc3ludGF4LCBza2lwIHRleHQgY2FwdHVyZVxuICAgICAgaWYgKGZvcm1hdFsocG9zaXRpb24pXSAhPT0gJ3snKSB7XG4gICAgICAgIHRleHQgKz0gY2hhcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCArPSBjaGFyO1xuICAgIH1cbiAgfVxuXG4gIHRleHQgJiYgdG9rZW5zLnB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0ZXh0IH0pO1xuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuZnVuY3Rpb24gY29tcGlsZSAodG9rZW5zLCB2YWx1ZXMpIHtcbiAgdmFyIGNvbXBpbGVkID0gW107XG4gIHZhciBpbmRleCA9IDA7XG5cbiAgdmFyIG1vZGUgPSBBcnJheS5pc0FycmF5KHZhbHVlcylcbiAgICA/ICdsaXN0J1xuICAgIDogaXNPYmplY3QodmFsdWVzKVxuICAgICAgPyAnbmFtZWQnXG4gICAgICA6ICd1bmtub3duJztcbiAgaWYgKG1vZGUgPT09ICd1bmtub3duJykgeyByZXR1cm4gY29tcGlsZWQgfVxuXG4gIHdoaWxlIChpbmRleCA8IHRva2Vucy5sZW5ndGgpIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaW5kZXhdO1xuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGNvbXBpbGVkLnB1c2godG9rZW4udmFsdWUpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgIGNvbXBpbGVkLnB1c2godmFsdWVzW3BhcnNlSW50KHRva2VuLnZhbHVlLCAxMCldKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25hbWVkJzpcbiAgICAgICAgaWYgKG1vZGUgPT09ICduYW1lZCcpIHtcbiAgICAgICAgICBjb21waWxlZC5wdXNoKCh2YWx1ZXMpW3Rva2VuLnZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4oKFwiVHlwZSBvZiB0b2tlbiAnXCIgKyAodG9rZW4udHlwZSkgKyBcIicgYW5kIGZvcm1hdCBvZiB2YWx1ZSAnXCIgKyBtb2RlICsgXCInIGRvbid0IG1hdGNoIVwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd1bmtub3duJzpcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKFwiRGV0ZWN0ICd1bmtub3duJyB0eXBlIG9mIHRva2VuIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgICBpbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBpbGVkXG59XG5cbi8qICAqL1xuXG4vKipcbiAqICBQYXRoIHBhcnNlclxuICogIC0gSW5zcGlyZWQ6XG4gKiAgICBWdWUuanMgUGF0aCBwYXJzZXJcbiAqL1xuXG4vLyBhY3Rpb25zXG52YXIgQVBQRU5EID0gMDtcbnZhciBQVVNIID0gMTtcbnZhciBJTkNfU1VCX1BBVEhfREVQVEggPSAyO1xudmFyIFBVU0hfU1VCX1BBVEggPSAzO1xuXG4vLyBzdGF0ZXNcbnZhciBCRUZPUkVfUEFUSCA9IDA7XG52YXIgSU5fUEFUSCA9IDE7XG52YXIgQkVGT1JFX0lERU5UID0gMjtcbnZhciBJTl9JREVOVCA9IDM7XG52YXIgSU5fU1VCX1BBVEggPSA0O1xudmFyIElOX1NJTkdMRV9RVU9URSA9IDU7XG52YXIgSU5fRE9VQkxFX1FVT1RFID0gNjtcbnZhciBBRlRFUl9QQVRIID0gNztcbnZhciBFUlJPUiA9IDg7XG5cbnZhciBwYXRoU3RhdGVNYWNoaW5lID0gW107XG5cbnBhdGhTdGF0ZU1hY2hpbmVbQkVGT1JFX1BBVEhdID0ge1xuICAnd3MnOiBbQkVGT1JFX1BBVEhdLFxuICAnaWRlbnQnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICdbJzogW0lOX1NVQl9QQVRIXSxcbiAgJ2VvZic6IFtBRlRFUl9QQVRIXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtJTl9QQVRIXSA9IHtcbiAgJ3dzJzogW0lOX1BBVEhdLFxuICAnLic6IFtCRUZPUkVfSURFTlRdLFxuICAnWyc6IFtJTl9TVUJfUEFUSF0sXG4gICdlb2YnOiBbQUZURVJfUEFUSF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbQkVGT1JFX0lERU5UXSA9IHtcbiAgJ3dzJzogW0JFRk9SRV9JREVOVF0sXG4gICdpZGVudCc6IFtJTl9JREVOVCwgQVBQRU5EXSxcbiAgJzAnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICdudW1iZXInOiBbSU5fSURFTlQsIEFQUEVORF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fSURFTlRdID0ge1xuICAnaWRlbnQnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICcwJzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnbnVtYmVyJzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnd3MnOiBbSU5fUEFUSCwgUFVTSF0sXG4gICcuJzogW0JFRk9SRV9JREVOVCwgUFVTSF0sXG4gICdbJzogW0lOX1NVQl9QQVRILCBQVVNIXSxcbiAgJ2VvZic6IFtBRlRFUl9QQVRILCBQVVNIXVxufTtcblxucGF0aFN0YXRlTWFjaGluZVtJTl9TVUJfUEFUSF0gPSB7XG4gIFwiJ1wiOiBbSU5fU0lOR0xFX1FVT1RFLCBBUFBFTkRdLFxuICAnXCInOiBbSU5fRE9VQkxFX1FVT1RFLCBBUFBFTkRdLFxuICAnWyc6IFtJTl9TVUJfUEFUSCwgSU5DX1NVQl9QQVRIX0RFUFRIXSxcbiAgJ10nOiBbSU5fUEFUSCwgUFVTSF9TVUJfUEFUSF0sXG4gICdlb2YnOiBFUlJPUixcbiAgJ2Vsc2UnOiBbSU5fU1VCX1BBVEgsIEFQUEVORF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fU0lOR0xFX1FVT1RFXSA9IHtcbiAgXCInXCI6IFtJTl9TVUJfUEFUSCwgQVBQRU5EXSxcbiAgJ2VvZic6IEVSUk9SLFxuICAnZWxzZSc6IFtJTl9TSU5HTEVfUVVPVEUsIEFQUEVORF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fRE9VQkxFX1FVT1RFXSA9IHtcbiAgJ1wiJzogW0lOX1NVQl9QQVRILCBBUFBFTkRdLFxuICAnZW9mJzogRVJST1IsXG4gICdlbHNlJzogW0lOX0RPVUJMRV9RVU9URSwgQVBQRU5EXVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBleHByZXNzaW9uIGlzIGEgbGl0ZXJhbCB2YWx1ZS5cbiAqL1xuXG52YXIgbGl0ZXJhbFZhbHVlUkUgPSAvXlxccz8oPzp0cnVlfGZhbHNlfC0/W1xcZC5dK3wnW14nXSonfFwiW15cIl0qXCIpXFxzPyQvO1xuZnVuY3Rpb24gaXNMaXRlcmFsIChleHApIHtcbiAgcmV0dXJuIGxpdGVyYWxWYWx1ZVJFLnRlc3QoZXhwKVxufVxuXG4vKipcbiAqIFN0cmlwIHF1b3RlcyBmcm9tIGEgc3RyaW5nXG4gKi9cblxuZnVuY3Rpb24gc3RyaXBRdW90ZXMgKHN0cikge1xuICB2YXIgYSA9IHN0ci5jaGFyQ29kZUF0KDApO1xuICB2YXIgYiA9IHN0ci5jaGFyQ29kZUF0KHN0ci5sZW5ndGggLSAxKTtcbiAgcmV0dXJuIGEgPT09IGIgJiYgKGEgPT09IDB4MjIgfHwgYSA9PT0gMHgyNylcbiAgICA/IHN0ci5zbGljZSgxLCAtMSlcbiAgICA6IHN0clxufVxuXG4vKipcbiAqIERldGVybWluZSB0aGUgdHlwZSBvZiBhIGNoYXJhY3RlciBpbiBhIGtleXBhdGguXG4gKi9cblxuZnVuY3Rpb24gZ2V0UGF0aENoYXJUeXBlIChjaCkge1xuICBpZiAoY2ggPT09IHVuZGVmaW5lZCB8fCBjaCA9PT0gbnVsbCkgeyByZXR1cm4gJ2VvZicgfVxuXG4gIHZhciBjb2RlID0gY2guY2hhckNvZGVBdCgwKTtcblxuICBzd2l0Y2ggKGNvZGUpIHtcbiAgICBjYXNlIDB4NUI6IC8vIFtcbiAgICBjYXNlIDB4NUQ6IC8vIF1cbiAgICBjYXNlIDB4MkU6IC8vIC5cbiAgICBjYXNlIDB4MjI6IC8vIFwiXG4gICAgY2FzZSAweDI3OiAvLyAnXG4gICAgICByZXR1cm4gY2hcblxuICAgIGNhc2UgMHg1RjogLy8gX1xuICAgIGNhc2UgMHgyNDogLy8gJFxuICAgIGNhc2UgMHgyRDogLy8gLVxuICAgICAgcmV0dXJuICdpZGVudCdcblxuICAgIGNhc2UgMHgwOTogLy8gVGFiXG4gICAgY2FzZSAweDBBOiAvLyBOZXdsaW5lXG4gICAgY2FzZSAweDBEOiAvLyBSZXR1cm5cbiAgICBjYXNlIDB4QTA6ICAvLyBOby1icmVhayBzcGFjZVxuICAgIGNhc2UgMHhGRUZGOiAgLy8gQnl0ZSBPcmRlciBNYXJrXG4gICAgY2FzZSAweDIwMjg6ICAvLyBMaW5lIFNlcGFyYXRvclxuICAgIGNhc2UgMHgyMDI5OiAgLy8gUGFyYWdyYXBoIFNlcGFyYXRvclxuICAgICAgcmV0dXJuICd3cydcbiAgfVxuXG4gIHJldHVybiAnaWRlbnQnXG59XG5cbi8qKlxuICogRm9ybWF0IGEgc3ViUGF0aCwgcmV0dXJuIGl0cyBwbGFpbiBmb3JtIGlmIGl0IGlzXG4gKiBhIGxpdGVyYWwgc3RyaW5nIG9yIG51bWJlci4gT3RoZXJ3aXNlIHByZXBlbmQgdGhlXG4gKiBkeW5hbWljIGluZGljYXRvciAoKikuXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0U3ViUGF0aCAocGF0aCkge1xuICB2YXIgdHJpbW1lZCA9IHBhdGgudHJpbSgpO1xuICAvLyBpbnZhbGlkIGxlYWRpbmcgMFxuICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcwJyAmJiBpc05hTihwYXRoKSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gIHJldHVybiBpc0xpdGVyYWwodHJpbW1lZCkgPyBzdHJpcFF1b3Rlcyh0cmltbWVkKSA6ICcqJyArIHRyaW1tZWRcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBwYXRoIGludG8gYW4gYXJyYXkgb2Ygc2VnbWVudHNcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZSQxIChwYXRoKSB7XG4gIHZhciBrZXlzID0gW107XG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbW9kZSA9IEJFRk9SRV9QQVRIO1xuICB2YXIgc3ViUGF0aERlcHRoID0gMDtcbiAgdmFyIGM7XG4gIHZhciBrZXk7XG4gIHZhciBuZXdDaGFyO1xuICB2YXIgdHlwZTtcbiAgdmFyIHRyYW5zaXRpb247XG4gIHZhciBhY3Rpb247XG4gIHZhciB0eXBlTWFwO1xuICB2YXIgYWN0aW9ucyA9IFtdO1xuXG4gIGFjdGlvbnNbUFVTSF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIGtleSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgYWN0aW9uc1tBUFBFTkRdID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAga2V5ID0gbmV3Q2hhcjtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ICs9IG5ld0NoYXI7XG4gICAgfVxuICB9O1xuXG4gIGFjdGlvbnNbSU5DX1NVQl9QQVRIX0RFUFRIXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBhY3Rpb25zW0FQUEVORF0oKTtcbiAgICBzdWJQYXRoRGVwdGgrKztcbiAgfTtcblxuICBhY3Rpb25zW1BVU0hfU1VCX1BBVEhdID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzdWJQYXRoRGVwdGggPiAwKSB7XG4gICAgICBzdWJQYXRoRGVwdGgtLTtcbiAgICAgIG1vZGUgPSBJTl9TVUJfUEFUSDtcbiAgICAgIGFjdGlvbnNbQVBQRU5EXSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJQYXRoRGVwdGggPSAwO1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICBrZXkgPSBmb3JtYXRTdWJQYXRoKGtleSk7XG4gICAgICBpZiAoa2V5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbnNbUFVTSF0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gbWF5YmVVbmVzY2FwZVF1b3RlICgpIHtcbiAgICB2YXIgbmV4dENoYXIgPSBwYXRoW2luZGV4ICsgMV07XG4gICAgaWYgKChtb2RlID09PSBJTl9TSU5HTEVfUVVPVEUgJiYgbmV4dENoYXIgPT09IFwiJ1wiKSB8fFxuICAgICAgKG1vZGUgPT09IElOX0RPVUJMRV9RVU9URSAmJiBuZXh0Q2hhciA9PT0gJ1wiJykpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICBuZXdDaGFyID0gJ1xcXFwnICsgbmV4dENoYXI7XG4gICAgICBhY3Rpb25zW0FQUEVORF0oKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKG1vZGUgIT09IG51bGwpIHtcbiAgICBpbmRleCsrO1xuICAgIGMgPSBwYXRoW2luZGV4XTtcblxuICAgIGlmIChjID09PSAnXFxcXCcgJiYgbWF5YmVVbmVzY2FwZVF1b3RlKCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdHlwZSA9IGdldFBhdGhDaGFyVHlwZShjKTtcbiAgICB0eXBlTWFwID0gcGF0aFN0YXRlTWFjaGluZVttb2RlXTtcbiAgICB0cmFuc2l0aW9uID0gdHlwZU1hcFt0eXBlXSB8fCB0eXBlTWFwWydlbHNlJ10gfHwgRVJST1I7XG5cbiAgICBpZiAodHJhbnNpdGlvbiA9PT0gRVJST1IpIHtcbiAgICAgIHJldHVybiAvLyBwYXJzZSBlcnJvclxuICAgIH1cblxuICAgIG1vZGUgPSB0cmFuc2l0aW9uWzBdO1xuICAgIGFjdGlvbiA9IGFjdGlvbnNbdHJhbnNpdGlvblsxXV07XG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgbmV3Q2hhciA9IHRyYW5zaXRpb25bMl07XG4gICAgICBuZXdDaGFyID0gbmV3Q2hhciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gY1xuICAgICAgICA6IG5ld0NoYXI7XG4gICAgICBpZiAoYWN0aW9uKCkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlID09PSBBRlRFUl9QQVRIKSB7XG4gICAgICByZXR1cm4ga2V5c1xuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbnZhciBJMThuUGF0aCA9IGZ1bmN0aW9uIEkxOG5QYXRoICgpIHtcbiAgdGhpcy5fY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufTtcblxuLyoqXG4gKiBFeHRlcm5hbCBwYXJzZSB0aGF0IGNoZWNrIGZvciBhIGNhY2hlIGhpdCBmaXJzdFxuICovXG5JMThuUGF0aC5wcm90b3R5cGUucGFyc2VQYXRoID0gZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gIHZhciBoaXQgPSB0aGlzLl9jYWNoZVtwYXRoXTtcbiAgaWYgKCFoaXQpIHtcbiAgICBoaXQgPSBwYXJzZSQxKHBhdGgpO1xuICAgIGlmIChoaXQpIHtcbiAgICAgIHRoaXMuX2NhY2hlW3BhdGhdID0gaGl0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGl0IHx8IFtdXG59O1xuXG4vKipcbiAqIEdldCBwYXRoIHZhbHVlIGZyb20gcGF0aCBzdHJpbmdcbiAqL1xuSTE4blBhdGgucHJvdG90eXBlLmdldFBhdGhWYWx1ZSA9IGZ1bmN0aW9uIGdldFBhdGhWYWx1ZSAob2JqLCBwYXRoKSB7XG4gIGlmICghaXNPYmplY3Qob2JqKSkgeyByZXR1cm4gbnVsbCB9XG5cbiAgdmFyIHBhdGhzID0gdGhpcy5wYXJzZVBhdGgocGF0aCk7XG4gIGlmIChwYXRocy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gICAgdmFyIGxhc3QgPSBvYmo7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBsYXN0W3BhdGhzW2ldXTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBsYXN0ID0gdmFsdWU7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RcbiAgfVxufTtcblxuLyogICovXG5cblxuXG52YXIgaHRtbFRhZ01hdGNoZXIgPSAvPFxcLz9bXFx3XFxzPVwiLy4nOjsjLVxcL10rPi87XG52YXIgbGlua0tleU1hdGNoZXIgPSAvKD86QCg/OlxcLlthLXpdKyk/Oig/OltcXHdcXC1ffC5dK3xcXChbXFx3XFwtX3wuXStcXCkpKS9nO1xudmFyIGxpbmtLZXlQcmVmaXhNYXRjaGVyID0gL15AKD86XFwuKFthLXpdKykpPzovO1xudmFyIGJyYWNrZXRzTWF0Y2hlciA9IC9bKCldL2c7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IHtcbiAgJ3VwcGVyJzogZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyLnRvTG9jYWxlVXBwZXJDYXNlKCk7IH0sXG4gICdsb3dlcic6IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0ci50b0xvY2FsZUxvd2VyQ2FzZSgpOyB9XG59O1xuXG52YXIgZGVmYXVsdEZvcm1hdHRlciA9IG5ldyBCYXNlRm9ybWF0dGVyKCk7XG5cbnZhciBWdWVJMThuID0gZnVuY3Rpb24gVnVlSTE4biAob3B0aW9ucykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcbiAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgLy8gQXV0byBpbnN0YWxsIGlmIGl0IGlzIG5vdCBkb25lIHlldCBhbmQgYHdpbmRvd2AgaGFzIGBWdWVgLlxuICAvLyBUbyBhbGxvdyB1c2VycyB0byBhdm9pZCBhdXRvLWluc3RhbGxhdGlvbiBpbiBzb21lIGNhc2VzLFxuICAvLyB0aGlzIGNvZGUgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLiBTZWUgIzI5MFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFWdWUgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZ1ZSkge1xuICAgIGluc3RhbGwod2luZG93LlZ1ZSk7XG4gIH1cblxuICB2YXIgbG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgJ2VuLVVTJztcbiAgdmFyIGZhbGxiYWNrTG9jYWxlID0gb3B0aW9ucy5mYWxsYmFja0xvY2FsZSB8fCAnZW4tVVMnO1xuICB2YXIgbWVzc2FnZXMgPSBvcHRpb25zLm1lc3NhZ2VzIHx8IHt9O1xuICB2YXIgZGF0ZVRpbWVGb3JtYXRzID0gb3B0aW9ucy5kYXRlVGltZUZvcm1hdHMgfHwge307XG4gIHZhciBudW1iZXJGb3JtYXRzID0gb3B0aW9ucy5udW1iZXJGb3JtYXRzIHx8IHt9O1xuXG4gIHRoaXMuX3ZtID0gbnVsbDtcbiAgdGhpcy5fZm9ybWF0dGVyID0gb3B0aW9ucy5mb3JtYXR0ZXIgfHwgZGVmYXVsdEZvcm1hdHRlcjtcbiAgdGhpcy5fbW9kaWZpZXJzID0gb3B0aW9ucy5tb2RpZmllcnMgfHwge307XG4gIHRoaXMuX21pc3NpbmcgPSBvcHRpb25zLm1pc3NpbmcgfHwgbnVsbDtcbiAgdGhpcy5fcm9vdCA9IG9wdGlvbnMucm9vdCB8fCBudWxsO1xuICB0aGlzLl9zeW5jID0gb3B0aW9ucy5zeW5jID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnN5bmM7XG4gIHRoaXMuX2ZhbGxiYWNrUm9vdCA9IG9wdGlvbnMuZmFsbGJhY2tSb290ID09PSB1bmRlZmluZWRcbiAgICA/IHRydWVcbiAgICA6ICEhb3B0aW9ucy5mYWxsYmFja1Jvb3Q7XG4gIHRoaXMuX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMgPSBvcHRpb25zLmZvcm1hdEZhbGxiYWNrTWVzc2FnZXMgPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6ICEhb3B0aW9ucy5mb3JtYXRGYWxsYmFja01lc3NhZ2VzO1xuICB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gPSBvcHRpb25zLnNpbGVudFRyYW5zbGF0aW9uV2FybiA9PT0gdW5kZWZpbmVkXG4gICAgPyBmYWxzZVxuICAgIDogb3B0aW9ucy5zaWxlbnRUcmFuc2xhdGlvbldhcm47XG4gIHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiA9IG9wdGlvbnMuc2lsZW50RmFsbGJhY2tXYXJuID09PSB1bmRlZmluZWRcbiAgICA/IGZhbHNlXG4gICAgOiAhIW9wdGlvbnMuc2lsZW50RmFsbGJhY2tXYXJuO1xuICB0aGlzLl9kYXRlVGltZUZvcm1hdHRlcnMgPSB7fTtcbiAgdGhpcy5fbnVtYmVyRm9ybWF0dGVycyA9IHt9O1xuICB0aGlzLl9wYXRoID0gbmV3IEkxOG5QYXRoKCk7XG4gIHRoaXMuX2RhdGFMaXN0ZW5lcnMgPSBbXTtcbiAgdGhpcy5fcHJlc2VydmVEaXJlY3RpdmVDb250ZW50ID0gb3B0aW9ucy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6ICEhb3B0aW9ucy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQ7XG4gIHRoaXMucGx1cmFsaXphdGlvblJ1bGVzID0gb3B0aW9ucy5wbHVyYWxpemF0aW9uUnVsZXMgfHwge307XG4gIHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID0gb3B0aW9ucy53YXJuSHRtbEluTWVzc2FnZSB8fCAnb2ZmJztcblxuICB0aGlzLl9leGlzdCA9IGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIWtleSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmICghaXNOdWxsKHRoaXMkMS5fcGF0aC5nZXRQYXRoVmFsdWUobWVzc2FnZSwga2V5KSkpIHsgcmV0dXJuIHRydWUgfVxuICAgIC8vIGZhbGxiYWNrIGZvciBmbGF0IGtleVxuICAgIGlmIChtZXNzYWdlW2tleV0pIHsgcmV0dXJuIHRydWUgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ3dhcm4nIHx8IHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7XG4gICAgT2JqZWN0LmtleXMobWVzc2FnZXMpLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgdGhpcyQxLl9jaGVja0xvY2FsZU1lc3NhZ2UobG9jYWxlLCB0aGlzJDEuX3dhcm5IdG1sSW5NZXNzYWdlLCBtZXNzYWdlc1tsb2NhbGVdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX2luaXRWTSh7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZmFsbGJhY2tMb2NhbGU6IGZhbGxiYWNrTG9jYWxlLFxuICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcbiAgICBkYXRlVGltZUZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBudW1iZXJGb3JtYXRzOiBudW1iZXJGb3JtYXRzXG4gIH0pO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgdm06IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sbWVzc2FnZXM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZGF0ZVRpbWVGb3JtYXRzOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LG51bWJlckZvcm1hdHM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sYXZhaWxhYmxlTG9jYWxlczogeyBjb25maWd1cmFibGU6IHRydWUgfSxsb2NhbGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZmFsbGJhY2tMb2NhbGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZm9ybWF0RmFsbGJhY2tNZXNzYWdlczogeyBjb25maWd1cmFibGU6IHRydWUgfSxtaXNzaW5nOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGZvcm1hdHRlcjogeyBjb25maWd1cmFibGU6IHRydWUgfSxzaWxlbnRUcmFuc2xhdGlvbldhcm46IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sc2lsZW50RmFsbGJhY2tXYXJuOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LHByZXNlcnZlRGlyZWN0aXZlQ29udGVudDogeyBjb25maWd1cmFibGU6IHRydWUgfSx3YXJuSHRtbEluTWVzc2FnZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fY2hlY2tMb2NhbGVNZXNzYWdlID0gZnVuY3Rpb24gX2NoZWNrTG9jYWxlTWVzc2FnZSAobG9jYWxlLCBsZXZlbCwgbWVzc2FnZSkge1xuICB2YXIgcGF0aHMgPSBbXTtcblxuICB2YXIgZm4gPSBmdW5jdGlvbiAobGV2ZWwsIGxvY2FsZSwgbWVzc2FnZSwgcGF0aHMpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChtZXNzYWdlKSkge1xuICAgICAgT2JqZWN0LmtleXMobWVzc2FnZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWwgPSBtZXNzYWdlW2tleV07XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICBwYXRocy5wdXNoKGtleSk7XG4gICAgICAgICAgcGF0aHMucHVzaCgnLicpO1xuICAgICAgICAgIGZuKGxldmVsLCBsb2NhbGUsIHZhbCwgcGF0aHMpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhdGhzLnB1c2goa2V5KTtcbiAgICAgICAgICBmbihsZXZlbCwgbG9jYWxlLCB2YWwsIHBhdGhzKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSB7XG4gICAgICBtZXNzYWdlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgcGF0aHMucHVzaCgoXCJbXCIgKyBpbmRleCArIFwiXVwiKSk7XG4gICAgICAgICAgcGF0aHMucHVzaCgnLicpO1xuICAgICAgICAgIGZuKGxldmVsLCBsb2NhbGUsIGl0ZW0sIHBhdGhzKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXRocy5wdXNoKChcIltcIiArIGluZGV4ICsgXCJdXCIpKTtcbiAgICAgICAgICBmbihsZXZlbCwgbG9jYWxlLCBpdGVtLCBwYXRocyk7XG4gICAgICAgICAgcGF0aHMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgcmV0ID0gaHRtbFRhZ01hdGNoZXIudGVzdChtZXNzYWdlKTtcbiAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgdmFyIG1zZyA9IFwiRGV0ZWN0ZWQgSFRNTCBpbiBtZXNzYWdlICdcIiArIG1lc3NhZ2UgKyBcIicgb2Yga2V5cGF0aCAnXCIgKyAocGF0aHMuam9pbignJykpICsgXCInIGF0ICdcIiArIGxvY2FsZSArIFwiJy4gQ29uc2lkZXIgY29tcG9uZW50IGludGVycG9sYXRpb24gd2l0aCAnPGkxOG4+JyB0byBhdm9pZCBYU1MuIFNlZSBodHRwczovL2JpdC5seS8yWnFKemtwXCI7XG4gICAgICAgIGlmIChsZXZlbCA9PT0gJ3dhcm4nKSB7XG4gICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICB9IGVsc2UgaWYgKGxldmVsID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgZXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmbihsZXZlbCwgbG9jYWxlLCBtZXNzYWdlLCBwYXRocyk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faW5pdFZNID0gZnVuY3Rpb24gX2luaXRWTSAoZGF0YSkge1xuICB2YXIgc2lsZW50ID0gVnVlLmNvbmZpZy5zaWxlbnQ7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gdHJ1ZTtcbiAgdGhpcy5fdm0gPSBuZXcgVnVlKHsgZGF0YTogZGF0YSB9KTtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSBzaWxlbnQ7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5kZXN0cm95Vk0gPSBmdW5jdGlvbiBkZXN0cm95Vk0gKCkge1xuICB0aGlzLl92bS4kZGVzdHJveSgpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuc3Vic2NyaWJlRGF0YUNoYW5naW5nID0gZnVuY3Rpb24gc3Vic2NyaWJlRGF0YUNoYW5naW5nICh2bSkge1xuICB0aGlzLl9kYXRhTGlzdGVuZXJzLnB1c2godm0pO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUudW5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcgPSBmdW5jdGlvbiB1bnN1YnNjcmliZURhdGFDaGFuZ2luZyAodm0pIHtcbiAgcmVtb3ZlKHRoaXMuX2RhdGFMaXN0ZW5lcnMsIHZtKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLndhdGNoSTE4bkRhdGEgPSBmdW5jdGlvbiB3YXRjaEkxOG5EYXRhICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gdGhpcy5fdm0uJHdhdGNoKCckZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHNlbGYuX2RhdGFMaXN0ZW5lcnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIFZ1ZS5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuX2RhdGFMaXN0ZW5lcnNbaV0gJiYgc2VsZi5fZGF0YUxpc3RlbmVyc1tpXS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlIH0pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS53YXRjaExvY2FsZSA9IGZ1bmN0aW9uIHdhdGNoTG9jYWxlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghdGhpcy5fc3luYyB8fCAhdGhpcy5fcm9vdCkgeyByZXR1cm4gbnVsbCB9XG4gIHZhciB0YXJnZXQgPSB0aGlzLl92bTtcbiAgcmV0dXJuIHRoaXMuX3Jvb3QuJGkxOG4udm0uJHdhdGNoKCdsb2NhbGUnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgdGFyZ2V0LiRzZXQodGFyZ2V0LCAnbG9jYWxlJywgdmFsKTtcbiAgICB0YXJnZXQuJGZvcmNlVXBkYXRlKCk7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pXG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMudm0uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fdm0gfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLm1lc3NhZ2VzLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fZ2V0TWVzc2FnZXMoKSkgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5kYXRlVGltZUZvcm1hdHMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl9nZXREYXRlVGltZUZvcm1hdHMoKSkgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5udW1iZXJGb3JtYXRzLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fZ2V0TnVtYmVyRm9ybWF0cygpKSB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmF2YWlsYWJsZUxvY2FsZXMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tZXNzYWdlcykuc29ydCgpIH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5sb2NhbGUuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fdm0ubG9jYWxlIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMubG9jYWxlLnNldCA9IGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bSwgJ2xvY2FsZScsIGxvY2FsZSk7XG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuZmFsbGJhY2tMb2NhbGUuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fdm0uZmFsbGJhY2tMb2NhbGUgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5mYWxsYmFja0xvY2FsZS5zZXQgPSBmdW5jdGlvbiAobG9jYWxlKSB7XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0sICdmYWxsYmFja0xvY2FsZScsIGxvY2FsZSk7XG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9mb3JtYXRGYWxsYmFja01lc3NhZ2VzIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcy5zZXQgPSBmdW5jdGlvbiAoZmFsbGJhY2spIHsgdGhpcy5fZm9ybWF0RmFsbGJhY2tNZXNzYWdlcyA9IGZhbGxiYWNrOyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMubWlzc2luZy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9taXNzaW5nIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMubWlzc2luZy5zZXQgPSBmdW5jdGlvbiAoaGFuZGxlcikgeyB0aGlzLl9taXNzaW5nID0gaGFuZGxlcjsgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmZvcm1hdHRlci5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9mb3JtYXR0ZXIgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5mb3JtYXR0ZXIuc2V0ID0gZnVuY3Rpb24gKGZvcm1hdHRlcikgeyB0aGlzLl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXI7IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5zaWxlbnRUcmFuc2xhdGlvbldhcm4uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuc2lsZW50VHJhbnNsYXRpb25XYXJuLnNldCA9IGZ1bmN0aW9uIChzaWxlbnQpIHsgdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuID0gc2lsZW50OyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuc2lsZW50RmFsbGJhY2tXYXJuLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiB9O1xucHJvdG90eXBlQWNjZXNzb3JzLnNpbGVudEZhbGxiYWNrV2Fybi5zZXQgPSBmdW5jdGlvbiAoc2lsZW50KSB7IHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiA9IHNpbGVudDsgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudC5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQuc2V0ID0gZnVuY3Rpb24gKHByZXNlcnZlKSB7IHRoaXMuX3ByZXNlcnZlRGlyZWN0aXZlQ29udGVudCA9IHByZXNlcnZlOyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMud2Fybkh0bWxJbk1lc3NhZ2UuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy53YXJuSHRtbEluTWVzc2FnZS5zZXQgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgb3JnTGV2ZWwgPSB0aGlzLl93YXJuSHRtbEluTWVzc2FnZTtcbiAgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPSBsZXZlbDtcbiAgaWYgKG9yZ0xldmVsICE9PSBsZXZlbCAmJiAobGV2ZWwgPT09ICd3YXJuJyB8fCBsZXZlbCA9PT0gJ2Vycm9yJykpIHtcbiAgICB2YXIgbWVzc2FnZXMgPSB0aGlzLl9nZXRNZXNzYWdlcygpO1xuICAgIE9iamVjdC5rZXlzKG1lc3NhZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgIHRoaXMkMS5fY2hlY2tMb2NhbGVNZXNzYWdlKGxvY2FsZSwgdGhpcyQxLl93YXJuSHRtbEluTWVzc2FnZSwgbWVzc2FnZXNbbG9jYWxlXSk7XG4gICAgfSk7XG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9nZXRNZXNzYWdlcyA9IGZ1bmN0aW9uIF9nZXRNZXNzYWdlcyAoKSB7IHJldHVybiB0aGlzLl92bS5tZXNzYWdlcyB9O1xuVnVlSTE4bi5wcm90b3R5cGUuX2dldERhdGVUaW1lRm9ybWF0cyA9IGZ1bmN0aW9uIF9nZXREYXRlVGltZUZvcm1hdHMgKCkgeyByZXR1cm4gdGhpcy5fdm0uZGF0ZVRpbWVGb3JtYXRzIH07XG5WdWVJMThuLnByb3RvdHlwZS5fZ2V0TnVtYmVyRm9ybWF0cyA9IGZ1bmN0aW9uIF9nZXROdW1iZXJGb3JtYXRzICgpIHsgcmV0dXJuIHRoaXMuX3ZtLm51bWJlckZvcm1hdHMgfTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3dhcm5EZWZhdWx0ID0gZnVuY3Rpb24gX3dhcm5EZWZhdWx0IChsb2NhbGUsIGtleSwgcmVzdWx0LCB2bSwgdmFsdWVzKSB7XG4gIGlmICghaXNOdWxsKHJlc3VsdCkpIHsgcmV0dXJuIHJlc3VsdCB9XG4gIGlmICh0aGlzLl9taXNzaW5nKSB7XG4gICAgdmFyIG1pc3NpbmdSZXQgPSB0aGlzLl9taXNzaW5nLmFwcGx5KG51bGwsIFtsb2NhbGUsIGtleSwgdm0sIHZhbHVlc10pO1xuICAgIGlmICh0eXBlb2YgbWlzc2luZ1JldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBtaXNzaW5nUmV0XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIkNhbm5vdCB0cmFuc2xhdGUgdGhlIHZhbHVlIG9mIGtleXBhdGggJ1wiICsga2V5ICsgXCInLiBcIiArXG4gICAgICAgICdVc2UgdGhlIHZhbHVlIG9mIGtleXBhdGggYXMgZGVmYXVsdC4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9mb3JtYXRGYWxsYmFja01lc3NhZ2VzKSB7XG4gICAgdmFyIHBhcnNlZEFyZ3MgPSBwYXJzZUFyZ3MuYXBwbHkodm9pZCAwLCB2YWx1ZXMpO1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXIoa2V5LCAnc3RyaW5nJywgcGFyc2VkQXJncy5wYXJhbXMsIGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ga2V5XG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc0ZhbGxiYWNrUm9vdCA9IGZ1bmN0aW9uIF9pc0ZhbGxiYWNrUm9vdCAodmFsKSB7XG4gIHJldHVybiAhdmFsICYmICFpc051bGwodGhpcy5fcm9vdCkgJiYgdGhpcy5fZmFsbGJhY2tSb290XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faXNTaWxlbnRGYWxsYmFja1dhcm4gPSBmdW5jdGlvbiBfaXNTaWxlbnRGYWxsYmFja1dhcm4gKGtleSkge1xuICByZXR1cm4gdGhpcy5fc2lsZW50RmFsbGJhY2tXYXJuIGluc3RhbmNlb2YgUmVnRXhwXG4gICAgPyB0aGlzLl9zaWxlbnRGYWxsYmFja1dhcm4udGVzdChrZXkpXG4gICAgOiB0aGlzLl9zaWxlbnRGYWxsYmFja1dhcm5cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc1NpbGVudEZhbGxiYWNrID0gZnVuY3Rpb24gX2lzU2lsZW50RmFsbGJhY2sgKGxvY2FsZSwga2V5KSB7XG4gIHJldHVybiB0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpICYmICh0aGlzLl9pc0ZhbGxiYWNrUm9vdCgpIHx8IGxvY2FsZSAhPT0gdGhpcy5mYWxsYmFja0xvY2FsZSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybiA9IGZ1bmN0aW9uIF9pc1NpbGVudFRyYW5zbGF0aW9uV2FybiAoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gaW5zdGFuY2VvZiBSZWdFeHBcbiAgICA/IHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2Fybi50ZXN0KGtleSlcbiAgICA6IHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2FyblxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gX2ludGVycG9sYXRlIChcbiAgbG9jYWxlLFxuICBtZXNzYWdlLFxuICBrZXksXG4gIGhvc3QsXG4gIGludGVycG9sYXRlTW9kZSxcbiAgdmFsdWVzLFxuICB2aXNpdGVkTGlua1N0YWNrXG4pIHtcbiAgaWYgKCFtZXNzYWdlKSB7IHJldHVybiBudWxsIH1cblxuICB2YXIgcGF0aFJldCA9IHRoaXMuX3BhdGguZ2V0UGF0aFZhbHVlKG1lc3NhZ2UsIGtleSk7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGhSZXQpIHx8IGlzUGxhaW5PYmplY3QocGF0aFJldCkpIHsgcmV0dXJuIHBhdGhSZXQgfVxuXG4gIHZhciByZXQ7XG4gIGlmIChpc051bGwocGF0aFJldCkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG1lc3NhZ2UpKSB7XG4gICAgICByZXQgPSBtZXNzYWdlW2tleV07XG4gICAgICBpZiAodHlwZW9mIHJldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2sobG9jYWxlLCBrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJWYWx1ZSBvZiBrZXkgJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhIHN0cmluZyFcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBwYXRoUmV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0ID0gcGF0aFJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2sobG9jYWxlLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oKFwiVmFsdWUgb2Yga2V5ICdcIiArIGtleSArIFwiJyBpcyBub3QgYSBzdHJpbmchXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbGlua3Mgd2l0aGluIHRoZSB0cmFuc2xhdGVkIHN0cmluZ1xuICBpZiAocmV0LmluZGV4T2YoJ0A6JykgPj0gMCB8fCByZXQuaW5kZXhPZignQC4nKSA+PSAwKSB7XG4gICAgcmV0ID0gdGhpcy5fbGluayhsb2NhbGUsIG1lc3NhZ2UsIHJldCwgaG9zdCwgJ3JhdycsIHZhbHVlcywgdmlzaXRlZExpbmtTdGFjayk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fcmVuZGVyKHJldCwgaW50ZXJwb2xhdGVNb2RlLCB2YWx1ZXMsIGtleSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9saW5rID0gZnVuY3Rpb24gX2xpbmsgKFxuICBsb2NhbGUsXG4gIG1lc3NhZ2UsXG4gIHN0cixcbiAgaG9zdCxcbiAgaW50ZXJwb2xhdGVNb2RlLFxuICB2YWx1ZXMsXG4gIHZpc2l0ZWRMaW5rU3RhY2tcbikge1xuICB2YXIgcmV0ID0gc3RyO1xuXG4gIC8vIE1hdGNoIGFsbCB0aGUgbGlua3Mgd2l0aGluIHRoZSBsb2NhbFxuICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVwbGFjZSBlYWNoIG9mXG4gIC8vIHRoZW0gd2l0aCBpdHMgdHJhbnNsYXRpb25cbiAgdmFyIG1hdGNoZXMgPSByZXQubWF0Y2gobGlua0tleU1hdGNoZXIpO1xuICBmb3IgKHZhciBpZHggaW4gbWF0Y2hlcykge1xuICAgIC8vIGllIGNvbXBhdGlibGU6IGZpbHRlciBjdXN0b20gYXJyYXlcbiAgICAvLyBwcm90b3R5cGUgbWV0aG9kXG4gICAgaWYgKCFtYXRjaGVzLmhhc093blByb3BlcnR5KGlkeCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHZhciBsaW5rID0gbWF0Y2hlc1tpZHhdO1xuICAgIHZhciBsaW5rS2V5UHJlZml4TWF0Y2hlcyA9IGxpbmsubWF0Y2gobGlua0tleVByZWZpeE1hdGNoZXIpO1xuICAgIHZhciBsaW5rUHJlZml4ID0gbGlua0tleVByZWZpeE1hdGNoZXNbMF07XG4gICAgICB2YXIgZm9ybWF0dGVyTmFtZSA9IGxpbmtLZXlQcmVmaXhNYXRjaGVzWzFdO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIEA6LCBALmNhc2U6IGFuZCB0aGUgYnJhY2tldHNcbiAgICB2YXIgbGlua1BsYWNlaG9sZGVyID0gbGluay5yZXBsYWNlKGxpbmtQcmVmaXgsICcnKS5yZXBsYWNlKGJyYWNrZXRzTWF0Y2hlciwgJycpO1xuXG4gICAgaWYgKHZpc2l0ZWRMaW5rU3RhY2suaW5jbHVkZXMobGlua1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigoXCJDaXJjdWxhciByZWZlcmVuY2UgZm91bmQuIFxcXCJcIiArIGxpbmsgKyBcIlxcXCIgaXMgYWxyZWFkeSB2aXNpdGVkIGluIHRoZSBjaGFpbiBvZiBcIiArICh2aXNpdGVkTGlua1N0YWNrLnJldmVyc2UoKS5qb2luKCcgPC0gJykpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICAgIHZpc2l0ZWRMaW5rU3RhY2sucHVzaChsaW5rUGxhY2Vob2xkZXIpO1xuXG4gICAgLy8gVHJhbnNsYXRlIHRoZSBsaW5rXG4gICAgdmFyIHRyYW5zbGF0ZWQgPSB0aGlzLl9pbnRlcnBvbGF0ZShcbiAgICAgIGxvY2FsZSwgbWVzc2FnZSwgbGlua1BsYWNlaG9sZGVyLCBob3N0LFxuICAgICAgaW50ZXJwb2xhdGVNb2RlID09PSAncmF3JyA/ICdzdHJpbmcnIDogaW50ZXJwb2xhdGVNb2RlLFxuICAgICAgaW50ZXJwb2xhdGVNb2RlID09PSAncmF3JyA/IHVuZGVmaW5lZCA6IHZhbHVlcyxcbiAgICAgIHZpc2l0ZWRMaW5rU3RhY2tcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHRyYW5zbGF0ZWQpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4obGlua1BsYWNlaG9sZGVyKSkge1xuICAgICAgICB3YXJuKChcIkZhbGwgYmFjayB0byB0cmFuc2xhdGUgdGhlIGxpbmsgcGxhY2Vob2xkZXIgJ1wiICsgbGlua1BsYWNlaG9sZGVyICsgXCInIHdpdGggcm9vdCBsb2NhbGUuXCIpKTtcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgICAgdmFyIHJvb3QgPSB0aGlzLl9yb290LiRpMThuO1xuICAgICAgdHJhbnNsYXRlZCA9IHJvb3QuX3RyYW5zbGF0ZShcbiAgICAgICAgcm9vdC5fZ2V0TWVzc2FnZXMoKSwgcm9vdC5sb2NhbGUsIHJvb3QuZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIGxpbmtQbGFjZWhvbGRlciwgaG9zdCwgaW50ZXJwb2xhdGVNb2RlLCB2YWx1ZXNcbiAgICAgICk7XG4gICAgfVxuICAgIHRyYW5zbGF0ZWQgPSB0aGlzLl93YXJuRGVmYXVsdChcbiAgICAgIGxvY2FsZSwgbGlua1BsYWNlaG9sZGVyLCB0cmFuc2xhdGVkLCBob3N0LFxuICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW3ZhbHVlc11cbiAgICApO1xuXG4gICAgaWYgKHRoaXMuX21vZGlmaWVycy5oYXNPd25Qcm9wZXJ0eShmb3JtYXR0ZXJOYW1lKSkge1xuICAgICAgdHJhbnNsYXRlZCA9IHRoaXMuX21vZGlmaWVyc1tmb3JtYXR0ZXJOYW1lXSh0cmFuc2xhdGVkKTtcbiAgICB9IGVsc2UgaWYgKGRlZmF1bHRNb2RpZmllcnMuaGFzT3duUHJvcGVydHkoZm9ybWF0dGVyTmFtZSkpIHtcbiAgICAgIHRyYW5zbGF0ZWQgPSBkZWZhdWx0TW9kaWZpZXJzW2Zvcm1hdHRlck5hbWVdKHRyYW5zbGF0ZWQpO1xuICAgIH1cblxuICAgIHZpc2l0ZWRMaW5rU3RhY2sucG9wKCk7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBsaW5rIHdpdGggdGhlIHRyYW5zbGF0ZWRcbiAgICByZXQgPSAhdHJhbnNsYXRlZCA/IHJldCA6IHJldC5yZXBsYWNlKGxpbmssIHRyYW5zbGF0ZWQpO1xuICB9XG5cbiAgcmV0dXJuIHJldFxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uIF9yZW5kZXIgKG1lc3NhZ2UsIGludGVycG9sYXRlTW9kZSwgdmFsdWVzLCBwYXRoKSB7XG4gIHZhciByZXQgPSB0aGlzLl9mb3JtYXR0ZXIuaW50ZXJwb2xhdGUobWVzc2FnZSwgdmFsdWVzLCBwYXRoKTtcblxuICAvLyBJZiB0aGUgY3VzdG9tIGZvcm1hdHRlciByZWZ1c2VzIHRvIHdvcmsgLSBhcHBseSB0aGUgZGVmYXVsdCBvbmVcbiAgaWYgKCFyZXQpIHtcbiAgICByZXQgPSBkZWZhdWx0Rm9ybWF0dGVyLmludGVycG9sYXRlKG1lc3NhZ2UsIHZhbHVlcywgcGF0aCk7XG4gIH1cblxuICAvLyBpZiBpbnRlcnBvbGF0ZU1vZGUgaXMgKipub3QqKiAnc3RyaW5nJyAoJ3JvdycpLFxuICAvLyByZXR1cm4gdGhlIGNvbXBpbGVkIGRhdGEgKGUuZy4gWydmb28nLCBWTm9kZSwgJ2JhciddKSB3aXRoIGZvcm1hdHRlclxuICByZXR1cm4gaW50ZXJwb2xhdGVNb2RlID09PSAnc3RyaW5nJyA/IHJldC5qb2luKCcnKSA6IHJldFxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3RyYW5zbGF0ZSA9IGZ1bmN0aW9uIF90cmFuc2xhdGUgKFxuICBtZXNzYWdlcyxcbiAgbG9jYWxlLFxuICBmYWxsYmFjayxcbiAga2V5LFxuICBob3N0LFxuICBpbnRlcnBvbGF0ZU1vZGUsXG4gIGFyZ3Ncbikge1xuICB2YXIgcmVzID1cbiAgICB0aGlzLl9pbnRlcnBvbGF0ZShsb2NhbGUsIG1lc3NhZ2VzW2xvY2FsZV0sIGtleSwgaG9zdCwgaW50ZXJwb2xhdGVNb2RlLCBhcmdzLCBba2V5XSk7XG4gIGlmICghaXNOdWxsKHJlcykpIHsgcmV0dXJuIHJlcyB9XG5cbiAgcmVzID0gdGhpcy5faW50ZXJwb2xhdGUoZmFsbGJhY2ssIG1lc3NhZ2VzW2ZhbGxiYWNrXSwga2V5LCBob3N0LCBpbnRlcnBvbGF0ZU1vZGUsIGFyZ3MsIFtrZXldKTtcbiAgaWYgKCFpc051bGwocmVzKSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpICYmICF0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpKSB7XG4gICAgICB3YXJuKChcIkZhbGwgYmFjayB0byB0cmFuc2xhdGUgdGhlIGtleXBhdGggJ1wiICsga2V5ICsgXCInIHdpdGggJ1wiICsgZmFsbGJhY2sgKyBcIicgbG9jYWxlLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fdCA9IGZ1bmN0aW9uIF90IChrZXksIF9sb2NhbGUsIG1lc3NhZ2VzLCBob3N0KSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDQ7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyA0IF07XG4gIGlmICgha2V5KSB7IHJldHVybiAnJyB9XG5cbiAgdmFyIHBhcnNlZEFyZ3MgPSBwYXJzZUFyZ3MuYXBwbHkodm9pZCAwLCB2YWx1ZXMpO1xuICB2YXIgbG9jYWxlID0gcGFyc2VkQXJncy5sb2NhbGUgfHwgX2xvY2FsZTtcblxuICB2YXIgcmV0ID0gdGhpcy5fdHJhbnNsYXRlKFxuICAgIG1lc3NhZ2VzLCBsb2NhbGUsIHRoaXMuZmFsbGJhY2tMb2NhbGUsIGtleSxcbiAgICBob3N0LCAnc3RyaW5nJywgcGFyc2VkQXJncy5wYXJhbXNcbiAgKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gdHJhbnNsYXRlIHRoZSBrZXlwYXRoICdcIiArIGtleSArIFwiJyB3aXRoIHJvb3QgbG9jYWxlLlwiKSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy5fcm9vdCkgeyB0aHJvdyBFcnJvcigndW5leHBlY3RlZCBlcnJvcicpIH1cbiAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3Jvb3QpLiR0LmFwcGx5KHJlZiwgWyBrZXkgXS5jb25jYXQoIHZhbHVlcyApKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLl93YXJuRGVmYXVsdChsb2NhbGUsIGtleSwgcmV0LCBob3N0LCB2YWx1ZXMpXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnQgPSBmdW5jdGlvbiB0IChrZXkpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcbiAgcmV0dXJuIChyZWYgPSB0aGlzKS5fdC5hcHBseShyZWYsIFsga2V5LCB0aGlzLmxvY2FsZSwgdGhpcy5fZ2V0TWVzc2FnZXMoKSwgbnVsbCBdLmNvbmNhdCggdmFsdWVzICkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faSA9IGZ1bmN0aW9uIF9pIChrZXksIGxvY2FsZSwgbWVzc2FnZXMsIGhvc3QsIHZhbHVlcykge1xuICB2YXIgcmV0ID1cbiAgICB0aGlzLl90cmFuc2xhdGUobWVzc2FnZXMsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwga2V5LCBob3N0LCAncmF3JywgdmFsdWVzKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gaW50ZXJwb2xhdGUgdGhlIGtleXBhdGggJ1wiICsga2V5ICsgXCInIHdpdGggcm9vdCBsb2NhbGUuXCIpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLmkoa2V5LCBsb2NhbGUsIHZhbHVlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fd2FybkRlZmF1bHQobG9jYWxlLCBrZXksIHJldCwgaG9zdCwgW3ZhbHVlc10pXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLmkgPSBmdW5jdGlvbiBpIChrZXksIGxvY2FsZSwgdmFsdWVzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWtleSkgeyByZXR1cm4gJycgfVxuXG4gIGlmICh0eXBlb2YgbG9jYWxlICE9PSAnc3RyaW5nJykge1xuICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2koa2V5LCBsb2NhbGUsIHRoaXMuX2dldE1lc3NhZ2VzKCksIG51bGwsIHZhbHVlcylcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl90YyA9IGZ1bmN0aW9uIF90YyAoXG4gIGtleSxcbiAgX2xvY2FsZSxcbiAgbWVzc2FnZXMsXG4gIGhvc3QsXG4gIGNob2ljZVxuKSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDU7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyA1IF07XG4gIGlmICgha2V5KSB7IHJldHVybiAnJyB9XG4gIGlmIChjaG9pY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIGNob2ljZSA9IDE7XG4gIH1cblxuICB2YXIgcHJlZGVmaW5lZCA9IHsgJ2NvdW50JzogY2hvaWNlLCAnbic6IGNob2ljZSB9O1xuICB2YXIgcGFyc2VkQXJncyA9IHBhcnNlQXJncy5hcHBseSh2b2lkIDAsIHZhbHVlcyk7XG4gIHBhcnNlZEFyZ3MucGFyYW1zID0gT2JqZWN0LmFzc2lnbihwcmVkZWZpbmVkLCBwYXJzZWRBcmdzLnBhcmFtcyk7XG4gIHZhbHVlcyA9IHBhcnNlZEFyZ3MubG9jYWxlID09PSBudWxsID8gW3BhcnNlZEFyZ3MucGFyYW1zXSA6IFtwYXJzZWRBcmdzLmxvY2FsZSwgcGFyc2VkQXJncy5wYXJhbXNdO1xuICByZXR1cm4gdGhpcy5mZXRjaENob2ljZSgocmVmID0gdGhpcykuX3QuYXBwbHkocmVmLCBbIGtleSwgX2xvY2FsZSwgbWVzc2FnZXMsIGhvc3QgXS5jb25jYXQoIHZhbHVlcyApKSwgY2hvaWNlKVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZmV0Y2hDaG9pY2UgPSBmdW5jdGlvbiBmZXRjaENob2ljZSAobWVzc2FnZSwgY2hvaWNlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIW1lc3NhZ2UgJiYgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7IHJldHVybiBudWxsIH1cbiAgdmFyIGNob2ljZXMgPSBtZXNzYWdlLnNwbGl0KCd8Jyk7XG5cbiAgY2hvaWNlID0gdGhpcy5nZXRDaG9pY2VJbmRleChjaG9pY2UsIGNob2ljZXMubGVuZ3RoKTtcbiAgaWYgKCFjaG9pY2VzW2Nob2ljZV0pIHsgcmV0dXJuIG1lc3NhZ2UgfVxuICByZXR1cm4gY2hvaWNlc1tjaG9pY2VdLnRyaW0oKVxufTtcblxuLyoqXG4gKiBAcGFyYW0gY2hvaWNlIHtudW1iZXJ9IGEgY2hvaWNlIGluZGV4IGdpdmVuIGJ5IHRoZSBpbnB1dCB0byAkdGM6IGAkdGMoJ3BhdGgudG8ucnVsZScsIGNob2ljZUluZGV4KWBcbiAqIEBwYXJhbSBjaG9pY2VzTGVuZ3RoIHtudW1iZXJ9IGFuIG92ZXJhbGwgYW1vdW50IG9mIGF2YWlsYWJsZSBjaG9pY2VzXG4gKiBAcmV0dXJucyBhIGZpbmFsIGNob2ljZSBpbmRleFxuKi9cblZ1ZUkxOG4ucHJvdG90eXBlLmdldENob2ljZUluZGV4ID0gZnVuY3Rpb24gZ2V0Q2hvaWNlSW5kZXggKGNob2ljZSwgY2hvaWNlc0xlbmd0aCkge1xuICAvLyBEZWZhdWx0IChvbGQpIGdldENob2ljZUluZGV4IGltcGxlbWVudGF0aW9uIC0gZW5nbGlzaC1jb21wYXRpYmxlXG4gIHZhciBkZWZhdWx0SW1wbCA9IGZ1bmN0aW9uIChfY2hvaWNlLCBfY2hvaWNlc0xlbmd0aCkge1xuICAgIF9jaG9pY2UgPSBNYXRoLmFicyhfY2hvaWNlKTtcblxuICAgIGlmIChfY2hvaWNlc0xlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIF9jaG9pY2VcbiAgICAgICAgPyBfY2hvaWNlID4gMVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMFxuICAgICAgICA6IDFcbiAgICB9XG5cbiAgICByZXR1cm4gX2Nob2ljZSA/IE1hdGgubWluKF9jaG9pY2UsIDIpIDogMFxuICB9O1xuXG4gIGlmICh0aGlzLmxvY2FsZSBpbiB0aGlzLnBsdXJhbGl6YXRpb25SdWxlcykge1xuICAgIHJldHVybiB0aGlzLnBsdXJhbGl6YXRpb25SdWxlc1t0aGlzLmxvY2FsZV0uYXBwbHkodGhpcywgW2Nob2ljZSwgY2hvaWNlc0xlbmd0aF0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRlZmF1bHRJbXBsKGNob2ljZSwgY2hvaWNlc0xlbmd0aClcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUudGMgPSBmdW5jdGlvbiB0YyAoa2V5LCBjaG9pY2UpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDIgXTtcbiAgcmV0dXJuIChyZWYgPSB0aGlzKS5fdGMuYXBwbHkocmVmLCBbIGtleSwgdGhpcy5sb2NhbGUsIHRoaXMuX2dldE1lc3NhZ2VzKCksIG51bGwsIGNob2ljZSBdLmNvbmNhdCggdmFsdWVzICkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fdGUgPSBmdW5jdGlvbiBfdGUgKGtleSwgbG9jYWxlLCBtZXNzYWdlcykge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAzO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDMgXTtcblxuICB2YXIgX2xvY2FsZSA9IHBhcnNlQXJncy5hcHBseSh2b2lkIDAsIGFyZ3MpLmxvY2FsZSB8fCBsb2NhbGU7XG4gIHJldHVybiB0aGlzLl9leGlzdChtZXNzYWdlc1tfbG9jYWxlXSwga2V5KVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUudGUgPSBmdW5jdGlvbiB0ZSAoa2V5LCBsb2NhbGUpIHtcbiAgcmV0dXJuIHRoaXMuX3RlKGtleSwgdGhpcy5sb2NhbGUsIHRoaXMuX2dldE1lc3NhZ2VzKCksIGxvY2FsZSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLmdldExvY2FsZU1lc3NhZ2UgPSBmdW5jdGlvbiBnZXRMb2NhbGVNZXNzYWdlIChsb2NhbGUpIHtcbiAgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fdm0ubWVzc2FnZXNbbG9jYWxlXSB8fCB7fSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnNldExvY2FsZU1lc3NhZ2UgPSBmdW5jdGlvbiBzZXRMb2NhbGVNZXNzYWdlIChsb2NhbGUsIG1lc3NhZ2UpIHtcbiAgaWYgKHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnd2FybicgfHwgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPT09ICdlcnJvcicpIHtcbiAgICB0aGlzLl9jaGVja0xvY2FsZU1lc3NhZ2UobG9jYWxlLCB0aGlzLl93YXJuSHRtbEluTWVzc2FnZSwgbWVzc2FnZSk7XG4gICAgaWYgKHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7IHJldHVybiB9XG4gIH1cbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5tZXNzYWdlcywgbG9jYWxlLCBtZXNzYWdlKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLm1lcmdlTG9jYWxlTWVzc2FnZSA9IGZ1bmN0aW9uIG1lcmdlTG9jYWxlTWVzc2FnZSAobG9jYWxlLCBtZXNzYWdlKSB7XG4gIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ3dhcm4nIHx8IHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7XG4gICAgdGhpcy5fY2hlY2tMb2NhbGVNZXNzYWdlKGxvY2FsZSwgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UsIG1lc3NhZ2UpO1xuICAgIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ2Vycm9yJykgeyByZXR1cm4gfVxuICB9XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0ubWVzc2FnZXMsIGxvY2FsZSwgbWVyZ2UodGhpcy5fdm0ubWVzc2FnZXNbbG9jYWxlXSB8fCB7fSwgbWVzc2FnZSkpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZ2V0RGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBnZXREYXRlVGltZUZvcm1hdCAobG9jYWxlKSB7XG4gIHJldHVybiBsb29zZUNsb25lKHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0c1tsb2NhbGVdIHx8IHt9KVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuc2V0RGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBzZXREYXRlVGltZUZvcm1hdCAobG9jYWxlLCBmb3JtYXQpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5kYXRlVGltZUZvcm1hdHMsIGxvY2FsZSwgZm9ybWF0KTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLm1lcmdlRGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBtZXJnZURhdGVUaW1lRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0cywgbG9jYWxlLCBtZXJnZSh0aGlzLl92bS5kYXRlVGltZUZvcm1hdHNbbG9jYWxlXSB8fCB7fSwgZm9ybWF0KSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fbG9jYWxpemVEYXRlVGltZSA9IGZ1bmN0aW9uIF9sb2NhbGl6ZURhdGVUaW1lIChcbiAgdmFsdWUsXG4gIGxvY2FsZSxcbiAgZmFsbGJhY2ssXG4gIGRhdGVUaW1lRm9ybWF0cyxcbiAga2V5XG4pIHtcbiAgdmFyIF9sb2NhbGUgPSBsb2NhbGU7XG4gIHZhciBmb3JtYXRzID0gZGF0ZVRpbWVGb3JtYXRzW19sb2NhbGVdO1xuXG4gIC8vIGZhbGxiYWNrIGxvY2FsZVxuICBpZiAoaXNOdWxsKGZvcm1hdHMpIHx8IGlzTnVsbChmb3JtYXRzW2tleV0pKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvICdcIiArIGZhbGxiYWNrICsgXCInIGRhdGV0aW1lIGZvcm1hdHMgZnJvbSAnXCIgKyBsb2NhbGUgKyBcIicgZGF0ZXRpbWUgZm9ybWF0cy5cIikpO1xuICAgIH1cbiAgICBfbG9jYWxlID0gZmFsbGJhY2s7XG4gICAgZm9ybWF0cyA9IGRhdGVUaW1lRm9ybWF0c1tfbG9jYWxlXTtcbiAgfVxuXG4gIGlmIChpc051bGwoZm9ybWF0cykgfHwgaXNOdWxsKGZvcm1hdHNba2V5XSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2Uge1xuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzW2tleV07XG4gICAgdmFyIGlkID0gX2xvY2FsZSArIFwiX19cIiArIGtleTtcbiAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzW2lkXTtcbiAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzW2lkXSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KF9sb2NhbGUsIGZvcm1hdCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKVxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fZCA9IGZ1bmN0aW9uIF9kICh2YWx1ZSwgbG9jYWxlLCBrZXkpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFWdWVJMThuLmF2YWlsYWJpbGl0aWVzLmRhdGVUaW1lRm9ybWF0KSB7XG4gICAgd2FybignQ2Fubm90IGZvcm1hdCBhIERhdGUgdmFsdWUgZHVlIHRvIG5vdCBzdXBwb3J0ZWQgSW50bC5EYXRlVGltZUZvcm1hdC4nKTtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICgha2V5KSB7XG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSkuZm9ybWF0KHZhbHVlKVxuICB9XG5cbiAgdmFyIHJldCA9XG4gICAgdGhpcy5fbG9jYWxpemVEYXRlVGltZSh2YWx1ZSwgbG9jYWxlLCB0aGlzLmZhbGxiYWNrTG9jYWxlLCB0aGlzLl9nZXREYXRlVGltZUZvcm1hdHMoKSwga2V5KTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gZGF0ZXRpbWUgbG9jYWxpemF0aW9uIG9mIHJvb3Q6IGtleSAnXCIgKyBrZXkgKyBcIicuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLmQodmFsdWUsIGtleSwgbG9jYWxlKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXQgfHwgJydcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZCA9IGZ1bmN0aW9uIGQgKHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgdmFyIGtleSA9IG51bGw7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGFyZ3NbMF0pKSB7XG4gICAgICBpZiAoYXJnc1swXS5sb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gYXJnc1swXS5sb2NhbGU7XG4gICAgICB9XG4gICAgICBpZiAoYXJnc1swXS5rZXkpIHtcbiAgICAgICAga2V5ID0gYXJnc1swXS5rZXk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZCh2YWx1ZSwgbG9jYWxlLCBrZXkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5nZXROdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBnZXROdW1iZXJGb3JtYXQgKGxvY2FsZSkge1xuICByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl92bS5udW1iZXJGb3JtYXRzW2xvY2FsZV0gfHwge30pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5zZXROdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBzZXROdW1iZXJGb3JtYXQgKGxvY2FsZSwgZm9ybWF0KSB7XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0ubnVtYmVyRm9ybWF0cywgbG9jYWxlLCBmb3JtYXQpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUubWVyZ2VOdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBtZXJnZU51bWJlckZvcm1hdCAobG9jYWxlLCBmb3JtYXQpIHtcbiAgdGhpcy5fdm0uJHNldCh0aGlzLl92bS5udW1iZXJGb3JtYXRzLCBsb2NhbGUsIG1lcmdlKHRoaXMuX3ZtLm51bWJlckZvcm1hdHNbbG9jYWxlXSB8fCB7fSwgZm9ybWF0KSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fZ2V0TnVtYmVyRm9ybWF0dGVyID0gZnVuY3Rpb24gX2dldE51bWJlckZvcm1hdHRlciAoXG4gIHZhbHVlLFxuICBsb2NhbGUsXG4gIGZhbGxiYWNrLFxuICBudW1iZXJGb3JtYXRzLFxuICBrZXksXG4gIG9wdGlvbnNcbikge1xuICB2YXIgX2xvY2FsZSA9IGxvY2FsZTtcbiAgdmFyIGZvcm1hdHMgPSBudW1iZXJGb3JtYXRzW19sb2NhbGVdO1xuXG4gIC8vIGZhbGxiYWNrIGxvY2FsZVxuICBpZiAoaXNOdWxsKGZvcm1hdHMpIHx8IGlzTnVsbChmb3JtYXRzW2tleV0pKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvICdcIiArIGZhbGxiYWNrICsgXCInIG51bWJlciBmb3JtYXRzIGZyb20gJ1wiICsgbG9jYWxlICsgXCInIG51bWJlciBmb3JtYXRzLlwiKSk7XG4gICAgfVxuICAgIF9sb2NhbGUgPSBmYWxsYmFjaztcbiAgICBmb3JtYXRzID0gbnVtYmVyRm9ybWF0c1tfbG9jYWxlXTtcbiAgfVxuXG4gIGlmIChpc051bGwoZm9ybWF0cykgfHwgaXNOdWxsKGZvcm1hdHNba2V5XSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2Uge1xuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzW2tleV07XG5cbiAgICB2YXIgZm9ybWF0dGVyO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAvLyBJZiBvcHRpb25zIHNwZWNpZmllZCAtIGNyZWF0ZSBvbmUgdGltZSBudW1iZXIgZm9ybWF0dGVyXG4gICAgICBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoX2xvY2FsZSwgT2JqZWN0LmFzc2lnbih7fSwgZm9ybWF0LCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpZCA9IF9sb2NhbGUgKyBcIl9fXCIgKyBrZXk7XG4gICAgICBmb3JtYXR0ZXIgPSB0aGlzLl9udW1iZXJGb3JtYXR0ZXJzW2lkXTtcbiAgICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICAgIGZvcm1hdHRlciA9IHRoaXMuX251bWJlckZvcm1hdHRlcnNbaWRdID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KF9sb2NhbGUsIGZvcm1hdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXJcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX24gPSBmdW5jdGlvbiBfbiAodmFsdWUsIGxvY2FsZSwga2V5LCBvcHRpb25zKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIVZ1ZUkxOG4uYXZhaWxhYmlsaXRpZXMubnVtYmVyRm9ybWF0KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oJ0Nhbm5vdCBmb3JtYXQgYSBOdW1iZXIgdmFsdWUgZHVlIHRvIG5vdCBzdXBwb3J0ZWQgSW50bC5OdW1iZXJGb3JtYXQuJyk7XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFrZXkpIHtcbiAgICB2YXIgbmYgPSAhb3B0aW9ucyA/IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUpIDogbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5mLmZvcm1hdCh2YWx1ZSlcbiAgfVxuXG4gIHZhciBmb3JtYXR0ZXIgPSB0aGlzLl9nZXROdW1iZXJGb3JtYXR0ZXIodmFsdWUsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwgdGhpcy5fZ2V0TnVtYmVyRm9ybWF0cygpLCBrZXksIG9wdGlvbnMpO1xuICB2YXIgcmV0ID0gZm9ybWF0dGVyICYmIGZvcm1hdHRlci5mb3JtYXQodmFsdWUpO1xuICBpZiAodGhpcy5faXNGYWxsYmFja1Jvb3QocmV0KSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpICYmICF0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpKSB7XG4gICAgICB3YXJuKChcIkZhbGwgYmFjayB0byBudW1iZXIgbG9jYWxpemF0aW9uIG9mIHJvb3Q6IGtleSAnXCIgKyBrZXkgKyBcIicuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLm4odmFsdWUsIE9iamVjdC5hc3NpZ24oe30sIHsga2V5OiBrZXksIGxvY2FsZTogbG9jYWxlIH0sIG9wdGlvbnMpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXQgfHwgJydcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUubiA9IGZ1bmN0aW9uIG4gKHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciBvcHRpb25zID0gbnVsbDtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBhcmdzWzBdO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoYXJnc1swXSkpIHtcbiAgICAgIGlmIChhcmdzWzBdLmxvY2FsZSkge1xuICAgICAgICBsb2NhbGUgPSBhcmdzWzBdLmxvY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzWzBdLmtleSkge1xuICAgICAgICBrZXkgPSBhcmdzWzBdLmtleTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsdGVyIG91dCBudW1iZXIgZm9ybWF0IG9wdGlvbnMgb25seVxuICAgICAgb3B0aW9ucyA9IE9iamVjdC5rZXlzKGFyZ3NbMF0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgICB2YXIgb2JqO1xuXG4gICAgICAgIGlmIChudW1iZXJGb3JtYXRLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYWNjLCAoIG9iaiA9IHt9LCBvYmpba2V5XSA9IGFyZ3NbMF1ba2V5XSwgb2JqICkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwgbnVsbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcy5fbih2YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fbnRwID0gZnVuY3Rpb24gX250cCAodmFsdWUsIGxvY2FsZSwga2V5LCBvcHRpb25zKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIVZ1ZUkxOG4uYXZhaWxhYmlsaXRpZXMubnVtYmVyRm9ybWF0KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oJ0Nhbm5vdCBmb3JtYXQgdG8gcGFydHMgYSBOdW1iZXIgdmFsdWUgZHVlIHRvIG5vdCBzdXBwb3J0ZWQgSW50bC5OdW1iZXJGb3JtYXQuJyk7XG4gICAgfVxuICAgIHJldHVybiBbXVxuICB9XG5cbiAgaWYgKCFrZXkpIHtcbiAgICB2YXIgbmYgPSAhb3B0aW9ucyA/IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUpIDogbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5mLmZvcm1hdFRvUGFydHModmFsdWUpXG4gIH1cblxuICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fZ2V0TnVtYmVyRm9ybWF0dGVyKHZhbHVlLCBsb2NhbGUsIHRoaXMuZmFsbGJhY2tMb2NhbGUsIHRoaXMuX2dldE51bWJlckZvcm1hdHMoKSwga2V5LCBvcHRpb25zKTtcbiAgdmFyIHJldCA9IGZvcm1hdHRlciAmJiBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyh2YWx1ZSk7XG4gIGlmICh0aGlzLl9pc0ZhbGxiYWNrUm9vdChyZXQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvIGZvcm1hdCBudW1iZXIgdG8gcGFydHMgb2Ygcm9vdDoga2V5ICdcIiArIGtleSArIFwiJyAuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLl9udHAodmFsdWUsIGxvY2FsZSwga2V5LCBvcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXQgfHwgW11cbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZ1ZUkxOG4ucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGF2YWlsYWJpbGl0aWVzO1xuLy8gJEZsb3dGaXhNZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZUkxOG4sICdhdmFpbGFiaWxpdGllcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIGlmICghYXZhaWxhYmlsaXRpZXMpIHtcbiAgICAgIHZhciBpbnRsRGVmaW5lZCA9IHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJztcbiAgICAgIGF2YWlsYWJpbGl0aWVzID0ge1xuICAgICAgICBkYXRlVGltZUZvcm1hdDogaW50bERlZmluZWQgJiYgdHlwZW9mIEludGwuRGF0ZVRpbWVGb3JtYXQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICBudW1iZXJGb3JtYXQ6IGludGxEZWZpbmVkICYmIHR5cGVvZiBJbnRsLk51bWJlckZvcm1hdCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGF2YWlsYWJpbGl0aWVzXG4gIH1cbn0pO1xuXG5WdWVJMThuLmluc3RhbGwgPSBpbnN0YWxsO1xuVnVlSTE4bi52ZXJzaW9uID0gJzguMTUuMCc7XG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZUkxOG47XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js\n");
/***/ }),
/***/ "./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js":
/*!***************************************************************************************!*\
!*** ./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js ***!
\***************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzPzY2OTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\n");
/***/ }),
/***/ "./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js":
/*!**************************************************************************!*\
!*** ./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js ***!
\**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/*!\n * vue-router v3.1.3\n * (c) 2019 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if ( true && !condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isExtendedError (constructor, err) {\n return (\n err instanceof constructor ||\n // _name is to support IE9 too\n (err && (err.name === constructor.name || err._name === constructor._name))\n )\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode && parent.$vnode.data;\n if (vnodeData) {\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._inactive) {\n inactive = true;\n }\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n return h(cache[name], data, children)\n }\n\n var matched = route.matched[depth];\n // render empty node if no matched route\n if (!matched) {\n cache[name] = null;\n return h()\n }\n\n var component = cache[name] = matched.components[name];\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n };\n\n // resolve props\n var propsToPass = data.props = resolveProps(route, matched.props && matched.props[name]);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n\n return h(component, data, children)\n }\n};\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (true) {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nvar decode = decodeURIComponent;\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n true && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n parsedQuery[key] = extraQuery[key];\n }\n return parsedQuery\n}\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0\n ? decode(parts.join('='))\n : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj ? Object.keys(obj).map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n }).filter(function (x) { return x.length > 0; }).join('&') : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return (\n a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query)\n )\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params)\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key) {\n var aVal = a[key];\n var bVal = b[key];\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/\\//g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n if (params.pathMatch) { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (true) {\n warn(false, (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n return extend({}, raw)\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params, (\"path \" + (current.path)));\n } else if (true) {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n exact: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget);\n classes[activeClass] = this.exact\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (true) {\n warn(\n false,\n (\"RouterLink with to=\\\"\" + (this.props.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href };\n } else {\n // find the first <a> child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the <a> is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n } else {\n // doesn't have <a> child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (false) { var pathNames, found; }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (true) {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n instances: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (true) {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if ( true && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if ( true && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (true) {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (true) {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (true) {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (true) {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (true) {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = val;\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n window.history.replaceState({ key: getStateKey() }, '', absolutePath);\n window.addEventListener('popstate', function (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n });\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (true) {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (true) {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n window.scrollTo(position.x, position.y);\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && 'pushState' in window.history\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n history.replaceState({ key: getStateKey() }, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n true && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\nvar NavigationDuplicated = /*@__PURE__*/(function (Error) {\n function NavigationDuplicated (normalizedLocation) {\n Error.call(this);\n this.name = this._name = 'NavigationDuplicated';\n // passing the message to super() doesn't seem to work in the transpiled version\n this.message = \"Navigating to current location (\\\"\" + (normalizedLocation.fullPath) + \"\\\") is not allowed\";\n // add a stack property so services like Sentry can correctly display it\n Object.defineProperty(this, 'stack', {\n value: new Error().stack,\n writable: true,\n configurable: true\n });\n // we could also have used\n // Error.captureStackTrace(this, this.constructor)\n // but it only exists on node and chrome\n }\n\n if ( Error ) NavigationDuplicated.__proto__ = Error;\n NavigationDuplicated.prototype = Object.create( Error && Error.prototype );\n NavigationDuplicated.prototype.constructor = NavigationDuplicated;\n\n return NavigationDuplicated;\n}(Error));\n\n// support IE9\nNavigationDuplicated._name = 'NavigationDuplicated';\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1 = this;\n\n var route = this.router.match(location, this.current);\n this.confirmTransition(\n route,\n function () {\n this$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1.ensureURL();\n\n // fire ready cbs once\n if (!this$1.ready) {\n this$1.ready = true;\n this$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1.ready) {\n this$1.ready = true;\n this$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1 = this;\n\n var current = this.current;\n var abort = function (err) {\n // after merging https://github.com/vuejs/vue-router/pull/2771 we\n // When the user navigates through history through back/forward buttons\n // we do not want to throw the error. We only throw it if directly calling\n // push/replace. That's why it's not included in isError\n if (!isExtendedError(NavigationDuplicated, err) && isError(err)) {\n if (this$1.errorCbs.length) {\n this$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n warn(false, 'uncaught error during route navigation:');\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n route.matched.length === current.matched.length\n ) {\n this.ensureURL();\n return abort(new NavigationDuplicated(route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n this.pending = route;\n var iterator = function (hook, next) {\n if (this$1.pending !== route) {\n return abort()\n }\n try {\n hook(route, current, function (to) {\n if (to === false || isError(to)) {\n // next(false) -> abort navigation, ensure current URL\n this$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort();\n if (typeof to === 'object' && to.replace) {\n this$1.replace(to);\n } else {\n this$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n var postEnterCbs = [];\n var isValid = function () { return this$1.current === route; };\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);\n var queue = enterGuards.concat(this$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1.pending !== route) {\n return abort()\n }\n this$1.pending = null;\n onComplete(route);\n if (this$1.router.app) {\n this$1.router.app.$nextTick(function () {\n postEnterCbs.forEach(function (cb) {\n cb();\n });\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n var prev = this.current;\n this.current = route;\n this.cb && this.cb(route);\n this.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect <base> tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated,\n cbs,\n isValid\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key, cbs, isValid)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key,\n cbs,\n isValid\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n cbs.push(function () {\n // #750\n // if a router-view is wrapped with an out-in transition,\n // the instance may not have been registered at this time.\n // we will need to poll for registration until current route\n // is no longer valid.\n poll(cb, match.instances, key, isValid);\n });\n }\n next(cb);\n })\n }\n}\n\nfunction poll (\n cb, // somehow flow cannot infer this is a function\n instances,\n key,\n isValid\n) {\n if (\n instances[key] &&\n !instances[key]._isBeingDestroyed // do not reuse being destroyed instance\n ) {\n cb(instances[key]);\n } else if (isValid()) {\n setTimeout(function () {\n poll(cb, instances, key, isValid);\n }, 16);\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n var this$1 = this;\n\n History.call(this, router, base);\n\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n setupScroll();\n }\n\n var initLocation = getLocation(this.base);\n window.addEventListener('popstate', function (e) {\n var current = this$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1.base);\n if (this$1.current === START && location === initLocation) {\n return\n }\n\n this$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n });\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = decodeURI(window.location.pathname);\n if (base && path.indexOf(base) === 0) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1 = this;\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n setupScroll();\n }\n\n window.addEventListener(\n supportsPushState ? 'popstate' : 'hashchange',\n function () {\n var current = this$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n }\n );\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n // decode the hash but not the search or hash\n // as search(query) is already decoded\n // https://github.com/vuejs/vue-router/issues/2708\n var searchIndex = href.indexOf('?');\n if (searchIndex < 0) {\n var hashIndex = href.indexOf('#');\n if (hashIndex > -1) {\n href = decodeURI(href.slice(0, hashIndex)) + href.slice(hashIndex);\n } else { href = decodeURI(href); }\n } else {\n if (searchIndex > -1) {\n href = decodeURI(href.slice(0, searchIndex)) + href.slice(searchIndex);\n }\n }\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);\n this$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n this$1.index = targetIndex;\n this$1.updateRoute(route);\n },\n function (err) {\n if (isExtendedError(NavigationDuplicated, err)) {\n this$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback = mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (true) {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (\n raw,\n current,\n redirectedFrom\n) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1 = this;\n\n true && assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1.apps.indexOf(app);\n if (index > -1) { this$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History) {\n history.transitionTo(history.getCurrentLocation());\n } else if (history instanceof HashHistory) {\n var setupHashListener = function () {\n history.setupListeners();\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupHashListener,\n setupHashListener\n );\n }\n\n history.listen(function (route) {\n this$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply([], route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n }))\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(\n to,\n current,\n append,\n this\n );\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\nVueRouter.install = install;\nVueRouter.version = '3.1.3';\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (VueRouter);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1yb3V0ZXJAMy4xLjNAdnVlLXJvdXRlci9kaXN0L3Z1ZS1yb3V0ZXIuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWUtcm91dGVyQDMuMS4zQHZ1ZS1yb3V0ZXIvZGlzdC92dWUtcm91dGVyLmVzbS5qcz9jNDc4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICAqIHZ1ZS1yb3V0ZXIgdjMuMS4zXG4gICogKGMpIDIwMTkgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbi8qICAqL1xuXG5mdW5jdGlvbiBhc3NlcnQgKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigoXCJbdnVlLXJvdXRlcl0gXCIgKyBtZXNzYWdlKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuIChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmRpdGlvbikge1xuICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4oKFwiW3Z1ZS1yb3V0ZXJdIFwiICsgbWVzc2FnZSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3IgKGVycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycikuaW5kZXhPZignRXJyb3InKSA+IC0xXG59XG5cbmZ1bmN0aW9uIGlzRXh0ZW5kZWRFcnJvciAoY29uc3RydWN0b3IsIGVycikge1xuICByZXR1cm4gKFxuICAgIGVyciBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yIHx8XG4gICAgLy8gX25hbWUgaXMgdG8gc3VwcG9ydCBJRTkgdG9vXG4gICAgKGVyciAmJiAoZXJyLm5hbWUgPT09IGNvbnN0cnVjdG9yLm5hbWUgfHwgZXJyLl9uYW1lID09PSBjb25zdHJ1Y3Rvci5fbmFtZSkpXG4gIClcbn1cblxuZnVuY3Rpb24gZXh0ZW5kIChhLCBiKSB7XG4gIGZvciAodmFyIGtleSBpbiBiKSB7XG4gICAgYVtrZXldID0gYltrZXldO1xuICB9XG4gIHJldHVybiBhXG59XG5cbnZhciBWaWV3ID0ge1xuICBuYW1lOiAnUm91dGVyVmlldycsXG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoXywgcmVmKSB7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBjaGlsZHJlbiA9IHJlZi5jaGlsZHJlbjtcbiAgICB2YXIgcGFyZW50ID0gcmVmLnBhcmVudDtcbiAgICB2YXIgZGF0YSA9IHJlZi5kYXRhO1xuXG4gICAgLy8gdXNlZCBieSBkZXZ0b29scyB0byBkaXNwbGF5IGEgcm91dGVyLXZpZXcgYmFkZ2VcbiAgICBkYXRhLnJvdXRlclZpZXcgPSB0cnVlO1xuXG4gICAgLy8gZGlyZWN0bHkgdXNlIHBhcmVudCBjb250ZXh0J3MgY3JlYXRlRWxlbWVudCgpIGZ1bmN0aW9uXG4gICAgLy8gc28gdGhhdCBjb21wb25lbnRzIHJlbmRlcmVkIGJ5IHJvdXRlci12aWV3IGNhbiByZXNvbHZlIG5hbWVkIHNsb3RzXG4gICAgdmFyIGggPSBwYXJlbnQuJGNyZWF0ZUVsZW1lbnQ7XG4gICAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuICAgIHZhciByb3V0ZSA9IHBhcmVudC4kcm91dGU7XG4gICAgdmFyIGNhY2hlID0gcGFyZW50Ll9yb3V0ZXJWaWV3Q2FjaGUgfHwgKHBhcmVudC5fcm91dGVyVmlld0NhY2hlID0ge30pO1xuXG4gICAgLy8gZGV0ZXJtaW5lIGN1cnJlbnQgdmlldyBkZXB0aCwgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlIHRyZWVcbiAgICAvLyBoYXMgYmVlbiB0b2dnbGVkIGluYWN0aXZlIGJ1dCBrZXB0LWFsaXZlLlxuICAgIHZhciBkZXB0aCA9IDA7XG4gICAgdmFyIGluYWN0aXZlID0gZmFsc2U7XG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuX3JvdXRlclJvb3QgIT09IHBhcmVudCkge1xuICAgICAgdmFyIHZub2RlRGF0YSA9IHBhcmVudC4kdm5vZGUgJiYgcGFyZW50LiR2bm9kZS5kYXRhO1xuICAgICAgaWYgKHZub2RlRGF0YSkge1xuICAgICAgICBpZiAodm5vZGVEYXRhLnJvdXRlclZpZXcpIHtcbiAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bm9kZURhdGEua2VlcEFsaXZlICYmIHBhcmVudC5faW5hY3RpdmUpIHtcbiAgICAgICAgICBpbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgIH1cbiAgICBkYXRhLnJvdXRlclZpZXdEZXB0aCA9IGRlcHRoO1xuXG4gICAgLy8gcmVuZGVyIHByZXZpb3VzIHZpZXcgaWYgdGhlIHRyZWUgaXMgaW5hY3RpdmUgYW5kIGtlcHQtYWxpdmVcbiAgICBpZiAoaW5hY3RpdmUpIHtcbiAgICAgIHJldHVybiBoKGNhY2hlW25hbWVdLCBkYXRhLCBjaGlsZHJlbilcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2hlZCA9IHJvdXRlLm1hdGNoZWRbZGVwdGhdO1xuICAgIC8vIHJlbmRlciBlbXB0eSBub2RlIGlmIG5vIG1hdGNoZWQgcm91dGVcbiAgICBpZiAoIW1hdGNoZWQpIHtcbiAgICAgIGNhY2hlW25hbWVdID0gbnVsbDtcbiAgICAgIHJldHVybiBoKClcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50ID0gY2FjaGVbbmFtZV0gPSBtYXRjaGVkLmNvbXBvbmVudHNbbmFtZV07XG5cbiAgICAvLyBhdHRhY2ggaW5zdGFuY2UgcmVnaXN0cmF0aW9uIGhvb2tcbiAgICAvLyB0aGlzIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBpbnN0YW5jZSdzIGluamVjdGVkIGxpZmVjeWNsZSBob29rc1xuICAgIGRhdGEucmVnaXN0ZXJSb3V0ZUluc3RhbmNlID0gZnVuY3Rpb24gKHZtLCB2YWwpIHtcbiAgICAgIC8vIHZhbCBjb3VsZCBiZSB1bmRlZmluZWQgZm9yIHVucmVnaXN0cmF0aW9uXG4gICAgICB2YXIgY3VycmVudCA9IG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdO1xuICAgICAgaWYgKFxuICAgICAgICAodmFsICYmIGN1cnJlbnQgIT09IHZtKSB8fFxuICAgICAgICAoIXZhbCAmJiBjdXJyZW50ID09PSB2bSlcbiAgICAgICkge1xuICAgICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbHNvIHJlZ2lzdGVyIGluc3RhbmNlIGluIHByZXBhdGNoIGhvb2tcbiAgICAvLyBpbiBjYXNlIHRoZSBzYW1lIGNvbXBvbmVudCBpbnN0YW5jZSBpcyByZXVzZWQgYWNyb3NzIGRpZmZlcmVudCByb3V0ZXNcbiAgICA7KGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pKS5wcmVwYXRjaCA9IGZ1bmN0aW9uIChfLCB2bm9kZSkge1xuICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW5zdGFuY2UgaW4gaW5pdCBob29rXG4gICAgLy8gaW4gY2FzZSBrZXB0LWFsaXZlIGNvbXBvbmVudCBiZSBhY3RpdmVkIHdoZW4gcm91dGVzIGNoYW5nZWRcbiAgICBkYXRhLmhvb2suaW5pdCA9IGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlICYmXG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICE9PSBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXVxuICAgICAgKSB7XG4gICAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHJlc29sdmUgcHJvcHNcbiAgICB2YXIgcHJvcHNUb1Bhc3MgPSBkYXRhLnByb3BzID0gcmVzb2x2ZVByb3BzKHJvdXRlLCBtYXRjaGVkLnByb3BzICYmIG1hdGNoZWQucHJvcHNbbmFtZV0pO1xuICAgIGlmIChwcm9wc1RvUGFzcykge1xuICAgICAgLy8gY2xvbmUgdG8gcHJldmVudCBtdXRhdGlvblxuICAgICAgcHJvcHNUb1Bhc3MgPSBkYXRhLnByb3BzID0gZXh0ZW5kKHt9LCBwcm9wc1RvUGFzcyk7XG4gICAgICAvLyBwYXNzIG5vbi1kZWNsYXJlZCBwcm9wcyBhcyBhdHRyc1xuICAgICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycyA9IGRhdGEuYXR0cnMgfHwge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNUb1Bhc3MpIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQucHJvcHMgfHwgIShrZXkgaW4gY29tcG9uZW50LnByb3BzKSkge1xuICAgICAgICAgIGF0dHJzW2tleV0gPSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgICAgIGRlbGV0ZSBwcm9wc1RvUGFzc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoY29tcG9uZW50LCBkYXRhLCBjaGlsZHJlbilcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVzb2x2ZVByb3BzIChyb3V0ZSwgY29uZmlnKSB7XG4gIHN3aXRjaCAodHlwZW9mIGNvbmZpZykge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHJldHVybiBjb25maWcocm91dGUpXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gY29uZmlnID8gcm91dGUucGFyYW1zIDogdW5kZWZpbmVkXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJwcm9wcyBpbiBcXFwiXCIgKyAocm91dGUucGF0aCkgKyBcIlxcXCIgaXMgYSBcIiArICh0eXBlb2YgY29uZmlnKSArIFwiLCBcIiArXG4gICAgICAgICAgXCJleHBlY3RpbmcgYW4gb2JqZWN0LCBmdW5jdGlvbiBvciBib29sZWFuLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBlbmNvZGVSZXNlcnZlUkUgPSAvWyEnKCkqXS9nO1xudmFyIGVuY29kZVJlc2VydmVSZXBsYWNlciA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpOyB9O1xudmFyIGNvbW1hUkUgPSAvJTJDL2c7XG5cbi8vIGZpeGVkIGVuY29kZVVSSUNvbXBvbmVudCB3aGljaCBpcyBtb3JlIGNvbmZvcm1hbnQgdG8gUkZDMzk4Njpcbi8vIC0gZXNjYXBlcyBbIScoKSpdXG4vLyAtIHByZXNlcnZlIGNvbW1hc1xudmFyIGVuY29kZSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpXG4gIC5yZXBsYWNlKGVuY29kZVJlc2VydmVSRSwgZW5jb2RlUmVzZXJ2ZVJlcGxhY2VyKVxuICAucmVwbGFjZShjb21tYVJFLCAnLCcpOyB9O1xuXG52YXIgZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xuXG5mdW5jdGlvbiByZXNvbHZlUXVlcnkgKFxuICBxdWVyeSxcbiAgZXh0cmFRdWVyeSxcbiAgX3BhcnNlUXVlcnlcbikge1xuICBpZiAoIGV4dHJhUXVlcnkgPT09IHZvaWQgMCApIGV4dHJhUXVlcnkgPSB7fTtcblxuICB2YXIgcGFyc2UgPSBfcGFyc2VRdWVyeSB8fCBwYXJzZVF1ZXJ5O1xuICB2YXIgcGFyc2VkUXVlcnk7XG4gIHRyeSB7XG4gICAgcGFyc2VkUXVlcnkgPSBwYXJzZShxdWVyeSB8fCAnJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oZmFsc2UsIGUubWVzc2FnZSk7XG4gICAgcGFyc2VkUXVlcnkgPSB7fTtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gZXh0cmFRdWVyeSkge1xuICAgIHBhcnNlZFF1ZXJ5W2tleV0gPSBleHRyYVF1ZXJ5W2tleV07XG4gIH1cbiAgcmV0dXJuIHBhcnNlZFF1ZXJ5XG59XG5cbmZ1bmN0aW9uIHBhcnNlUXVlcnkgKHF1ZXJ5KSB7XG4gIHZhciByZXMgPSB7fTtcblxuICBxdWVyeSA9IHF1ZXJ5LnRyaW0oKS5yZXBsYWNlKC9eKFxcP3wjfCYpLywgJycpO1xuXG4gIGlmICghcXVlcnkpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBxdWVyeS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgdmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRzLnNoaWZ0KCkpO1xuICAgIHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwXG4gICAgICA/IGRlY29kZShwYXJ0cy5qb2luKCc9JykpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAocmVzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzW2tleV0gPSB2YWw7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc1trZXldKSkge1xuICAgICAgcmVzW2tleV0ucHVzaCh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNba2V5XSA9IFtyZXNba2V5XSwgdmFsXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5UXVlcnkgKG9iaikge1xuICB2YXIgcmVzID0gb2JqID8gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSBvYmpba2V5XTtcblxuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVuY29kZShrZXkpXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgdmFsLmZvckVhY2goZnVuY3Rpb24gKHZhbDIpIHtcbiAgICAgICAgaWYgKHZhbDIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlKGtleSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHZhbDIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyYnKVxuICAgIH1cblxuICAgIHJldHVybiBlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2YWwpXG4gIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5sZW5ndGggPiAwOyB9KS5qb2luKCcmJykgOiBudWxsO1xuICByZXR1cm4gcmVzID8gKFwiP1wiICsgcmVzKSA6ICcnXG59XG5cbi8qICAqL1xuXG52YXIgdHJhaWxpbmdTbGFzaFJFID0gL1xcLz8kLztcblxuZnVuY3Rpb24gY3JlYXRlUm91dGUgKFxuICByZWNvcmQsXG4gIGxvY2F0aW9uLFxuICByZWRpcmVjdGVkRnJvbSxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHN0cmluZ2lmeVF1ZXJ5ID0gcm91dGVyICYmIHJvdXRlci5vcHRpb25zLnN0cmluZ2lmeVF1ZXJ5O1xuXG4gIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5IHx8IHt9O1xuICB0cnkge1xuICAgIHF1ZXJ5ID0gY2xvbmUocXVlcnkpO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByb3V0ZSA9IHtcbiAgICBuYW1lOiBsb2NhdGlvbi5uYW1lIHx8IChyZWNvcmQgJiYgcmVjb3JkLm5hbWUpLFxuICAgIG1ldGE6IChyZWNvcmQgJiYgcmVjb3JkLm1ldGEpIHx8IHt9LFxuICAgIHBhdGg6IGxvY2F0aW9uLnBhdGggfHwgJy8nLFxuICAgIGhhc2g6IGxvY2F0aW9uLmhhc2ggfHwgJycsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIHBhcmFtczogbG9jYXRpb24ucGFyYW1zIHx8IHt9LFxuICAgIGZ1bGxQYXRoOiBnZXRGdWxsUGF0aChsb2NhdGlvbiwgc3RyaW5naWZ5UXVlcnkpLFxuICAgIG1hdGNoZWQ6IHJlY29yZCA/IGZvcm1hdE1hdGNoKHJlY29yZCkgOiBbXVxuICB9O1xuICBpZiAocmVkaXJlY3RlZEZyb20pIHtcbiAgICByb3V0ZS5yZWRpcmVjdGVkRnJvbSA9IGdldEZ1bGxQYXRoKHJlZGlyZWN0ZWRGcm9tLCBzdHJpbmdpZnlRdWVyeSk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUocm91dGUpXG59XG5cbmZ1bmN0aW9uIGNsb25lICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKGNsb25lKVxuICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICByZXNba2V5XSA9IGNsb25lKHZhbHVlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuLy8gdGhlIHN0YXJ0aW5nIHJvdXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5pdGlhbCBzdGF0ZVxudmFyIFNUQVJUID0gY3JlYXRlUm91dGUobnVsbCwge1xuICBwYXRoOiAnLydcbn0pO1xuXG5mdW5jdGlvbiBmb3JtYXRNYXRjaCAocmVjb3JkKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgd2hpbGUgKHJlY29yZCkge1xuICAgIHJlcy51bnNoaWZ0KHJlY29yZCk7XG4gICAgcmVjb3JkID0gcmVjb3JkLnBhcmVudDtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoIChcbiAgcmVmLFxuICBfc3RyaW5naWZ5UXVlcnlcbikge1xuICB2YXIgcGF0aCA9IHJlZi5wYXRoO1xuICB2YXIgcXVlcnkgPSByZWYucXVlcnk7IGlmICggcXVlcnkgPT09IHZvaWQgMCApIHF1ZXJ5ID0ge307XG4gIHZhciBoYXNoID0gcmVmLmhhc2g7IGlmICggaGFzaCA9PT0gdm9pZCAwICkgaGFzaCA9ICcnO1xuXG4gIHZhciBzdHJpbmdpZnkgPSBfc3RyaW5naWZ5UXVlcnkgfHwgc3RyaW5naWZ5UXVlcnk7XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgc3RyaW5naWZ5KHF1ZXJ5KSArIGhhc2hcbn1cblxuZnVuY3Rpb24gaXNTYW1lUm91dGUgKGEsIGIpIHtcbiAgaWYgKGIgPT09IFNUQVJUKSB7XG4gICAgcmV0dXJuIGEgPT09IGJcbiAgfSBlbHNlIGlmICghYikge1xuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKGEucGF0aCAmJiBiLnBhdGgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnJykgPT09IGIucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJycpICYmXG4gICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KVxuICAgIClcbiAgfSBlbHNlIGlmIChhLm5hbWUgJiYgYi5uYW1lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEubmFtZSA9PT0gYi5uYW1lICYmXG4gICAgICBhLmhhc2ggPT09IGIuaGFzaCAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnF1ZXJ5LCBiLnF1ZXJ5KSAmJlxuICAgICAgaXNPYmplY3RFcXVhbChhLnBhcmFtcywgYi5wYXJhbXMpXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0RXF1YWwgKGEsIGIpIHtcbiAgaWYgKCBhID09PSB2b2lkIDAgKSBhID0ge307XG4gIGlmICggYiA9PT0gdm9pZCAwICkgYiA9IHt9O1xuXG4gIC8vIGhhbmRsZSBudWxsIHZhbHVlICMxNTY2XG4gIGlmICghYSB8fCAhYikgeyByZXR1cm4gYSA9PT0gYiB9XG4gIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICB2YXIgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgYVZhbCA9IGFba2V5XTtcbiAgICB2YXIgYlZhbCA9IGJba2V5XTtcbiAgICAvLyBjaGVjayBuZXN0ZWQgZXF1YWxpdHlcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiVmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0RXF1YWwoYVZhbCwgYlZhbClcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhhVmFsKSA9PT0gU3RyaW5nKGJWYWwpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGlzSW5jbHVkZWRSb3V0ZSAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIHJldHVybiAoXG4gICAgY3VycmVudC5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnLycpLmluZGV4T2YoXG4gICAgICB0YXJnZXQucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJy8nKVxuICAgICkgPT09IDAgJiZcbiAgICAoIXRhcmdldC5oYXNoIHx8IGN1cnJlbnQuaGFzaCA9PT0gdGFyZ2V0Lmhhc2gpICYmXG4gICAgcXVlcnlJbmNsdWRlcyhjdXJyZW50LnF1ZXJ5LCB0YXJnZXQucXVlcnkpXG4gIClcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlcyAoY3VycmVudCwgdGFyZ2V0KSB7XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBpZiAoIShrZXkgaW4gY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVBhdGggKFxuICByZWxhdGl2ZSxcbiAgYmFzZSxcbiAgYXBwZW5kXG4pIHtcbiAgdmFyIGZpcnN0Q2hhciA9IHJlbGF0aXZlLmNoYXJBdCgwKTtcbiAgaWYgKGZpcnN0Q2hhciA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHJlbGF0aXZlXG4gIH1cblxuICBpZiAoZmlyc3RDaGFyID09PSAnPycgfHwgZmlyc3RDaGFyID09PSAnIycpIHtcbiAgICByZXR1cm4gYmFzZSArIHJlbGF0aXZlXG4gIH1cblxuICB2YXIgc3RhY2sgPSBiYXNlLnNwbGl0KCcvJyk7XG5cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNlZ21lbnQgaWY6XG4gIC8vIC0gbm90IGFwcGVuZGluZ1xuICAvLyAtIGFwcGVuZGluZyB0byB0cmFpbGluZyBzbGFzaCAobGFzdCBzZWdtZW50IGlzIGVtcHR5KVxuICBpZiAoIWFwcGVuZCB8fCAhc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0pIHtcbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIC8vIHJlc29sdmUgcmVsYXRpdmUgcGF0aFxuICB2YXIgc2VnbWVudHMgPSByZWxhdGl2ZS5yZXBsYWNlKC9eXFwvLywgJycpLnNwbGl0KCcvJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50ID09PSAnLi4nKSB7XG4gICAgICBzdGFjay5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnQgIT09ICcuJykge1xuICAgICAgc3RhY2sucHVzaChzZWdtZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBlbnN1cmUgbGVhZGluZyBzbGFzaFxuICBpZiAoc3RhY2tbMF0gIT09ICcnKSB7XG4gICAgc3RhY2sudW5zaGlmdCgnJyk7XG4gIH1cblxuICByZXR1cm4gc3RhY2suam9pbignLycpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICB2YXIgaGFzaCA9ICcnO1xuICB2YXIgcXVlcnkgPSAnJztcblxuICB2YXIgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggPj0gMCkge1xuICAgIGhhc2ggPSBwYXRoLnNsaWNlKGhhc2hJbmRleCk7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgaGFzaEluZGV4KTtcbiAgfVxuXG4gIHZhciBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxdWVyeUluZGV4ID49IDApIHtcbiAgICBxdWVyeSA9IHBhdGguc2xpY2UocXVlcnlJbmRleCArIDEpO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIHF1ZXJ5SW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBoYXNoOiBoYXNoXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5QYXRoIChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG59XG5cbnZhciBpc2FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuLyoqXG4gKiBFeHBvc2UgYHBhdGhUb1JlZ2V4cGAuXG4gKi9cbnZhciBwYXRoVG9SZWdleHBfMSA9IHBhdGhUb1JlZ2V4cDtcbnZhciBwYXJzZV8xID0gcGFyc2U7XG52YXIgY29tcGlsZV8xID0gY29tcGlsZTtcbnZhciB0b2tlbnNUb0Z1bmN0aW9uXzEgPSB0b2tlbnNUb0Z1bmN0aW9uO1xudmFyIHRva2Vuc1RvUmVnRXhwXzEgPSB0b2tlbnNUb1JlZ0V4cDtcblxuLyoqXG4gKiBUaGUgbWFpbiBwYXRoIG1hdGNoaW5nIHJlZ2V4cCB1dGlsaXR5LlxuICpcbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbnZhciBQQVRIX1JFR0VYUCA9IG5ldyBSZWdFeHAoW1xuICAvLyBNYXRjaCBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYXBwZWFyIGluIGZ1dHVyZSBtYXRjaGVzLlxuICAvLyBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgd29uJ3QgdHJhbnNmb3JtLlxuICAnKFxcXFxcXFxcLiknLFxuICAvLyBNYXRjaCBFeHByZXNzLXN0eWxlIHBhcmFtZXRlcnMgYW5kIHVuLW5hbWVkIHBhcmFtZXRlcnMgd2l0aCBhIHByZWZpeFxuICAvLyBhbmQgb3B0aW9uYWwgc3VmZml4ZXMuIE1hdGNoZXMgYXBwZWFyIGFzOlxuICAvL1xuICAvLyBcIi86dGVzdChcXFxcZCspP1wiID0+IFtcIi9cIiwgXCJ0ZXN0XCIsIFwiXFxkK1wiLCB1bmRlZmluZWQsIFwiP1wiLCB1bmRlZmluZWRdXG4gIC8vIFwiL3JvdXRlKFxcXFxkKylcIiAgPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiXFxkK1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgLy8gXCIvKlwiICAgICAgICAgICAgPT4gW1wiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiKlwiXVxuICAnKFtcXFxcLy5dKT8oPzooPzpcXFxcOihcXFxcdyspKD86XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSk/fFxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpKFsrKj9dKT98KFxcXFwqKSknXG5dLmpvaW4oJ3wnKSwgJ2cnKTtcblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshQXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlIChzdHIsIG9wdGlvbnMpIHtcbiAgdmFyIHRva2VucyA9IFtdO1xuICB2YXIga2V5ID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHBhdGggPSAnJztcbiAgdmFyIGRlZmF1bHREZWxpbWl0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJztcbiAgdmFyIHJlcztcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdO1xuICAgIHZhciBlc2NhcGVkID0gcmVzWzFdO1xuICAgIHZhciBvZmZzZXQgPSByZXMuaW5kZXg7XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldCk7XG4gICAgaW5kZXggPSBvZmZzZXQgKyBtLmxlbmd0aDtcblxuICAgIC8vIElnbm9yZSBhbHJlYWR5IGVzY2FwZWQgc2VxdWVuY2VzLlxuICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICBwYXRoICs9IGVzY2FwZWRbMV07XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0ID0gc3RyW2luZGV4XTtcbiAgICB2YXIgcHJlZml4ID0gcmVzWzJdO1xuICAgIHZhciBuYW1lID0gcmVzWzNdO1xuICAgIHZhciBjYXB0dXJlID0gcmVzWzRdO1xuICAgIHZhciBncm91cCA9IHJlc1s1XTtcbiAgICB2YXIgbW9kaWZpZXIgPSByZXNbNl07XG4gICAgdmFyIGFzdGVyaXNrID0gcmVzWzddO1xuXG4gICAgLy8gUHVzaCB0aGUgY3VycmVudCBwYXRoIG9udG8gdGhlIHRva2Vucy5cbiAgICBpZiAocGF0aCkge1xuICAgICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gICAgICBwYXRoID0gJyc7XG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWwgPSBwcmVmaXggIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwgJiYgbmV4dCAhPT0gcHJlZml4O1xuICAgIHZhciByZXBlYXQgPSBtb2RpZmllciA9PT0gJysnIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgdmFyIG9wdGlvbmFsID0gbW9kaWZpZXIgPT09ICc/JyB8fCBtb2RpZmllciA9PT0gJyonO1xuICAgIHZhciBkZWxpbWl0ZXIgPSByZXNbMl0gfHwgZGVmYXVsdERlbGltaXRlcjtcbiAgICB2YXIgcGF0dGVybiA9IGNhcHR1cmUgfHwgZ3JvdXA7XG5cbiAgICB0b2tlbnMucHVzaCh7XG4gICAgICBuYW1lOiBuYW1lIHx8IGtleSsrLFxuICAgICAgcHJlZml4OiBwcmVmaXggfHwgJycsXG4gICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgIHJlcGVhdDogcmVwZWF0LFxuICAgICAgcGFydGlhbDogcGFydGlhbCxcbiAgICAgIGFzdGVyaXNrOiAhIWFzdGVyaXNrLFxuICAgICAgcGF0dGVybjogcGF0dGVybiA/IGVzY2FwZUdyb3VwKHBhdHRlcm4pIDogKGFzdGVyaXNrID8gJy4qJyA6ICdbXicgKyBlc2NhcGVTdHJpbmcoZGVsaW1pdGVyKSArICddKz8nKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KTtcbiAgfVxuXG4gIC8vIElmIHRoZSBwYXRoIGV4aXN0cywgcHVzaCBpdCBvbnRvIHRoZSBlbmQuXG4gIGlmIChwYXRoKSB7XG4gICAgdG9rZW5zLnB1c2gocGF0aCk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshZnVuY3Rpb24oT2JqZWN0PSwgT2JqZWN0PSl9XG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUgKHN0ciwgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpKVxufVxuXG4vKipcbiAqIFByZXR0aWVyIGVuY29kaW5nIG9mIFVSSSBwYXRoIHNlZ21lbnRzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1tcXC8/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRW5jb2RlIHRoZSBhc3RlcmlzayBwYXJhbWV0ZXIuIFNpbWlsYXIgdG8gYHByZXR0eWAsIGJ1dCBhbGxvd3Mgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZUFzdGVyaXNrIChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSShzdHIpLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8qKlxuICogRXhwb3NlIGEgbWV0aG9kIGZvciB0cmFuc2Zvcm1pbmcgdG9rZW5zIGludG8gdGhlIHBhdGggZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24gKHRva2Vucykge1xuICAvLyBDb21waWxlIGFsbCB0aGUgdG9rZW5zIGludG8gcmVnZXhwcy5cbiAgdmFyIG1hdGNoZXMgPSBuZXcgQXJyYXkodG9rZW5zLmxlbmd0aCk7XG5cbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHBhdHRlcm5zIGJlZm9yZSBjb21waWxhdGlvbi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRva2Vuc1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1hdGNoZXNbaV0gPSBuZXcgUmVnRXhwKCdeKD86JyArIHRva2Vuc1tpXS5wYXR0ZXJuICsgJykkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcbiAgICB2YXIgcGF0aCA9ICcnO1xuICAgIHZhciBkYXRhID0gb2JqIHx8IHt9O1xuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZW5jb2RlID0gb3B0aW9ucy5wcmV0dHkgPyBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgOiBlbmNvZGVVUklDb21wb25lbnQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuO1xuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGRhdGFbdG9rZW4ubmFtZV07XG4gICAgICB2YXIgc2VnbWVudDtcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBiZSBkZWZpbmVkJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNhcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICdgJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IGVuY29kZSh2YWx1ZVtqXSk7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkoc2VnbWVudCkgKyAnYCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0aCArPSAoaiA9PT0gMCA/IHRva2VuLnByZWZpeCA6IHRva2VuLmRlbGltaXRlcikgKyBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKTtcblxuICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgXCInICsgc2VnbWVudCArICdcIicpXG4gICAgICB9XG5cbiAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aFxuICB9XG59XG5cbi8qKlxuICogRXNjYXBlIGEgcmVndWxhciBleHByZXNzaW9uIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLisqPz1eIToke30oKVtcXF18XFwvXFxcXF0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEVzY2FwZSB0aGUgY2FwdHVyaW5nIGdyb3VwIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgbWVhbmluZy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGdyb3VwXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZUdyb3VwIChncm91cCkge1xuICByZXR1cm4gZ3JvdXAucmVwbGFjZSgvKFs9ITokXFwvKCldKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBBdHRhY2ggdGhlIGtleXMgYXMgYSBwcm9wZXJ0eSBvZiB0aGUgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHJlXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhdHRhY2hLZXlzIChyZSwga2V5cykge1xuICByZS5rZXlzID0ga2V5cztcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpO1xuXG4gIGlmIChncm91cHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgbmFtZTogaSxcbiAgICAgICAgcHJlZml4OiBudWxsLFxuICAgICAgICBkZWxpbWl0ZXI6IG51bGwsXG4gICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgcmVwZWF0OiBmYWxzZSxcbiAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgIGFzdGVyaXNrOiBmYWxzZSxcbiAgICAgICAgcGF0dGVybjogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocGF0aCwga2V5cylcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYXJyYXkgaW50byBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBwYXRoXG4gKiBAcGFyYW0gIHtBcnJheX0gICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBhcnJheVRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBwYXJ0cyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHBhcnRzLnB1c2gocGF0aFRvUmVnZXhwKHBhdGhbaV0sIGtleXMsIG9wdGlvbnMpLnNvdXJjZSk7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86JyArIHBhcnRzLmpvaW4oJ3wnKSArICcpJywgZmxhZ3Mob3B0aW9ucykpO1xuXG4gIHJldHVybiBhdHRhY2hLZXlzKHJlZ2V4cCwga2V5cylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIHJlZ2V4cCBmcm9tIHN0cmluZyBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcGFyYW0gIHshT2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICByZXR1cm4gdG9rZW5zVG9SZWdFeHAocGFyc2UocGF0aCwgb3B0aW9ucyksIGtleXMsIG9wdGlvbnMpXG59XG5cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqXG4gKiBAcGFyYW0gIHshQXJyYXl9ICAgICAgICAgIHRva2Vuc1xuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHRva2Vuc1RvUmVnRXhwICh0b2tlbnMsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucyk7XG4gICAga2V5cyA9IFtdO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuICB2YXIgZW5kID0gb3B0aW9ucy5lbmQgIT09IGZhbHNlO1xuICB2YXIgcm91dGUgPSAnJztcblxuICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJlZml4ID0gZXNjYXBlU3RyaW5nKHRva2VuLnByZWZpeCk7XG4gICAgICB2YXIgY2FwdHVyZSA9ICcoPzonICsgdG9rZW4ucGF0dGVybiArICcpJztcblxuICAgICAga2V5cy5wdXNoKHRva2VuKTtcblxuICAgICAgaWYgKHRva2VuLnJlcGVhdCkge1xuICAgICAgICBjYXB0dXJlICs9ICcoPzonICsgcHJlZml4ICsgY2FwdHVyZSArICcpKic7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICBpZiAoIXRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICBjYXB0dXJlID0gJyg/OicgKyBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJykpPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKT8nO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpJztcbiAgICAgIH1cblxuICAgICAgcm91dGUgKz0gY2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJyk7XG4gIHZhciBlbmRzV2l0aERlbGltaXRlciA9IHJvdXRlLnNsaWNlKC1kZWxpbWl0ZXIubGVuZ3RoKSA9PT0gZGVsaW1pdGVyO1xuXG4gIC8vIEluIG5vbi1zdHJpY3QgbW9kZSB3ZSBhbGxvdyBhIHNsYXNoIGF0IHRoZSBlbmQgb2YgbWF0Y2guIElmIHRoZSBwYXRoIHRvXG4gIC8vIG1hdGNoIGFscmVhZHkgZW5kcyB3aXRoIGEgc2xhc2gsIHdlIHJlbW92ZSBpdCBmb3IgY29uc2lzdGVuY3kuIFRoZSBzbGFzaFxuICAvLyBpcyB2YWxpZCBhdCB0aGUgZW5kIG9mIGEgcGF0aCBtYXRjaCwgbm90IGluIHRoZSBtaWRkbGUuIFRoaXMgaXMgaW1wb3J0YW50XG4gIC8vIGluIG5vbi1lbmRpbmcgbW9kZSwgd2hlcmUgXCIvdGVzdC9cIiBzaG91bGRuJ3QgbWF0Y2ggXCIvdGVzdC8vcm91dGVcIi5cbiAgaWYgKCFzdHJpY3QpIHtcbiAgICByb3V0ZSA9IChlbmRzV2l0aERlbGltaXRlciA/IHJvdXRlLnNsaWNlKDAsIC1kZWxpbWl0ZXIubGVuZ3RoKSA6IHJvdXRlKSArICcoPzonICsgZGVsaW1pdGVyICsgJyg/PSQpKT8nO1xuICB9XG5cbiAgaWYgKGVuZCkge1xuICAgIHJvdXRlICs9ICckJztcbiAgfSBlbHNlIHtcbiAgICAvLyBJbiBub24tZW5kaW5nIG1vZGUsIHdlIG5lZWQgdGhlIGNhcHR1cmluZyBncm91cHMgdG8gbWF0Y2ggYXMgbXVjaCBhc1xuICAgIC8vIHBvc3NpYmxlIGJ5IHVzaW5nIGEgcG9zaXRpdmUgbG9va2FoZWFkIHRvIHRoZSBlbmQgb3IgbmV4dCBwYXRoIHNlZ21lbnQuXG4gICAgcm91dGUgKz0gc3RyaWN0ICYmIGVuZHNXaXRoRGVsaW1pdGVyID8gJycgOiAnKD89JyArIGRlbGltaXRlciArICd8JCknO1xuICB9XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMobmV3IFJlZ0V4cCgnXicgKyByb3V0ZSwgZmxhZ3Mob3B0aW9ucykpLCBrZXlzKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKlxuICogQHBhcmFtICB7KHN0cmluZ3xSZWdFeHB8QXJyYXkpfSBwYXRoXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19ICAgICAgIGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcGF0aFRvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpO1xuICAgIGtleXMgPSBbXTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmIChwYXRoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHJlZ2V4cFRvUmVnZXhwKHBhdGgsIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cykpXG4gIH1cblxuICBpZiAoaXNhcnJheShwYXRoKSkge1xuICAgIHJldHVybiBhcnJheVRvUmVnZXhwKC8qKiBAdHlwZSB7IUFycmF5fSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG4gIH1cblxuICByZXR1cm4gc3RyaW5nVG9SZWdleHAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbn1cbnBhdGhUb1JlZ2V4cF8xLnBhcnNlID0gcGFyc2VfMTtcbnBhdGhUb1JlZ2V4cF8xLmNvbXBpbGUgPSBjb21waWxlXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvbl8xO1xucGF0aFRvUmVnZXhwXzEudG9rZW5zVG9SZWdFeHAgPSB0b2tlbnNUb1JlZ0V4cF8xO1xuXG4vKiAgKi9cblxuLy8gJGZsb3ctZGlzYWJsZS1saW5lXG52YXIgcmVnZXhwQ29tcGlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gZmlsbFBhcmFtcyAoXG4gIHBhdGgsXG4gIHBhcmFtcyxcbiAgcm91dGVNc2dcbikge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gIHRyeSB7XG4gICAgdmFyIGZpbGxlciA9XG4gICAgICByZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gfHxcbiAgICAgIChyZWdleHBDb21waWxlQ2FjaGVbcGF0aF0gPSBwYXRoVG9SZWdleHBfMS5jb21waWxlKHBhdGgpKTtcblxuICAgIC8vIEZpeCAjMjUwNSByZXNvbHZpbmcgYXN0ZXJpc2sgcm91dGVzIHsgbmFtZTogJ25vdC1mb3VuZCcsIHBhcmFtczogeyBwYXRoTWF0Y2g6ICcvbm90LWZvdW5kJyB9fVxuICAgIGlmIChwYXJhbXMucGF0aE1hdGNoKSB7IHBhcmFtc1swXSA9IHBhcmFtcy5wYXRoTWF0Y2g7IH1cblxuICAgIHJldHVybiBmaWxsZXIocGFyYW1zLCB7IHByZXR0eTogdHJ1ZSB9KVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oZmFsc2UsIChcIm1pc3NpbmcgcGFyYW0gZm9yIFwiICsgcm91dGVNc2cgKyBcIjogXCIgKyAoZS5tZXNzYWdlKSkpO1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBkZWxldGUgdGhlIDAgaWYgaXQgd2FzIGFkZGVkXG4gICAgZGVsZXRlIHBhcmFtc1swXTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplTG9jYXRpb24gKFxuICByYXcsXG4gIGN1cnJlbnQsXG4gIGFwcGVuZCxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIG5leHQgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IHsgcGF0aDogcmF3IH0gOiByYXc7XG4gIC8vIG5hbWVkIHRhcmdldFxuICBpZiAobmV4dC5fbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBuZXh0XG4gIH0gZWxzZSBpZiAobmV4dC5uYW1lKSB7XG4gICAgcmV0dXJuIGV4dGVuZCh7fSwgcmF3KVxuICB9XG5cbiAgLy8gcmVsYXRpdmUgcGFyYW1zXG4gIGlmICghbmV4dC5wYXRoICYmIG5leHQucGFyYW1zICYmIGN1cnJlbnQpIHtcbiAgICBuZXh0ID0gZXh0ZW5kKHt9LCBuZXh0KTtcbiAgICBuZXh0Ll9ub3JtYWxpemVkID0gdHJ1ZTtcbiAgICB2YXIgcGFyYW1zID0gZXh0ZW5kKGV4dGVuZCh7fSwgY3VycmVudC5wYXJhbXMpLCBuZXh0LnBhcmFtcyk7XG4gICAgaWYgKGN1cnJlbnQubmFtZSkge1xuICAgICAgbmV4dC5uYW1lID0gY3VycmVudC5uYW1lO1xuICAgICAgbmV4dC5wYXJhbXMgPSBwYXJhbXM7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50Lm1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICB2YXIgcmF3UGF0aCA9IGN1cnJlbnQubWF0Y2hlZFtjdXJyZW50Lm1hdGNoZWQubGVuZ3RoIC0gMV0ucGF0aDtcbiAgICAgIG5leHQucGF0aCA9IGZpbGxQYXJhbXMocmF3UGF0aCwgcGFyYW1zLCAoXCJwYXRoIFwiICsgKGN1cnJlbnQucGF0aCkpKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oZmFsc2UsIFwicmVsYXRpdmUgcGFyYW1zIG5hdmlnYXRpb24gcmVxdWlyZXMgYSBjdXJyZW50IHJvdXRlLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRcbiAgfVxuXG4gIHZhciBwYXJzZWRQYXRoID0gcGFyc2VQYXRoKG5leHQucGF0aCB8fCAnJyk7XG4gIHZhciBiYXNlUGF0aCA9IChjdXJyZW50ICYmIGN1cnJlbnQucGF0aCkgfHwgJy8nO1xuICB2YXIgcGF0aCA9IHBhcnNlZFBhdGgucGF0aFxuICAgID8gcmVzb2x2ZVBhdGgocGFyc2VkUGF0aC5wYXRoLCBiYXNlUGF0aCwgYXBwZW5kIHx8IG5leHQuYXBwZW5kKVxuICAgIDogYmFzZVBhdGg7XG5cbiAgdmFyIHF1ZXJ5ID0gcmVzb2x2ZVF1ZXJ5KFxuICAgIHBhcnNlZFBhdGgucXVlcnksXG4gICAgbmV4dC5xdWVyeSxcbiAgICByb3V0ZXIgJiYgcm91dGVyLm9wdGlvbnMucGFyc2VRdWVyeVxuICApO1xuXG4gIHZhciBoYXNoID0gbmV4dC5oYXNoIHx8IHBhcnNlZFBhdGguaGFzaDtcbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykge1xuICAgIGhhc2ggPSBcIiNcIiArIGhhc2g7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgIHBhdGg6IHBhdGgsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIGhhc2g6IGhhc2hcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gd29yayBhcm91bmQgd2VpcmQgZmxvdyBidWdcbnZhciB0b1R5cGVzID0gW1N0cmluZywgT2JqZWN0XTtcbnZhciBldmVudFR5cGVzID0gW1N0cmluZywgQXJyYXldO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgTGluayA9IHtcbiAgbmFtZTogJ1JvdXRlckxpbmsnLFxuICBwcm9wczoge1xuICAgIHRvOiB7XG4gICAgICB0eXBlOiB0b1R5cGVzLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2EnXG4gICAgfSxcbiAgICBleGFjdDogQm9vbGVhbixcbiAgICBhcHBlbmQ6IEJvb2xlYW4sXG4gICAgcmVwbGFjZTogQm9vbGVhbixcbiAgICBhY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGV4YWN0QWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBldmVudDoge1xuICAgICAgdHlwZTogZXZlbnRUeXBlcyxcbiAgICAgIGRlZmF1bHQ6ICdjbGljaydcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy4kcm91dGVyO1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy4kcm91dGU7XG4gICAgdmFyIHJlZiA9IHJvdXRlci5yZXNvbHZlKFxuICAgICAgdGhpcy50byxcbiAgICAgIGN1cnJlbnQsXG4gICAgICB0aGlzLmFwcGVuZFxuICAgICk7XG4gICAgdmFyIGxvY2F0aW9uID0gcmVmLmxvY2F0aW9uO1xuICAgIHZhciByb3V0ZSA9IHJlZi5yb3V0ZTtcbiAgICB2YXIgaHJlZiA9IHJlZi5ocmVmO1xuXG4gICAgdmFyIGNsYXNzZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsQWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPSByb3V0ZXIub3B0aW9ucy5saW5rRXhhY3RBY3RpdmVDbGFzcztcbiAgICAvLyBTdXBwb3J0IGdsb2JhbCBlbXB0eSBhY3RpdmUgY2xhc3NcbiAgICB2YXIgYWN0aXZlQ2xhc3NGYWxsYmFjayA9XG4gICAgICBnbG9iYWxBY3RpdmVDbGFzcyA9PSBudWxsID8gJ3JvdXRlci1saW5rLWFjdGl2ZScgOiBnbG9iYWxBY3RpdmVDbGFzcztcbiAgICB2YXIgZXhhY3RBY3RpdmVDbGFzc0ZhbGxiYWNrID1cbiAgICAgIGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICA/ICdyb3V0ZXItbGluay1leGFjdC1hY3RpdmUnXG4gICAgICAgIDogZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcztcbiAgICB2YXIgYWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5hY3RpdmVDbGFzcyA9PSBudWxsID8gYWN0aXZlQ2xhc3NGYWxsYmFjayA6IHRoaXMuYWN0aXZlQ2xhc3M7XG4gICAgdmFyIGV4YWN0QWN0aXZlQ2xhc3MgPVxuICAgICAgdGhpcy5leGFjdEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgPyBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2tcbiAgICAgICAgOiB0aGlzLmV4YWN0QWN0aXZlQ2xhc3M7XG5cbiAgICB2YXIgY29tcGFyZVRhcmdldCA9IHJvdXRlLnJlZGlyZWN0ZWRGcm9tXG4gICAgICA/IGNyZWF0ZVJvdXRlKG51bGwsIG5vcm1hbGl6ZUxvY2F0aW9uKHJvdXRlLnJlZGlyZWN0ZWRGcm9tKSwgbnVsbCwgcm91dGVyKVxuICAgICAgOiByb3V0ZTtcblxuICAgIGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc10gPSBpc1NhbWVSb3V0ZShjdXJyZW50LCBjb21wYXJlVGFyZ2V0KTtcbiAgICBjbGFzc2VzW2FjdGl2ZUNsYXNzXSA9IHRoaXMuZXhhY3RcbiAgICAgID8gY2xhc3Nlc1tleGFjdEFjdGl2ZUNsYXNzXVxuICAgICAgOiBpc0luY2x1ZGVkUm91dGUoY3VycmVudCwgY29tcGFyZVRhcmdldCk7XG5cbiAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZ3VhcmRFdmVudChlKSkge1xuICAgICAgICBpZiAodGhpcyQxLnJlcGxhY2UpIHtcbiAgICAgICAgICByb3V0ZXIucmVwbGFjZShsb2NhdGlvbiwgbm9vcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm91dGVyLnB1c2gobG9jYXRpb24sIG5vb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBvbiA9IHsgY2xpY2s6IGd1YXJkRXZlbnQgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmV2ZW50KSkge1xuICAgICAgdGhpcy5ldmVudC5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG9uW2VdID0gaGFuZGxlcjtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvblt0aGlzLmV2ZW50XSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB7IGNsYXNzOiBjbGFzc2VzIH07XG5cbiAgICB2YXIgc2NvcGVkU2xvdCA9XG4gICAgICAhdGhpcy4kc2NvcGVkU2xvdHMuJGhhc05vcm1hbCAmJlxuICAgICAgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCAmJlxuICAgICAgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgbmF2aWdhdGU6IGhhbmRsZXIsXG4gICAgICAgIGlzQWN0aXZlOiBjbGFzc2VzW2FjdGl2ZUNsYXNzXSxcbiAgICAgICAgaXNFeGFjdEFjdGl2ZTogY2xhc3Nlc1tleGFjdEFjdGl2ZUNsYXNzXVxuICAgICAgfSk7XG5cbiAgICBpZiAoc2NvcGVkU2xvdCkge1xuICAgICAgaWYgKHNjb3BlZFNsb3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBzY29wZWRTbG90WzBdXG4gICAgICB9IGVsc2UgaWYgKHNjb3BlZFNsb3QubGVuZ3RoID4gMSB8fCAhc2NvcGVkU2xvdC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAoXCJSb3V0ZXJMaW5rIHdpdGggdG89XFxcIlwiICsgKHRoaXMucHJvcHMudG8pICsgXCJcXFwiIGlzIHRyeWluZyB0byB1c2UgYSBzY29wZWQgc2xvdCBidXQgaXQgZGlkbid0IHByb3ZpZGUgZXhhY3RseSBvbmUgY2hpbGQuXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NvcGVkU2xvdC5sZW5ndGggPT09IDAgPyBoKCkgOiBoKCdzcGFuJywge30sIHNjb3BlZFNsb3QpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFnID09PSAnYScpIHtcbiAgICAgIGRhdGEub24gPSBvbjtcbiAgICAgIGRhdGEuYXR0cnMgPSB7IGhyZWY6IGhyZWYgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmluZCB0aGUgZmlyc3QgPGE+IGNoaWxkIGFuZCBhcHBseSBsaXN0ZW5lciBhbmQgaHJlZlxuICAgICAgdmFyIGEgPSBmaW5kQW5jaG9yKHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICAgICAgaWYgKGEpIHtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgPGE+IGlzIGEgc3RhdGljIG5vZGVcbiAgICAgICAgYS5pc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICB2YXIgYURhdGEgPSAoYS5kYXRhID0gZXh0ZW5kKHt9LCBhLmRhdGEpKTtcbiAgICAgICAgYURhdGEub24gPSBhRGF0YS5vbiB8fCB7fTtcbiAgICAgICAgLy8gdHJhbnNmb3JtIGV4aXN0aW5nIGV2ZW50cyBpbiBib3RoIG9iamVjdHMgaW50byBhcnJheXMgc28gd2UgY2FuIHB1c2ggbGF0ZXJcbiAgICAgICAgZm9yICh2YXIgZXZlbnQgaW4gYURhdGEub24pIHtcbiAgICAgICAgICB2YXIgaGFuZGxlciQxID0gYURhdGEub25bZXZlbnRdO1xuICAgICAgICAgIGlmIChldmVudCBpbiBvbikge1xuICAgICAgICAgICAgYURhdGEub25bZXZlbnRdID0gQXJyYXkuaXNBcnJheShoYW5kbGVyJDEpID8gaGFuZGxlciQxIDogW2hhbmRsZXIkMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGVuZCBuZXcgbGlzdGVuZXJzIGZvciByb3V0ZXItbGlua1xuICAgICAgICBmb3IgKHZhciBldmVudCQxIGluIG9uKSB7XG4gICAgICAgICAgaWYgKGV2ZW50JDEgaW4gYURhdGEub24pIHtcbiAgICAgICAgICAgIC8vIG9uW2V2ZW50XSBpcyBhbHdheXMgYSBmdW5jdGlvblxuICAgICAgICAgICAgYURhdGEub25bZXZlbnQkMV0ucHVzaChvbltldmVudCQxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFEYXRhLm9uW2V2ZW50JDFdID0gaGFuZGxlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYUF0dHJzID0gKGEuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYS5kYXRhLmF0dHJzKSk7XG4gICAgICAgIGFBdHRycy5ocmVmID0gaHJlZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvZXNuJ3QgaGF2ZSA8YT4gY2hpbGQsIGFwcGx5IGxpc3RlbmVyIHRvIHNlbGZcbiAgICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKHRoaXMudGFnLCBkYXRhLCB0aGlzLiRzbG90cy5kZWZhdWx0KVxuICB9XG59O1xuXG5mdW5jdGlvbiBndWFyZEV2ZW50IChlKSB7XG4gIC8vIGRvbid0IHJlZGlyZWN0IHdpdGggY29udHJvbCBrZXlzXG4gIGlmIChlLm1ldGFLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkpIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgd2hlbiBwcmV2ZW50RGVmYXVsdCBjYWxsZWRcbiAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBvbiByaWdodCBjbGlja1xuICBpZiAoZS5idXR0b24gIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbiAhPT0gMCkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCBpZiBgdGFyZ2V0PVwiX2JsYW5rXCJgXG4gIGlmIChlLmN1cnJlbnRUYXJnZXQgJiYgZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSkge1xuICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKTtcbiAgICBpZiAoL1xcYl9ibGFua1xcYi9pLnRlc3QodGFyZ2V0KSkgeyByZXR1cm4gfVxuICB9XG4gIC8vIHRoaXMgbWF5IGJlIGEgV2VleCBldmVudCB3aGljaCBkb2Vzbid0IGhhdmUgdGhpcyBtZXRob2RcbiAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gZmluZEFuY2hvciAoY2hpbGRyZW4pIHtcbiAgaWYgKGNoaWxkcmVuKSB7XG4gICAgdmFyIGNoaWxkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoY2hpbGQudGFnID09PSAnYScpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgKGNoaWxkID0gZmluZEFuY2hvcihjaGlsZC5jaGlsZHJlbikpKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgX1Z1ZTtcblxuZnVuY3Rpb24gaW5zdGFsbCAoVnVlKSB7XG4gIGlmIChpbnN0YWxsLmluc3RhbGxlZCAmJiBfVnVlID09PSBWdWUpIHsgcmV0dXJuIH1cbiAgaW5zdGFsbC5pbnN0YWxsZWQgPSB0cnVlO1xuXG4gIF9WdWUgPSBWdWU7XG5cbiAgdmFyIGlzRGVmID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgIT09IHVuZGVmaW5lZDsgfTtcblxuICB2YXIgcmVnaXN0ZXJJbnN0YW5jZSA9IGZ1bmN0aW9uICh2bSwgY2FsbFZhbCkge1xuICAgIHZhciBpID0gdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICAgIGlmIChpc0RlZihpKSAmJiBpc0RlZihpID0gaS5kYXRhKSAmJiBpc0RlZihpID0gaS5yZWdpc3RlclJvdXRlSW5zdGFuY2UpKSB7XG4gICAgICBpKHZtLCBjYWxsVmFsKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLm1peGluKHtcbiAgICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgICBpZiAoaXNEZWYodGhpcy4kb3B0aW9ucy5yb3V0ZXIpKSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSB0aGlzO1xuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLiRvcHRpb25zLnJvdXRlcjtcbiAgICAgICAgdGhpcy5fcm91dGVyLmluaXQodGhpcyk7XG4gICAgICAgIFZ1ZS51dGlsLmRlZmluZVJlYWN0aXZlKHRoaXMsICdfcm91dGUnLCB0aGlzLl9yb3V0ZXIuaGlzdG9yeS5jdXJyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3JvdXRlclJvb3QgPSAodGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5fcm91dGVyUm9vdCkgfHwgdGhpcztcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVySW5zdGFuY2UodGhpcywgdGhpcyk7XG4gICAgfSxcbiAgICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCAoKSB7XG4gICAgICByZWdpc3Rlckluc3RhbmNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcm91dGVyJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlciB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHJvdXRlJywge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX3JvdXRlclJvb3QuX3JvdXRlIH1cbiAgfSk7XG5cbiAgVnVlLmNvbXBvbmVudCgnUm91dGVyVmlldycsIFZpZXcpO1xuICBWdWUuY29tcG9uZW50KCdSb3V0ZXJMaW5rJywgTGluayk7XG5cbiAgdmFyIHN0cmF0cyA9IFZ1ZS5jb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuICAvLyB1c2UgdGhlIHNhbWUgaG9vayBtZXJnaW5nIHN0cmF0ZWd5IGZvciByb3V0ZSBob29rc1xuICBzdHJhdHMuYmVmb3JlUm91dGVFbnRlciA9IHN0cmF0cy5iZWZvcmVSb3V0ZUxlYXZlID0gc3RyYXRzLmJlZm9yZVJvdXRlVXBkYXRlID0gc3RyYXRzLmNyZWF0ZWQ7XG59XG5cbi8qICAqL1xuXG52YXIgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZU1hcCAoXG4gIHJvdXRlcyxcbiAgb2xkUGF0aExpc3QsXG4gIG9sZFBhdGhNYXAsXG4gIG9sZE5hbWVNYXBcbikge1xuICAvLyB0aGUgcGF0aCBsaXN0IGlzIHVzZWQgdG8gY29udHJvbCBwYXRoIG1hdGNoaW5nIHByaW9yaXR5XG4gIHZhciBwYXRoTGlzdCA9IG9sZFBhdGhMaXN0IHx8IFtdO1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIHBhdGhNYXAgPSBvbGRQYXRoTWFwIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgbmFtZU1hcCA9IG9sZE5hbWVNYXAgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICByb3V0ZXMuZm9yRWFjaChmdW5jdGlvbiAocm91dGUpIHtcbiAgICBhZGRSb3V0ZVJlY29yZChwYXRoTGlzdCwgcGF0aE1hcCwgbmFtZU1hcCwgcm91dGUpO1xuICB9KTtcblxuICAvLyBlbnN1cmUgd2lsZGNhcmQgcm91dGVzIGFyZSBhbHdheXMgYXQgdGhlIGVuZFxuICBmb3IgKHZhciBpID0gMCwgbCA9IHBhdGhMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChwYXRoTGlzdFtpXSA9PT0gJyonKSB7XG4gICAgICBwYXRoTGlzdC5wdXNoKHBhdGhMaXN0LnNwbGljZShpLCAxKVswXSk7XG4gICAgICBsLS07XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgLy8gd2FybiBpZiByb3V0ZXMgZG8gbm90IGluY2x1ZGUgbGVhZGluZyBzbGFzaGVzXG4gICAgdmFyIGZvdW5kID0gcGF0aExpc3RcbiAgICAvLyBjaGVjayBmb3IgbWlzc2luZyBsZWFkaW5nIHNsYXNoXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwYXRoKSB7IHJldHVybiBwYXRoICYmIHBhdGguY2hhckF0KDApICE9PSAnKicgJiYgcGF0aC5jaGFyQXQoMCkgIT09ICcvJzsgfSk7XG5cbiAgICBpZiAoZm91bmQubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHBhdGhOYW1lcyA9IGZvdW5kLm1hcChmdW5jdGlvbiAocGF0aCkgeyByZXR1cm4gKFwiLSBcIiArIHBhdGgpOyB9KS5qb2luKCdcXG4nKTtcbiAgICAgIHdhcm4oZmFsc2UsIChcIk5vbi1uZXN0ZWQgcm91dGVzIG11c3QgaW5jbHVkZSBhIGxlYWRpbmcgc2xhc2ggY2hhcmFjdGVyLiBGaXggdGhlIGZvbGxvd2luZyByb3V0ZXM6IFxcblwiICsgcGF0aE5hbWVzKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoTGlzdDogcGF0aExpc3QsXG4gICAgcGF0aE1hcDogcGF0aE1hcCxcbiAgICBuYW1lTWFwOiBuYW1lTWFwXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkUm91dGVSZWNvcmQgKFxuICBwYXRoTGlzdCxcbiAgcGF0aE1hcCxcbiAgbmFtZU1hcCxcbiAgcm91dGUsXG4gIHBhcmVudCxcbiAgbWF0Y2hBc1xuKSB7XG4gIHZhciBwYXRoID0gcm91dGUucGF0aDtcbiAgdmFyIG5hbWUgPSByb3V0ZS5uYW1lO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChwYXRoICE9IG51bGwsIFwiXFxcInBhdGhcXFwiIGlzIHJlcXVpcmVkIGluIGEgcm91dGUgY29uZmlndXJhdGlvbi5cIik7XG4gICAgYXNzZXJ0KFxuICAgICAgdHlwZW9mIHJvdXRlLmNvbXBvbmVudCAhPT0gJ3N0cmluZycsXG4gICAgICBcInJvdXRlIGNvbmZpZyBcXFwiY29tcG9uZW50XFxcIiBmb3IgcGF0aDogXCIgKyAoU3RyaW5nKFxuICAgICAgICBwYXRoIHx8IG5hbWVcbiAgICAgICkpICsgXCIgY2Fubm90IGJlIGEgXCIgKyBcInN0cmluZyBpZC4gVXNlIGFuIGFjdHVhbCBjb21wb25lbnQgaW5zdGVhZC5cIlxuICAgICk7XG4gIH1cblxuICB2YXIgcGF0aFRvUmVnZXhwT3B0aW9ucyA9XG4gICAgcm91dGUucGF0aFRvUmVnZXhwT3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoLCBwYXJlbnQsIHBhdGhUb1JlZ2V4cE9wdGlvbnMuc3RyaWN0KTtcblxuICBpZiAodHlwZW9mIHJvdXRlLmNhc2VTZW5zaXRpdmUgPT09ICdib29sZWFuJykge1xuICAgIHBhdGhUb1JlZ2V4cE9wdGlvbnMuc2Vuc2l0aXZlID0gcm91dGUuY2FzZVNlbnNpdGl2ZTtcbiAgfVxuXG4gIHZhciByZWNvcmQgPSB7XG4gICAgcGF0aDogbm9ybWFsaXplZFBhdGgsXG4gICAgcmVnZXg6IGNvbXBpbGVSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRQYXRoLCBwYXRoVG9SZWdleHBPcHRpb25zKSxcbiAgICBjb21wb25lbnRzOiByb3V0ZS5jb21wb25lbnRzIHx8IHsgZGVmYXVsdDogcm91dGUuY29tcG9uZW50IH0sXG4gICAgaW5zdGFuY2VzOiB7fSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIG1hdGNoQXM6IG1hdGNoQXMsXG4gICAgcmVkaXJlY3Q6IHJvdXRlLnJlZGlyZWN0LFxuICAgIGJlZm9yZUVudGVyOiByb3V0ZS5iZWZvcmVFbnRlcixcbiAgICBtZXRhOiByb3V0ZS5tZXRhIHx8IHt9LFxuICAgIHByb3BzOlxuICAgICAgcm91dGUucHJvcHMgPT0gbnVsbFxuICAgICAgICA/IHt9XG4gICAgICAgIDogcm91dGUuY29tcG9uZW50c1xuICAgICAgICAgID8gcm91dGUucHJvcHNcbiAgICAgICAgICA6IHsgZGVmYXVsdDogcm91dGUucHJvcHMgfVxuICB9O1xuXG4gIGlmIChyb3V0ZS5jaGlsZHJlbikge1xuICAgIC8vIFdhcm4gaWYgcm91dGUgaXMgbmFtZWQsIGRvZXMgbm90IHJlZGlyZWN0IGFuZCBoYXMgYSBkZWZhdWx0IGNoaWxkIHJvdXRlLlxuICAgIC8vIElmIHVzZXJzIG5hdmlnYXRlIHRvIHRoaXMgcm91dGUgYnkgbmFtZSwgdGhlIGRlZmF1bHQgY2hpbGQgd2lsbFxuICAgIC8vIG5vdCBiZSByZW5kZXJlZCAoR0ggSXNzdWUgIzYyOSlcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKFxuICAgICAgICByb3V0ZS5uYW1lICYmXG4gICAgICAgICFyb3V0ZS5yZWRpcmVjdCAmJlxuICAgICAgICByb3V0ZS5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gL15cXC8/JC8udGVzdChjaGlsZC5wYXRoKTsgfSlcbiAgICAgICkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwiTmFtZWQgUm91dGUgJ1wiICsgKHJvdXRlLm5hbWUpICsgXCInIGhhcyBhIGRlZmF1bHQgY2hpbGQgcm91dGUuIFwiICtcbiAgICAgICAgICAgIFwiV2hlbiBuYXZpZ2F0aW5nIHRvIHRoaXMgbmFtZWQgcm91dGUgKDp0bz1cXFwie25hbWU6ICdcIiArIChyb3V0ZS5uYW1lKSArIFwiJ1xcXCIpLCBcIiArXG4gICAgICAgICAgICBcInRoZSBkZWZhdWx0IGNoaWxkIHJvdXRlIHdpbGwgbm90IGJlIHJlbmRlcmVkLiBSZW1vdmUgdGhlIG5hbWUgZnJvbSBcIiArXG4gICAgICAgICAgICBcInRoaXMgcm91dGUgYW5kIHVzZSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBjaGlsZCByb3V0ZSBmb3IgbmFtZWQgXCIgK1xuICAgICAgICAgICAgXCJsaW5rcyBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJvdXRlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGRNYXRjaEFzID0gbWF0Y2hBc1xuICAgICAgICA/IGNsZWFuUGF0aCgobWF0Y2hBcyArIFwiL1wiICsgKGNoaWxkLnBhdGgpKSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBhZGRSb3V0ZVJlY29yZChwYXRoTGlzdCwgcGF0aE1hcCwgbmFtZU1hcCwgY2hpbGQsIHJlY29yZCwgY2hpbGRNYXRjaEFzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICghcGF0aE1hcFtyZWNvcmQucGF0aF0pIHtcbiAgICBwYXRoTGlzdC5wdXNoKHJlY29yZC5wYXRoKTtcbiAgICBwYXRoTWFwW3JlY29yZC5wYXRoXSA9IHJlY29yZDtcbiAgfVxuXG4gIGlmIChyb3V0ZS5hbGlhcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGFsaWFzZXMgPSBBcnJheS5pc0FycmF5KHJvdXRlLmFsaWFzKSA/IHJvdXRlLmFsaWFzIDogW3JvdXRlLmFsaWFzXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsaWFzZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBhbGlhcyA9IGFsaWFzZXNbaV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhbGlhcyA9PT0gcGF0aCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIChcIkZvdW5kIGFuIGFsaWFzIHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHBhdGg6IFxcXCJcIiArIHBhdGggKyBcIlxcXCIuIFlvdSBoYXZlIHRvIHJlbW92ZSB0aGF0IGFsaWFzLiBJdCB3aWxsIGJlIGlnbm9yZWQgaW4gZGV2ZWxvcG1lbnQuXCIpXG4gICAgICAgICk7XG4gICAgICAgIC8vIHNraXAgaW4gZGV2IHRvIG1ha2UgaXQgd29ya1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgYWxpYXNSb3V0ZSA9IHtcbiAgICAgICAgcGF0aDogYWxpYXMsXG4gICAgICAgIGNoaWxkcmVuOiByb3V0ZS5jaGlsZHJlblxuICAgICAgfTtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKFxuICAgICAgICBwYXRoTGlzdCxcbiAgICAgICAgcGF0aE1hcCxcbiAgICAgICAgbmFtZU1hcCxcbiAgICAgICAgYWxpYXNSb3V0ZSxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICByZWNvcmQucGF0aCB8fCAnLycgLy8gbWF0Y2hBc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAobmFtZSkge1xuICAgIGlmICghbmFtZU1hcFtuYW1lXSkge1xuICAgICAgbmFtZU1hcFtuYW1lXSA9IHJlY29yZDtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIW1hdGNoQXMpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBcIkR1cGxpY2F0ZSBuYW1lZCByb3V0ZXMgZGVmaW5pdGlvbjogXCIgK1xuICAgICAgICAgIFwieyBuYW1lOiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLCBwYXRoOiBcXFwiXCIgKyAocmVjb3JkLnBhdGgpICsgXCJcXFwiIH1cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZVJvdXRlUmVnZXggKFxuICBwYXRoLFxuICBwYXRoVG9SZWdleHBPcHRpb25zXG4pIHtcbiAgdmFyIHJlZ2V4ID0gcGF0aFRvUmVnZXhwXzEocGF0aCwgW10sIHBhdGhUb1JlZ2V4cE9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZWdleC5rZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgd2FybihcbiAgICAgICAgIWtleXNba2V5Lm5hbWVdLFxuICAgICAgICAoXCJEdXBsaWNhdGUgcGFyYW0ga2V5cyBpbiByb3V0ZSB3aXRoIHBhdGg6IFxcXCJcIiArIHBhdGggKyBcIlxcXCJcIilcbiAgICAgICk7XG4gICAgICBrZXlzW2tleS5uYW1lXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlZ2V4XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGggKFxuICBwYXRoLFxuICBwYXJlbnQsXG4gIHN0cmljdFxuKSB7XG4gIGlmICghc3RyaWN0KSB7IHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7IH1cbiAgaWYgKHBhdGhbMF0gPT09ICcvJykgeyByZXR1cm4gcGF0aCB9XG4gIGlmIChwYXJlbnQgPT0gbnVsbCkgeyByZXR1cm4gcGF0aCB9XG4gIHJldHVybiBjbGVhblBhdGgoKChwYXJlbnQucGF0aCkgKyBcIi9cIiArIHBhdGgpKVxufVxuXG4vKiAgKi9cblxuXG5cbmZ1bmN0aW9uIGNyZWF0ZU1hdGNoZXIgKFxuICByb3V0ZXMsXG4gIHJvdXRlclxuKSB7XG4gIHZhciByZWYgPSBjcmVhdGVSb3V0ZU1hcChyb3V0ZXMpO1xuICB2YXIgcGF0aExpc3QgPSByZWYucGF0aExpc3Q7XG4gIHZhciBwYXRoTWFwID0gcmVmLnBhdGhNYXA7XG4gIHZhciBuYW1lTWFwID0gcmVmLm5hbWVNYXA7XG5cbiAgZnVuY3Rpb24gYWRkUm91dGVzIChyb3V0ZXMpIHtcbiAgICBjcmVhdGVSb3V0ZU1hcChyb3V0ZXMsIHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoIChcbiAgICByYXcsXG4gICAgY3VycmVudFJvdXRlLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHJhdywgY3VycmVudFJvdXRlLCBmYWxzZSwgcm91dGVyKTtcbiAgICB2YXIgbmFtZSA9IGxvY2F0aW9uLm5hbWU7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgdmFyIHJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKHJlY29yZCwgKFwiUm91dGUgd2l0aCBuYW1lICdcIiArIG5hbWUgKyBcIicgZG9lcyBub3QgZXhpc3RcIikpO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWNvcmQpIHsgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbikgfVxuICAgICAgdmFyIHBhcmFtTmFtZXMgPSByZWNvcmQucmVnZXgua2V5c1xuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICFrZXkub3B0aW9uYWw7IH0pXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5Lm5hbWU7IH0pO1xuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Um91dGUgJiYgdHlwZW9mIGN1cnJlbnRSb3V0ZS5wYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50Um91dGUucGFyYW1zKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGxvY2F0aW9uLnBhcmFtcykgJiYgcGFyYW1OYW1lcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyYW1zW2tleV0gPSBjdXJyZW50Um91dGUucGFyYW1zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvY2F0aW9uLnBhdGggPSBmaWxsUGFyYW1zKHJlY29yZC5wYXRoLCBsb2NhdGlvbi5wYXJhbXMsIChcIm5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCJcIikpO1xuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShyZWNvcmQsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBhdGgpIHtcbiAgICAgIGxvY2F0aW9uLnBhcmFtcyA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGF0aCA9IHBhdGhMaXN0W2ldO1xuICAgICAgICB2YXIgcmVjb3JkJDEgPSBwYXRoTWFwW3BhdGhdO1xuICAgICAgICBpZiAobWF0Y2hSb3V0ZShyZWNvcmQkMS5yZWdleCwgbG9jYXRpb24ucGF0aCwgbG9jYXRpb24ucGFyYW1zKSkge1xuICAgICAgICAgIHJldHVybiBfY3JlYXRlUm91dGUocmVjb3JkJDEsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBubyBtYXRjaFxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiByZWRpcmVjdCAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uXG4gICkge1xuICAgIHZhciBvcmlnaW5hbFJlZGlyZWN0ID0gcmVjb3JkLnJlZGlyZWN0O1xuICAgIHZhciByZWRpcmVjdCA9IHR5cGVvZiBvcmlnaW5hbFJlZGlyZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICA/IG9yaWdpbmFsUmVkaXJlY3QoY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgbnVsbCwgcm91dGVyKSlcbiAgICAgIDogb3JpZ2luYWxSZWRpcmVjdDtcblxuICAgIGlmICh0eXBlb2YgcmVkaXJlY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZWRpcmVjdCA9IHsgcGF0aDogcmVkaXJlY3QgfTtcbiAgICB9XG5cbiAgICBpZiAoIXJlZGlyZWN0IHx8IHR5cGVvZiByZWRpcmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICB2YXIgcmUgPSByZWRpcmVjdDtcbiAgICB2YXIgbmFtZSA9IHJlLm5hbWU7XG4gICAgdmFyIHBhdGggPSByZS5wYXRoO1xuICAgIHZhciBxdWVyeSA9IGxvY2F0aW9uLnF1ZXJ5O1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgcGFyYW1zID0gbG9jYXRpb24ucGFyYW1zO1xuICAgIHF1ZXJ5ID0gcmUuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5JykgPyByZS5xdWVyeSA6IHF1ZXJ5O1xuICAgIGhhc2ggPSByZS5oYXNPd25Qcm9wZXJ0eSgnaGFzaCcpID8gcmUuaGFzaCA6IGhhc2g7XG4gICAgcGFyYW1zID0gcmUuaGFzT3duUHJvcGVydHkoJ3BhcmFtcycpID8gcmUucGFyYW1zIDogcGFyYW1zO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIC8vIHJlc29sdmVkIG5hbWVkIGRpcmVjdFxuICAgICAgdmFyIHRhcmdldFJlY29yZCA9IG5hbWVNYXBbbmFtZV07XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQodGFyZ2V0UmVjb3JkLCAoXCJyZWRpcmVjdCBmYWlsZWQ6IG5hbWVkIHJvdXRlIFxcXCJcIiArIG5hbWUgKyBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgfSwgdW5kZWZpbmVkLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKHBhdGgpIHtcbiAgICAgIC8vIDEuIHJlc29sdmUgcmVsYXRpdmUgcmVkaXJlY3RcbiAgICAgIHZhciByYXdQYXRoID0gcmVzb2x2ZVJlY29yZFBhdGgocGF0aCwgcmVjb3JkKTtcbiAgICAgIC8vIDIuIHJlc29sdmUgcGFyYW1zXG4gICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInJlZGlyZWN0IHJvdXRlIHdpdGggcGF0aCBcXFwiXCIgKyByYXdQYXRoICsgXCJcXFwiXCIpKTtcbiAgICAgIC8vIDMuIHJlbWF0Y2ggd2l0aCBleGlzdGluZyBxdWVyeSBhbmQgaGFzaFxuICAgICAgcmV0dXJuIG1hdGNoKHtcbiAgICAgICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICBoYXNoOiBoYXNoXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKGZhbHNlLCAoXCJpbnZhbGlkIHJlZGlyZWN0IG9wdGlvbjogXCIgKyAoSlNPTi5zdHJpbmdpZnkocmVkaXJlY3QpKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhbGlhcyAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIG1hdGNoQXNcbiAgKSB7XG4gICAgdmFyIGFsaWFzZWRQYXRoID0gZmlsbFBhcmFtcyhtYXRjaEFzLCBsb2NhdGlvbi5wYXJhbXMsIChcImFsaWFzZWQgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIG1hdGNoQXMgKyBcIlxcXCJcIikpO1xuICAgIHZhciBhbGlhc2VkTWF0Y2ggPSBtYXRjaCh7XG4gICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgIHBhdGg6IGFsaWFzZWRQYXRoXG4gICAgfSk7XG4gICAgaWYgKGFsaWFzZWRNYXRjaCkge1xuICAgICAgdmFyIG1hdGNoZWQgPSBhbGlhc2VkTWF0Y2gubWF0Y2hlZDtcbiAgICAgIHZhciBhbGlhc2VkUmVjb3JkID0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdO1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0gYWxpYXNlZE1hdGNoLnBhcmFtcztcbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUoYWxpYXNlZFJlY29yZCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlUm91dGUgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvbixcbiAgICByZWRpcmVjdGVkRnJvbVxuICApIHtcbiAgICBpZiAocmVjb3JkICYmIHJlY29yZC5yZWRpcmVjdCkge1xuICAgICAgcmV0dXJuIHJlZGlyZWN0KHJlY29yZCwgcmVkaXJlY3RlZEZyb20gfHwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLm1hdGNoQXMpIHtcbiAgICAgIHJldHVybiBhbGlhcyhyZWNvcmQsIGxvY2F0aW9uLCByZWNvcmQubWF0Y2hBcylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tLCByb3V0ZXIpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoOiBtYXRjaCxcbiAgICBhZGRSb3V0ZXM6IGFkZFJvdXRlc1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoUm91dGUgKFxuICByZWdleCxcbiAgcGF0aCxcbiAgcGFyYW1zXG4pIHtcbiAgdmFyIG0gPSBwYXRoLm1hdGNoKHJlZ2V4KTtcblxuICBpZiAoIW0pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBtLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGtleSA9IHJlZ2V4LmtleXNbaSAtIDFdO1xuICAgIHZhciB2YWwgPSB0eXBlb2YgbVtpXSA9PT0gJ3N0cmluZycgPyBkZWNvZGVVUklDb21wb25lbnQobVtpXSkgOiBtW2ldO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIC8vIEZpeCAjMTk5NDogdXNpbmcgKiB3aXRoIHByb3BzOiB0cnVlIGdlbmVyYXRlcyBhIHBhcmFtIG5hbWVkIDBcbiAgICAgIHBhcmFtc1trZXkubmFtZSB8fCAncGF0aE1hdGNoJ10gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVJlY29yZFBhdGggKHBhdGgsIHJlY29yZCkge1xuICByZXR1cm4gcmVzb2x2ZVBhdGgocGF0aCwgcmVjb3JkLnBhcmVudCA/IHJlY29yZC5wYXJlbnQucGF0aCA6ICcvJywgdHJ1ZSlcbn1cblxuLyogICovXG5cbi8vIHVzZSBVc2VyIFRpbWluZyBhcGkgKGlmIHByZXNlbnQpIGZvciBtb3JlIGFjY3VyYXRlIGtleSBwcmVjaXNpb25cbnZhciBUaW1lID1cbiAgaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZSAmJiB3aW5kb3cucGVyZm9ybWFuY2Uubm93XG4gICAgPyB3aW5kb3cucGVyZm9ybWFuY2VcbiAgICA6IERhdGU7XG5cbmZ1bmN0aW9uIGdlblN0YXRlS2V5ICgpIHtcbiAgcmV0dXJuIFRpbWUubm93KCkudG9GaXhlZCgzKVxufVxuXG52YXIgX2tleSA9IGdlblN0YXRlS2V5KCk7XG5cbmZ1bmN0aW9uIGdldFN0YXRlS2V5ICgpIHtcbiAgcmV0dXJuIF9rZXlcbn1cblxuZnVuY3Rpb24gc2V0U3RhdGVLZXkgKGtleSkge1xuICByZXR1cm4gKF9rZXkgPSBrZXkpXG59XG5cbi8qICAqL1xuXG52YXIgcG9zaXRpb25TdG9yZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIHNldHVwU2Nyb2xsICgpIHtcbiAgLy8gRml4IGZvciAjMTU4NSBmb3IgRmlyZWZveFxuICAvLyBGaXggZm9yICMyMTk1IEFkZCBvcHRpb25hbCB0aGlyZCBhdHRyaWJ1dGUgdG8gd29ya2Fyb3VuZCBhIGJ1ZyBpbiBzYWZhcmkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjY3OFxuICAvLyBGaXggZm9yICMyNzc0IFN1cHBvcnQgZm9yIGFwcHMgbG9hZGVkIGZyb20gV2luZG93cyBmaWxlIHNoYXJlcyBub3QgbWFwcGVkIHRvIG5ldHdvcmsgZHJpdmVzOiByZXBsYWNlZCBsb2NhdGlvbi5vcmlnaW4gd2l0aFxuICAvLyB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RcbiAgLy8gbG9jYXRpb24uaG9zdCBjb250YWlucyB0aGUgcG9ydCBhbmQgbG9jYXRpb24uaG9zdG5hbWUgZG9lc24ndFxuICB2YXIgcHJvdG9jb2xBbmRQYXRoID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xuICB2YXIgYWJzb2x1dGVQYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZShwcm90b2NvbEFuZFBhdGgsICcnKTtcbiAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBnZXRTdGF0ZUtleSgpIH0sICcnLCBhYnNvbHV0ZVBhdGgpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBmdW5jdGlvbiAoZSkge1xuICAgIHNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICAgIGlmIChlLnN0YXRlICYmIGUuc3RhdGUua2V5KSB7XG4gICAgICBzZXRTdGF0ZUtleShlLnN0YXRlLmtleSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsIChcbiAgcm91dGVyLFxuICB0byxcbiAgZnJvbSxcbiAgaXNQb3Bcbikge1xuICBpZiAoIXJvdXRlci5hcHApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiZWhhdmlvciA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICBpZiAoIWJlaGF2aW9yKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydCh0eXBlb2YgYmVoYXZpb3IgPT09ICdmdW5jdGlvbicsIFwic2Nyb2xsQmVoYXZpb3IgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgLy8gd2FpdCB1bnRpbCByZS1yZW5kZXIgZmluaXNoZXMgYmVmb3JlIHNjcm9sbGluZ1xuICByb3V0ZXIuYXBwLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gZ2V0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICB2YXIgc2hvdWxkU2Nyb2xsID0gYmVoYXZpb3IuY2FsbChcbiAgICAgIHJvdXRlcixcbiAgICAgIHRvLFxuICAgICAgZnJvbSxcbiAgICAgIGlzUG9wID8gcG9zaXRpb24gOiBudWxsXG4gICAgKTtcblxuICAgIGlmICghc2hvdWxkU2Nyb2xsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNob3VsZFNjcm9sbC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzaG91bGRTY3JvbGxcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgIHNjcm9sbFRvUG9zaXRpb24oKHNob3VsZFNjcm9sbCksIHBvc2l0aW9uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBlcnIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2Nyb2xsVG9Qb3NpdGlvbihzaG91bGRTY3JvbGwsIHBvc2l0aW9uKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzYXZlU2Nyb2xsUG9zaXRpb24gKCkge1xuICB2YXIga2V5ID0gZ2V0U3RhdGVLZXkoKTtcbiAgaWYgKGtleSkge1xuICAgIHBvc2l0aW9uU3RvcmVba2V5XSA9IHtcbiAgICAgIHg6IHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICAgIHk6IHdpbmRvdy5wYWdlWU9mZnNldFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsUG9zaXRpb24gKCkge1xuICB2YXIga2V5ID0gZ2V0U3RhdGVLZXkoKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBwb3NpdGlvblN0b3JlW2tleV1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50UG9zaXRpb24gKGVsLCBvZmZzZXQpIHtcbiAgdmFyIGRvY0VsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgZG9jUmVjdCA9IGRvY0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgeDogZWxSZWN0LmxlZnQgLSBkb2NSZWN0LmxlZnQgLSBvZmZzZXQueCxcbiAgICB5OiBlbFJlY3QudG9wIC0gZG9jUmVjdC50b3AgLSBvZmZzZXQueVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRQb3NpdGlvbiAob2JqKSB7XG4gIHJldHVybiBpc051bWJlcihvYmoueCkgfHwgaXNOdW1iZXIob2JqLnkpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBvc2l0aW9uIChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBpc051bWJlcihvYmoueCkgPyBvYmoueCA6IHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICB5OiBpc051bWJlcihvYmoueSkgPyBvYmoueSA6IHdpbmRvdy5wYWdlWU9mZnNldFxuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldCAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgeDogaXNOdW1iZXIob2JqLngpID8gb2JqLnggOiAwLFxuICAgIHk6IGlzTnVtYmVyKG9iai55KSA/IG9iai55IDogMFxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyICh2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ251bWJlcidcbn1cblxudmFyIGhhc2hTdGFydHNXaXRoTnVtYmVyUkUgPSAvXiNcXGQvO1xuXG5mdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uIChzaG91bGRTY3JvbGwsIHBvc2l0aW9uKSB7XG4gIHZhciBpc09iamVjdCA9IHR5cGVvZiBzaG91bGRTY3JvbGwgPT09ICdvYmplY3QnO1xuICBpZiAoaXNPYmplY3QgJiYgdHlwZW9mIHNob3VsZFNjcm9sbC5zZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBnZXRFbGVtZW50QnlJZCB3b3VsZCBzdGlsbCBmYWlsIGlmIHRoZSBzZWxlY3RvciBjb250YWlucyBhIG1vcmUgY29tcGxpY2F0ZWQgcXVlcnkgbGlrZSAjbWFpbltkYXRhLWF0dHJdXG4gICAgLy8gYnV0IGF0IHRoZSBzYW1lIHRpbWUsIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIHNlbGVjdCBhbiBlbGVtZW50IHdpdGggYW4gaWQgYW5kIGFuIGV4dHJhIHNlbGVjdG9yXG4gICAgdmFyIGVsID0gaGFzaFN0YXJ0c1dpdGhOdW1iZXJSRS50ZXN0KHNob3VsZFNjcm9sbC5zZWxlY3RvcikgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNob3VsZFNjcm9sbC5zZWxlY3Rvci5zbGljZSgxKSkgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2hvdWxkU2Nyb2xsLnNlbGVjdG9yKTtcblxuICAgIGlmIChlbCkge1xuICAgICAgdmFyIG9mZnNldCA9XG4gICAgICAgIHNob3VsZFNjcm9sbC5vZmZzZXQgJiYgdHlwZW9mIHNob3VsZFNjcm9sbC5vZmZzZXQgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBzaG91bGRTY3JvbGwub2Zmc2V0XG4gICAgICAgICAgOiB7fTtcbiAgICAgIG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldChvZmZzZXQpO1xuICAgICAgcG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkUG9zaXRpb24oc2hvdWxkU2Nyb2xsKSkge1xuICAgICAgcG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihzaG91bGRTY3JvbGwpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCAmJiBpc1ZhbGlkUG9zaXRpb24oc2hvdWxkU2Nyb2xsKSkge1xuICAgIHBvc2l0aW9uID0gbm9ybWFsaXplUG9zaXRpb24oc2hvdWxkU2Nyb2xsKTtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbikge1xuICAgIHdpbmRvdy5zY3JvbGxUbyhwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHN1cHBvcnRzUHVzaFN0YXRlID1cbiAgaW5Ccm93c2VyICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICBpZiAoXG4gICAgICAodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fCB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiZcbiAgICAgIHVhLmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEgJiZcbiAgICAgIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJlxuICAgICAgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5ICYmICdwdXNoU3RhdGUnIGluIHdpbmRvdy5oaXN0b3J5XG4gIH0pKCk7XG5cbmZ1bmN0aW9uIHB1c2hTdGF0ZSAodXJsLCByZXBsYWNlKSB7XG4gIHNhdmVTY3JvbGxQb3NpdGlvbigpO1xuICAvLyB0cnkuLi5jYXRjaCB0aGUgcHVzaFN0YXRlIGNhbGwgdG8gZ2V0IGFyb3VuZCBTYWZhcmlcbiAgLy8gRE9NIEV4Y2VwdGlvbiAxOCB3aGVyZSBpdCBsaW1pdHMgdG8gMTAwIHB1c2hTdGF0ZSBjYWxsc1xuICB2YXIgaGlzdG9yeSA9IHdpbmRvdy5oaXN0b3J5O1xuICB0cnkge1xuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IGtleTogZ2V0U3RhdGVLZXkoKSB9LCAnJywgdXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoeyBrZXk6IHNldFN0YXRlS2V5KGdlblN0YXRlS2V5KCkpIH0sICcnLCB1cmwpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbltyZXBsYWNlID8gJ3JlcGxhY2UnIDogJ2Fzc2lnbiddKHVybCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZVN0YXRlICh1cmwpIHtcbiAgcHVzaFN0YXRlKHVybCwgdHJ1ZSk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBydW5RdWV1ZSAocXVldWUsIGZuLCBjYikge1xuICB2YXIgc3RlcCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmIChpbmRleCA+PSBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIGNiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWV1ZVtpbmRleF0pIHtcbiAgICAgICAgZm4ocXVldWVbaW5kZXhdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc3RlcChpbmRleCArIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXAoaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHN0ZXAoMCk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnRzIChtYXRjaGVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodG8sIGZyb20sIG5leHQpIHtcbiAgICB2YXIgaGFzQXN5bmMgPSBmYWxzZTtcbiAgICB2YXIgcGVuZGluZyA9IDA7XG4gICAgdmFyIGVycm9yID0gbnVsbDtcblxuICAgIGZsYXRNYXBDb21wb25lbnRzKG1hdGNoZWQsIGZ1bmN0aW9uIChkZWYsIF8sIG1hdGNoLCBrZXkpIHtcbiAgICAgIC8vIGlmIGl0J3MgYSBmdW5jdGlvbiBhbmQgZG9lc24ndCBoYXZlIGNpZCBhdHRhY2hlZCxcbiAgICAgIC8vIGFzc3VtZSBpdCdzIGFuIGFzeW5jIGNvbXBvbmVudCByZXNvbHZlIGZ1bmN0aW9uLlxuICAgICAgLy8gd2UgYXJlIG5vdCB1c2luZyBWdWUncyBkZWZhdWx0IGFzeW5jIHJlc29sdmluZyBtZWNoYW5pc20gYmVjYXVzZVxuICAgICAgLy8gd2Ugd2FudCB0byBoYWx0IHRoZSBuYXZpZ2F0aW9uIHVudGlsIHRoZSBpbmNvbWluZyBjb21wb25lbnQgaGFzIGJlZW5cbiAgICAgIC8vIHJlc29sdmVkLlxuICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZGVmLmNpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhhc0FzeW5jID0gdHJ1ZTtcbiAgICAgICAgcGVuZGluZysrO1xuXG4gICAgICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzb2x2ZWREZWYpIHtcbiAgICAgICAgICBpZiAoaXNFU01vZHVsZShyZXNvbHZlZERlZikpIHtcbiAgICAgICAgICAgIHJlc29sdmVkRGVmID0gcmVzb2x2ZWREZWYuZGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2F2ZSByZXNvbHZlZCBvbiBhc3luYyBmYWN0b3J5IGluIGNhc2UgaXQncyB1c2VkIGVsc2V3aGVyZVxuICAgICAgICAgIGRlZi5yZXNvbHZlZCA9IHR5cGVvZiByZXNvbHZlZERlZiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyByZXNvbHZlZERlZlxuICAgICAgICAgICAgOiBfVnVlLmV4dGVuZChyZXNvbHZlZERlZik7XG4gICAgICAgICAgbWF0Y2guY29tcG9uZW50c1trZXldID0gcmVzb2x2ZWREZWY7XG4gICAgICAgICAgcGVuZGluZy0tO1xuICAgICAgICAgIGlmIChwZW5kaW5nIDw9IDApIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZWplY3QgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICB2YXIgbXNnID0gXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQgXCIgKyBrZXkgKyBcIjogXCIgKyByZWFzb247XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKGZhbHNlLCBtc2cpO1xuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gaXNFcnJvcihyZWFzb24pXG4gICAgICAgICAgICAgID8gcmVhc29uXG4gICAgICAgICAgICAgIDogbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzID0gZGVmKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5ldyBzeW50YXggaW4gVnVlIDIuM1xuICAgICAgICAgICAgdmFyIGNvbXAgPSByZXMuY29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGNvbXAgJiYgdHlwZW9mIGNvbXAudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBjb21wLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghaGFzQXN5bmMpIHsgbmV4dCgpOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdE1hcENvbXBvbmVudHMgKFxuICBtYXRjaGVkLFxuICBmblxuKSB7XG4gIHJldHVybiBmbGF0dGVuKG1hdGNoZWQubWFwKGZ1bmN0aW9uIChtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGZuKFxuICAgICAgbS5jb21wb25lbnRzW2tleV0sXG4gICAgICBtLmluc3RhbmNlc1trZXldLFxuICAgICAgbSwga2V5XG4gICAgKTsgfSlcbiAgfSkpXG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4gKGFycikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJyKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICB0eXBlb2YgU3ltYm9sLnRvU3RyaW5nVGFnID09PSAnc3ltYm9sJztcblxuZnVuY3Rpb24gaXNFU01vZHVsZSAob2JqKSB7XG4gIHJldHVybiBvYmouX19lc01vZHVsZSB8fCAoaGFzU3ltYm9sICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJylcbn1cblxuLy8gaW4gV2VicGFjayAyLCByZXF1aXJlLmVuc3VyZSBub3cgYWxzbyByZXR1cm5zIGEgUHJvbWlzZVxuLy8gc28gdGhlIHJlc29sdmUvcmVqZWN0IGZ1bmN0aW9ucyBtYXkgZ2V0IGNhbGxlZCBhbiBleHRyYSB0aW1lXG4vLyBpZiB0aGUgdXNlciB1c2VzIGFuIGFycm93IGZ1bmN0aW9uIHNob3J0aGFuZCB0aGF0IGhhcHBlbnMgdG9cbi8vIHJldHVybiB0aGF0IFByb21pc2UuXG5mdW5jdGlvbiBvbmNlIChmbikge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgaWYgKGNhbGxlZCkgeyByZXR1cm4gfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gIH1cbn1cblxudmFyIE5hdmlnYXRpb25EdXBsaWNhdGVkID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoRXJyb3IpIHtcbiAgZnVuY3Rpb24gTmF2aWdhdGlvbkR1cGxpY2F0ZWQgKG5vcm1hbGl6ZWRMb2NhdGlvbikge1xuICAgIEVycm9yLmNhbGwodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5fbmFtZSA9ICdOYXZpZ2F0aW9uRHVwbGljYXRlZCc7XG4gICAgLy8gcGFzc2luZyB0aGUgbWVzc2FnZSB0byBzdXBlcigpIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIHRoZSB0cmFuc3BpbGVkIHZlcnNpb25cbiAgICB0aGlzLm1lc3NhZ2UgPSBcIk5hdmlnYXRpbmcgdG8gY3VycmVudCBsb2NhdGlvbiAoXFxcIlwiICsgKG5vcm1hbGl6ZWRMb2NhdGlvbi5mdWxsUGF0aCkgKyBcIlxcXCIpIGlzIG5vdCBhbGxvd2VkXCI7XG4gICAgLy8gYWRkIGEgc3RhY2sgcHJvcGVydHkgc28gc2VydmljZXMgbGlrZSBTZW50cnkgY2FuIGNvcnJlY3RseSBkaXNwbGF5IGl0XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzdGFjaycsIHtcbiAgICAgIHZhbHVlOiBuZXcgRXJyb3IoKS5zdGFjayxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgLy8gd2UgY291bGQgYWxzbyBoYXZlIHVzZWRcbiAgICAvLyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKVxuICAgIC8vIGJ1dCBpdCBvbmx5IGV4aXN0cyBvbiBub2RlIGFuZCBjaHJvbWVcbiAgfVxuXG4gIGlmICggRXJyb3IgKSBOYXZpZ2F0aW9uRHVwbGljYXRlZC5fX3Byb3RvX18gPSBFcnJvcjtcbiAgTmF2aWdhdGlvbkR1cGxpY2F0ZWQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggRXJyb3IgJiYgRXJyb3IucHJvdG90eXBlICk7XG4gIE5hdmlnYXRpb25EdXBsaWNhdGVkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5hdmlnYXRpb25EdXBsaWNhdGVkO1xuXG4gIHJldHVybiBOYXZpZ2F0aW9uRHVwbGljYXRlZDtcbn0oRXJyb3IpKTtcblxuLy8gc3VwcG9ydCBJRTlcbk5hdmlnYXRpb25EdXBsaWNhdGVkLl9uYW1lID0gJ05hdmlnYXRpb25EdXBsaWNhdGVkJztcblxuLyogICovXG5cbnZhciBIaXN0b3J5ID0gZnVuY3Rpb24gSGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gIHRoaXMucm91dGVyID0gcm91dGVyO1xuICB0aGlzLmJhc2UgPSBub3JtYWxpemVCYXNlKGJhc2UpO1xuICAvLyBzdGFydCB3aXRoIGEgcm91dGUgb2JqZWN0IHRoYXQgc3RhbmRzIGZvciBcIm5vd2hlcmVcIlxuICB0aGlzLmN1cnJlbnQgPSBTVEFSVDtcbiAgdGhpcy5wZW5kaW5nID0gbnVsbDtcbiAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICB0aGlzLnJlYWR5Q2JzID0gW107XG4gIHRoaXMucmVhZHlFcnJvckNicyA9IFtdO1xuICB0aGlzLmVycm9yQ2JzID0gW107XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5saXN0ZW4gPSBmdW5jdGlvbiBsaXN0ZW4gKGNiKSB7XG4gIHRoaXMuY2IgPSBjYjtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLm9uUmVhZHkgPSBmdW5jdGlvbiBvblJlYWR5IChjYiwgZXJyb3JDYikge1xuICBpZiAodGhpcy5yZWFkeSkge1xuICAgIGNiKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZWFkeUNicy5wdXNoKGNiKTtcbiAgICBpZiAoZXJyb3JDYikge1xuICAgICAgdGhpcy5yZWFkeUVycm9yQ2JzLnB1c2goZXJyb3JDYik7XG4gICAgfVxuICB9XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gb25FcnJvciAoZXJyb3JDYikge1xuICB0aGlzLmVycm9yQ2JzLnB1c2goZXJyb3JDYik7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS50cmFuc2l0aW9uVG8gPSBmdW5jdGlvbiB0cmFuc2l0aW9uVG8gKFxuICBsb2NhdGlvbixcbiAgb25Db21wbGV0ZSxcbiAgb25BYm9ydFxuKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHJvdXRlID0gdGhpcy5yb3V0ZXIubWF0Y2gobG9jYXRpb24sIHRoaXMuY3VycmVudCk7XG4gIHRoaXMuY29uZmlybVRyYW5zaXRpb24oXG4gICAgcm91dGUsXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcyQxLnVwZGF0ZVJvdXRlKHJvdXRlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB0aGlzJDEuZW5zdXJlVVJMKCk7XG5cbiAgICAgIC8vIGZpcmUgcmVhZHkgY2JzIG9uY2VcbiAgICAgIGlmICghdGhpcyQxLnJlYWR5KSB7XG4gICAgICAgIHRoaXMkMS5yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMkMS5yZWFkeUNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKHJvdXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAob25BYm9ydCkge1xuICAgICAgICBvbkFib3J0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoZXJyICYmICF0aGlzJDEucmVhZHkpIHtcbiAgICAgICAgdGhpcyQxLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcyQxLnJlYWR5RXJyb3JDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5jb25maXJtVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uIChyb3V0ZSwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICB2YXIgYWJvcnQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgLy8gYWZ0ZXIgbWVyZ2luZyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9wdWxsLzI3NzEgd2VcbiAgICAvLyBXaGVuIHRoZSB1c2VyIG5hdmlnYXRlcyB0aHJvdWdoIGhpc3RvcnkgdGhyb3VnaCBiYWNrL2ZvcndhcmQgYnV0dG9uc1xuICAgIC8vIHdlIGRvIG5vdCB3YW50IHRvIHRocm93IHRoZSBlcnJvci4gV2Ugb25seSB0aHJvdyBpdCBpZiBkaXJlY3RseSBjYWxsaW5nXG4gICAgLy8gcHVzaC9yZXBsYWNlLiBUaGF0J3Mgd2h5IGl0J3Mgbm90IGluY2x1ZGVkIGluIGlzRXJyb3JcbiAgICBpZiAoIWlzRXh0ZW5kZWRFcnJvcihOYXZpZ2F0aW9uRHVwbGljYXRlZCwgZXJyKSAmJiBpc0Vycm9yKGVycikpIHtcbiAgICAgIGlmICh0aGlzJDEuZXJyb3JDYnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMkMS5lcnJvckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybihmYWxzZSwgJ3VuY2F1Z2h0IGVycm9yIGR1cmluZyByb3V0ZSBuYXZpZ2F0aW9uOicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfVxuICAgIG9uQWJvcnQgJiYgb25BYm9ydChlcnIpO1xuICB9O1xuICBpZiAoXG4gICAgaXNTYW1lUm91dGUocm91dGUsIGN1cnJlbnQpICYmXG4gICAgLy8gaW4gdGhlIGNhc2UgdGhlIHJvdXRlIG1hcCBoYXMgYmVlbiBkeW5hbWljYWxseSBhcHBlbmRlZCB0b1xuICAgIHJvdXRlLm1hdGNoZWQubGVuZ3RoID09PSBjdXJyZW50Lm1hdGNoZWQubGVuZ3RoXG4gICkge1xuICAgIHRoaXMuZW5zdXJlVVJMKCk7XG4gICAgcmV0dXJuIGFib3J0KG5ldyBOYXZpZ2F0aW9uRHVwbGljYXRlZChyb3V0ZSkpXG4gIH1cblxuICB2YXIgcmVmID0gcmVzb2x2ZVF1ZXVlKFxuICAgIHRoaXMuY3VycmVudC5tYXRjaGVkLFxuICAgIHJvdXRlLm1hdGNoZWRcbiAgKTtcbiAgICB2YXIgdXBkYXRlZCA9IHJlZi51cGRhdGVkO1xuICAgIHZhciBkZWFjdGl2YXRlZCA9IHJlZi5kZWFjdGl2YXRlZDtcbiAgICB2YXIgYWN0aXZhdGVkID0gcmVmLmFjdGl2YXRlZDtcblxuICB2YXIgcXVldWUgPSBbXS5jb25jYXQoXG4gICAgLy8gaW4tY29tcG9uZW50IGxlYXZlIGd1YXJkc1xuICAgIGV4dHJhY3RMZWF2ZUd1YXJkcyhkZWFjdGl2YXRlZCksXG4gICAgLy8gZ2xvYmFsIGJlZm9yZSBob29rc1xuICAgIHRoaXMucm91dGVyLmJlZm9yZUhvb2tzLFxuICAgIC8vIGluLWNvbXBvbmVudCB1cGRhdGUgaG9va3NcbiAgICBleHRyYWN0VXBkYXRlSG9va3ModXBkYXRlZCksXG4gICAgLy8gaW4tY29uZmlnIGVudGVyIGd1YXJkc1xuICAgIGFjdGl2YXRlZC5tYXAoZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG0uYmVmb3JlRW50ZXI7IH0pLFxuICAgIC8vIGFzeW5jIGNvbXBvbmVudHNcbiAgICByZXNvbHZlQXN5bmNDb21wb25lbnRzKGFjdGl2YXRlZClcbiAgKTtcblxuICB0aGlzLnBlbmRpbmcgPSByb3V0ZTtcbiAgdmFyIGl0ZXJhdG9yID0gZnVuY3Rpb24gKGhvb2ssIG5leHQpIHtcbiAgICBpZiAodGhpcyQxLnBlbmRpbmcgIT09IHJvdXRlKSB7XG4gICAgICByZXR1cm4gYWJvcnQoKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgaG9vayhyb3V0ZSwgY3VycmVudCwgZnVuY3Rpb24gKHRvKSB7XG4gICAgICAgIGlmICh0byA9PT0gZmFsc2UgfHwgaXNFcnJvcih0bykpIHtcbiAgICAgICAgICAvLyBuZXh0KGZhbHNlKSAtPiBhYm9ydCBuYXZpZ2F0aW9uLCBlbnN1cmUgY3VycmVudCBVUkxcbiAgICAgICAgICB0aGlzJDEuZW5zdXJlVVJMKHRydWUpO1xuICAgICAgICAgIGFib3J0KHRvKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2YgdG8gPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgKHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICh0eXBlb2YgdG8ucGF0aCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRvLm5hbWUgPT09ICdzdHJpbmcnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbmV4dCgnLycpIG9yIG5leHQoeyBwYXRoOiAnLycgfSkgLT4gcmVkaXJlY3RcbiAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdG8gPT09ICdvYmplY3QnICYmIHRvLnJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRoaXMkMS5yZXBsYWNlKHRvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcyQxLnB1c2godG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25maXJtIHRyYW5zaXRpb24gYW5kIHBhc3Mgb24gdGhlIHZhbHVlXG4gICAgICAgICAgbmV4dCh0byk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFib3J0KGUpO1xuICAgIH1cbiAgfTtcblxuICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcG9zdEVudGVyQ2JzID0gW107XG4gICAgdmFyIGlzVmFsaWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuY3VycmVudCA9PT0gcm91dGU7IH07XG4gICAgLy8gd2FpdCB1bnRpbCBhc3luYyBjb21wb25lbnRzIGFyZSByZXNvbHZlZCBiZWZvcmVcbiAgICAvLyBleHRyYWN0aW5nIGluLWNvbXBvbmVudCBlbnRlciBndWFyZHNcbiAgICB2YXIgZW50ZXJHdWFyZHMgPSBleHRyYWN0RW50ZXJHdWFyZHMoYWN0aXZhdGVkLCBwb3N0RW50ZXJDYnMsIGlzVmFsaWQpO1xuICAgIHZhciBxdWV1ZSA9IGVudGVyR3VhcmRzLmNvbmNhdCh0aGlzJDEucm91dGVyLnJlc29sdmVIb29rcyk7XG4gICAgcnVuUXVldWUocXVldWUsIGl0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcyQxLnBlbmRpbmcgIT09IHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBhYm9ydCgpXG4gICAgICB9XG4gICAgICB0aGlzJDEucGVuZGluZyA9IG51bGw7XG4gICAgICBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIGlmICh0aGlzJDEucm91dGVyLmFwcCkge1xuICAgICAgICB0aGlzJDEucm91dGVyLmFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBvc3RFbnRlckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudXBkYXRlUm91dGUgPSBmdW5jdGlvbiB1cGRhdGVSb3V0ZSAocm91dGUpIHtcbiAgdmFyIHByZXYgPSB0aGlzLmN1cnJlbnQ7XG4gIHRoaXMuY3VycmVudCA9IHJvdXRlO1xuICB0aGlzLmNiICYmIHRoaXMuY2Iocm91dGUpO1xuICB0aGlzLnJvdXRlci5hZnRlckhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICBob29rICYmIGhvb2socm91dGUsIHByZXYpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2UgKGJhc2UpIHtcbiAgaWYgKCFiYXNlKSB7XG4gICAgaWYgKGluQnJvd3Nlcikge1xuICAgICAgLy8gcmVzcGVjdCA8YmFzZT4gdGFnXG4gICAgICB2YXIgYmFzZUVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYmFzZScpO1xuICAgICAgYmFzZSA9IChiYXNlRWwgJiYgYmFzZUVsLmdldEF0dHJpYnV0ZSgnaHJlZicpKSB8fCAnLyc7XG4gICAgICAvLyBzdHJpcCBmdWxsIFVSTCBvcmlnaW5cbiAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoL15odHRwcz86XFwvXFwvW15cXC9dKy8sICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZSA9ICcvJztcbiAgICB9XG4gIH1cbiAgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgdGhlIHN0YXJ0aW5nIHNsYXNoXG4gIGlmIChiYXNlLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgYmFzZSA9ICcvJyArIGJhc2U7XG4gIH1cbiAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gIHJldHVybiBiYXNlLnJlcGxhY2UoL1xcLyQvLCAnJylcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVF1ZXVlIChcbiAgY3VycmVudCxcbiAgbmV4dFxuKSB7XG4gIHZhciBpO1xuICB2YXIgbWF4ID0gTWF0aC5tYXgoY3VycmVudC5sZW5ndGgsIG5leHQubGVuZ3RoKTtcbiAgZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7XG4gICAgaWYgKGN1cnJlbnRbaV0gIT09IG5leHRbaV0pIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgdXBkYXRlZDogbmV4dC5zbGljZSgwLCBpKSxcbiAgICBhY3RpdmF0ZWQ6IG5leHQuc2xpY2UoaSksXG4gICAgZGVhY3RpdmF0ZWQ6IGN1cnJlbnQuc2xpY2UoaSlcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0R3VhcmRzIChcbiAgcmVjb3JkcyxcbiAgbmFtZSxcbiAgYmluZCxcbiAgcmV2ZXJzZVxuKSB7XG4gIHZhciBndWFyZHMgPSBmbGF0TWFwQ29tcG9uZW50cyhyZWNvcmRzLCBmdW5jdGlvbiAoZGVmLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSkge1xuICAgIHZhciBndWFyZCA9IGV4dHJhY3RHdWFyZChkZWYsIG5hbWUpO1xuICAgIGlmIChndWFyZCkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ3VhcmQpXG4gICAgICAgID8gZ3VhcmQubWFwKGZ1bmN0aW9uIChndWFyZCkgeyByZXR1cm4gYmluZChndWFyZCwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpOyB9KVxuICAgICAgICA6IGJpbmQoZ3VhcmQsIGluc3RhbmNlLCBtYXRjaCwga2V5KVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmbGF0dGVuKHJldmVyc2UgPyBndWFyZHMucmV2ZXJzZSgpIDogZ3VhcmRzKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0R3VhcmQgKFxuICBkZWYsXG4gIGtleVxuKSB7XG4gIGlmICh0eXBlb2YgZGVmICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZXh0ZW5kIG5vdyBzbyB0aGF0IGdsb2JhbCBtaXhpbnMgYXJlIGFwcGxpZWQuXG4gICAgZGVmID0gX1Z1ZS5leHRlbmQoZGVmKTtcbiAgfVxuICByZXR1cm4gZGVmLm9wdGlvbnNba2V5XVxufVxuXG5mdW5jdGlvbiBleHRyYWN0TGVhdmVHdWFyZHMgKGRlYWN0aXZhdGVkKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKGRlYWN0aXZhdGVkLCAnYmVmb3JlUm91dGVMZWF2ZScsIGJpbmRHdWFyZCwgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFVwZGF0ZUhvb2tzICh1cGRhdGVkKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKHVwZGF0ZWQsICdiZWZvcmVSb3V0ZVVwZGF0ZScsIGJpbmRHdWFyZClcbn1cblxuZnVuY3Rpb24gYmluZEd1YXJkIChndWFyZCwgaW5zdGFuY2UpIHtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kUm91dGVHdWFyZCAoKSB7XG4gICAgICByZXR1cm4gZ3VhcmQuYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50cylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVudGVyR3VhcmRzIChcbiAgYWN0aXZhdGVkLFxuICBjYnMsXG4gIGlzVmFsaWRcbikge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyhcbiAgICBhY3RpdmF0ZWQsXG4gICAgJ2JlZm9yZVJvdXRlRW50ZXInLFxuICAgIGZ1bmN0aW9uIChndWFyZCwgXywgbWF0Y2gsIGtleSkge1xuICAgICAgcmV0dXJuIGJpbmRFbnRlckd1YXJkKGd1YXJkLCBtYXRjaCwga2V5LCBjYnMsIGlzVmFsaWQpXG4gICAgfVxuICApXG59XG5cbmZ1bmN0aW9uIGJpbmRFbnRlckd1YXJkIChcbiAgZ3VhcmQsXG4gIG1hdGNoLFxuICBrZXksXG4gIGNicyxcbiAgaXNWYWxpZFxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiByb3V0ZUVudGVyR3VhcmQgKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgcmV0dXJuIGd1YXJkKHRvLCBmcm9tLCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2JzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vICM3NTBcbiAgICAgICAgICAvLyBpZiBhIHJvdXRlci12aWV3IGlzIHdyYXBwZWQgd2l0aCBhbiBvdXQtaW4gdHJhbnNpdGlvbixcbiAgICAgICAgICAvLyB0aGUgaW5zdGFuY2UgbWF5IG5vdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhdCB0aGlzIHRpbWUuXG4gICAgICAgICAgLy8gd2Ugd2lsbCBuZWVkIHRvIHBvbGwgZm9yIHJlZ2lzdHJhdGlvbiB1bnRpbCBjdXJyZW50IHJvdXRlXG4gICAgICAgICAgLy8gaXMgbm8gbG9uZ2VyIHZhbGlkLlxuICAgICAgICAgIHBvbGwoY2IsIG1hdGNoLmluc3RhbmNlcywga2V5LCBpc1ZhbGlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBuZXh0KGNiKTtcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHBvbGwgKFxuICBjYiwgLy8gc29tZWhvdyBmbG93IGNhbm5vdCBpbmZlciB0aGlzIGlzIGEgZnVuY3Rpb25cbiAgaW5zdGFuY2VzLFxuICBrZXksXG4gIGlzVmFsaWRcbikge1xuICBpZiAoXG4gICAgaW5zdGFuY2VzW2tleV0gJiZcbiAgICAhaW5zdGFuY2VzW2tleV0uX2lzQmVpbmdEZXN0cm95ZWQgLy8gZG8gbm90IHJldXNlIGJlaW5nIGRlc3Ryb3llZCBpbnN0YW5jZVxuICApIHtcbiAgICBjYihpbnN0YW5jZXNba2V5XSk7XG4gIH0gZWxzZSBpZiAoaXNWYWxpZCgpKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBwb2xsKGNiLCBpbnN0YW5jZXMsIGtleSwgaXNWYWxpZCk7XG4gICAgfSwgMTYpO1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgSFRNTDVIaXN0b3J5ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSGlzdG9yeSkge1xuICBmdW5jdGlvbiBIVE1MNUhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG5cbiAgICB2YXIgZXhwZWN0U2Nyb2xsID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gICAgdmFyIHN1cHBvcnRzU2Nyb2xsID0gc3VwcG9ydHNQdXNoU3RhdGUgJiYgZXhwZWN0U2Nyb2xsO1xuXG4gICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICBzZXR1cFNjcm9sbCgpO1xuICAgIH1cblxuICAgIHZhciBpbml0TG9jYXRpb24gPSBnZXRMb2NhdGlvbih0aGlzLmJhc2UpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHRoaXMkMS5jdXJyZW50O1xuXG4gICAgICAvLyBBdm9pZGluZyBmaXJzdCBgcG9wc3RhdGVgIGV2ZW50IGRpc3BhdGNoZWQgaW4gc29tZSBicm93c2VycyBidXQgZmlyc3RcbiAgICAgIC8vIGhpc3Rvcnkgcm91dGUgbm90IHVwZGF0ZWQgc2luY2UgYXN5bmMgZ3VhcmQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgIHZhciBsb2NhdGlvbiA9IGdldExvY2F0aW9uKHRoaXMkMS5iYXNlKTtcbiAgICAgIGlmICh0aGlzJDEuY3VycmVudCA9PT0gU1RBUlQgJiYgbG9jYXRpb24gPT09IGluaXRMb2NhdGlvbikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcyQxLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgICAgIGhhbmRsZVNjcm9sbChyb3V0ZXIsIHJvdXRlLCBjdXJyZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkgKSBIVE1MNUhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeTtcbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEhpc3RvcnkgJiYgSGlzdG9yeS5wcm90b3R5cGUgKTtcbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEhUTUw1SGlzdG9yeTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5nbyhuKTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHB1c2hTdGF0ZShjbGVhblBhdGgodGhpcyQxLmJhc2UgKyByb3V0ZS5mdWxsUGF0aCkpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICByZXBsYWNlU3RhdGUoY2xlYW5QYXRoKHRoaXMkMS5iYXNlICsgcm91dGUuZnVsbFBhdGgpKTtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIH0sIG9uQWJvcnQpO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMIChwdXNoKSB7XG4gICAgaWYgKGdldExvY2F0aW9uKHRoaXMuYmFzZSkgIT09IHRoaXMuY3VycmVudC5mdWxsUGF0aCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBjbGVhblBhdGgodGhpcy5iYXNlICsgdGhpcy5jdXJyZW50LmZ1bGxQYXRoKTtcbiAgICAgIHB1c2ggPyBwdXNoU3RhdGUoY3VycmVudCkgOiByZXBsYWNlU3RhdGUoY3VycmVudCk7XG4gICAgfVxuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0TG9jYXRpb24odGhpcy5iYXNlKVxuICB9O1xuXG4gIHJldHVybiBIVE1MNUhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuZnVuY3Rpb24gZ2V0TG9jYXRpb24gKGJhc2UpIHtcbiAgdmFyIHBhdGggPSBkZWNvZGVVUkkod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgaWYgKGJhc2UgJiYgcGF0aC5pbmRleE9mKGJhc2UpID09PSAwKSB7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZS5sZW5ndGgpO1xuICB9XG4gIHJldHVybiAocGF0aCB8fCAnLycpICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoXG59XG5cbi8qICAqL1xuXG52YXIgSGFzaEhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEhhc2hIaXN0b3J5IChyb3V0ZXIsIGJhc2UsIGZhbGxiYWNrKSB7XG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG4gICAgLy8gY2hlY2sgaGlzdG9yeSBmYWxsYmFjayBkZWVwbGlua2luZ1xuICAgIGlmIChmYWxsYmFjayAmJiBjaGVja0ZhbGxiYWNrKHRoaXMuYmFzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbnN1cmVTbGFzaCgpO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5ICkgSGFzaEhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeTtcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBIYXNoSGlzdG9yeTtcblxuICAvLyB0aGlzIGlzIGRlbGF5ZWQgdW50aWwgdGhlIGFwcCBtb3VudHNcbiAgLy8gdG8gYXZvaWQgdGhlIGhhc2hjaGFuZ2UgbGlzdGVuZXIgYmVpbmcgZmlyZWQgdG9vIGVhcmx5XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5zZXR1cExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldHVwTGlzdGVuZXJzICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjtcbiAgICB2YXIgZXhwZWN0U2Nyb2xsID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gICAgdmFyIHN1cHBvcnRzU2Nyb2xsID0gc3VwcG9ydHNQdXNoU3RhdGUgJiYgZXhwZWN0U2Nyb2xsO1xuXG4gICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICBzZXR1cFNjcm9sbCgpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgc3VwcG9ydHNQdXNoU3RhdGUgPyAncG9wc3RhdGUnIDogJ2hhc2hjaGFuZ2UnLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMkMS5jdXJyZW50O1xuICAgICAgICBpZiAoIWVuc3VyZVNsYXNoKCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzJDEudHJhbnNpdGlvblRvKGdldEhhc2goKSwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgICAgICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHB1c2hIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICByZXBsYWNlSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgb25BYm9ydFxuICAgICk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5nbyhuKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMIChwdXNoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQuZnVsbFBhdGg7XG4gICAgaWYgKGdldEhhc2goKSAhPT0gY3VycmVudCkge1xuICAgICAgcHVzaCA/IHB1c2hIYXNoKGN1cnJlbnQpIDogcmVwbGFjZUhhc2goY3VycmVudCk7XG4gICAgfVxuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHJldHVybiBnZXRIYXNoKClcbiAgfTtcblxuICByZXR1cm4gSGFzaEhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuZnVuY3Rpb24gY2hlY2tGYWxsYmFjayAoYmFzZSkge1xuICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihiYXNlKTtcbiAgaWYgKCEvXlxcLyMvLnRlc3QobG9jYXRpb24pKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoY2xlYW5QYXRoKGJhc2UgKyAnLyMnICsgbG9jYXRpb24pKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVNsYXNoICgpIHtcbiAgdmFyIHBhdGggPSBnZXRIYXNoKCk7XG4gIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXBsYWNlSGFzaCgnLycgKyBwYXRoKTtcbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGdldEhhc2ggKCkge1xuICAvLyBXZSBjYW4ndCB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaGVyZSBiZWNhdXNlIGl0J3Mgbm90XG4gIC8vIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIC0gRmlyZWZveCB3aWxsIHByZS1kZWNvZGUgaXQhXG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBpbmRleCA9IGhyZWYuaW5kZXhPZignIycpO1xuICAvLyBlbXB0eSBwYXRoXG4gIGlmIChpbmRleCA8IDApIHsgcmV0dXJuICcnIH1cblxuICBocmVmID0gaHJlZi5zbGljZShpbmRleCArIDEpO1xuICAvLyBkZWNvZGUgdGhlIGhhc2ggYnV0IG5vdCB0aGUgc2VhcmNoIG9yIGhhc2hcbiAgLy8gYXMgc2VhcmNoKHF1ZXJ5KSBpcyBhbHJlYWR5IGRlY29kZWRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzI3MDhcbiAgdmFyIHNlYXJjaEluZGV4ID0gaHJlZi5pbmRleE9mKCc/Jyk7XG4gIGlmIChzZWFyY2hJbmRleCA8IDApIHtcbiAgICB2YXIgaGFzaEluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICBocmVmID0gZGVjb2RlVVJJKGhyZWYuc2xpY2UoMCwgaGFzaEluZGV4KSkgKyBocmVmLnNsaWNlKGhhc2hJbmRleCk7XG4gICAgfSBlbHNlIHsgaHJlZiA9IGRlY29kZVVSSShocmVmKTsgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzZWFyY2hJbmRleCA+IC0xKSB7XG4gICAgICBocmVmID0gZGVjb2RlVVJJKGhyZWYuc2xpY2UoMCwgc2VhcmNoSW5kZXgpKSArIGhyZWYuc2xpY2Uoc2VhcmNoSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBocmVmXG59XG5cbmZ1bmN0aW9uIGdldFVybCAocGF0aCkge1xuICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICB2YXIgaSA9IGhyZWYuaW5kZXhPZignIycpO1xuICB2YXIgYmFzZSA9IGkgPj0gMCA/IGhyZWYuc2xpY2UoMCwgaSkgOiBocmVmO1xuICByZXR1cm4gKGJhc2UgKyBcIiNcIiArIHBhdGgpXG59XG5cbmZ1bmN0aW9uIHB1c2hIYXNoIChwYXRoKSB7XG4gIGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgIHB1c2hTdGF0ZShnZXRVcmwocGF0aCkpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gcGF0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYWNlSGFzaCAocGF0aCkge1xuICBpZiAoc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICByZXBsYWNlU3RhdGUoZ2V0VXJsKHBhdGgpKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShnZXRVcmwocGF0aCkpO1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgQWJzdHJhY3RIaXN0b3J5ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSGlzdG9yeSkge1xuICBmdW5jdGlvbiBBYnN0cmFjdEhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICAgIEhpc3RvcnkuY2FsbCh0aGlzLCByb3V0ZXIsIGJhc2UpO1xuICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICB0aGlzLmluZGV4ID0gLTE7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkgKSBBYnN0cmFjdEhpc3RvcnkuX19wcm90b19fID0gSGlzdG9yeTtcbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEhpc3RvcnkgJiYgSGlzdG9yeS5wcm90b3R5cGUgKTtcbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0SGlzdG9yeTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICB0aGlzJDEuc3RhY2sgPSB0aGlzJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxLmluZGV4ICsgMSkuY29uY2F0KHJvdXRlKTtcbiAgICAgICAgdGhpcyQxLmluZGV4Kys7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgb25BYm9ydFxuICAgICk7XG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgbG9jYXRpb24sXG4gICAgICBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgdGhpcyQxLnN0YWNrID0gdGhpcyQxLnN0YWNrLnNsaWNlKDAsIHRoaXMkMS5pbmRleCkuY29uY2F0KHJvdXRlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuaW5kZXggKyBuO1xuICAgIGlmICh0YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gdGhpcy5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgcm91dGUgPSB0aGlzLnN0YWNrW3RhcmdldEluZGV4XTtcbiAgICB0aGlzLmNvbmZpcm1UcmFuc2l0aW9uKFxuICAgICAgcm91dGUsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMkMS5pbmRleCA9IHRhcmdldEluZGV4O1xuICAgICAgICB0aGlzJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRXh0ZW5kZWRFcnJvcihOYXZpZ2F0aW9uRHVwbGljYXRlZCwgZXJyKSkge1xuICAgICAgICAgIHRoaXMkMS5pbmRleCA9IHRhcmdldEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIGN1cnJlbnQgPyBjdXJyZW50LmZ1bGxQYXRoIDogJy8nXG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKCkge1xuICAgIC8vIG5vb3BcbiAgfTtcblxuICByZXR1cm4gQWJzdHJhY3RIaXN0b3J5O1xufShIaXN0b3J5KSk7XG5cbi8qICAqL1xuXG5cblxudmFyIFZ1ZVJvdXRlciA9IGZ1bmN0aW9uIFZ1ZVJvdXRlciAob3B0aW9ucykge1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICB0aGlzLmFwcCA9IG51bGw7XG4gIHRoaXMuYXBwcyA9IFtdO1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLmJlZm9yZUhvb2tzID0gW107XG4gIHRoaXMucmVzb2x2ZUhvb2tzID0gW107XG4gIHRoaXMuYWZ0ZXJIb29rcyA9IFtdO1xuICB0aGlzLm1hdGNoZXIgPSBjcmVhdGVNYXRjaGVyKG9wdGlvbnMucm91dGVzIHx8IFtdLCB0aGlzKTtcblxuICB2YXIgbW9kZSA9IG9wdGlvbnMubW9kZSB8fCAnaGFzaCc7XG4gIHRoaXMuZmFsbGJhY2sgPSBtb2RlID09PSAnaGlzdG9yeScgJiYgIXN1cHBvcnRzUHVzaFN0YXRlICYmIG9wdGlvbnMuZmFsbGJhY2sgIT09IGZhbHNlO1xuICBpZiAodGhpcy5mYWxsYmFjaykge1xuICAgIG1vZGUgPSAnaGFzaCc7XG4gIH1cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICBtb2RlID0gJ2Fic3RyYWN0JztcbiAgfVxuICB0aGlzLm1vZGUgPSBtb2RlO1xuXG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ2hpc3RvcnknOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhUTUw1SGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UpO1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdoYXNoJzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIYXNoSGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UsIHRoaXMuZmFsbGJhY2spO1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdhYnN0cmFjdCc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgQWJzdHJhY3RIaXN0b3J5KHRoaXMsIG9wdGlvbnMuYmFzZSk7XG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBhc3NlcnQoZmFsc2UsIChcImludmFsaWQgbW9kZTogXCIgKyBtb2RlKSk7XG4gICAgICB9XG4gIH1cbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGN1cnJlbnRSb3V0ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gbWF0Y2ggKFxuICByYXcsXG4gIGN1cnJlbnQsXG4gIHJlZGlyZWN0ZWRGcm9tXG4pIHtcbiAgcmV0dXJuIHRoaXMubWF0Y2hlci5tYXRjaChyYXcsIGN1cnJlbnQsIHJlZGlyZWN0ZWRGcm9tKVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmN1cnJlbnRSb3V0ZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmhpc3RvcnkgJiYgdGhpcy5oaXN0b3J5LmN1cnJlbnRcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIGluaXQgKGFwcCAvKiBWdWUgY29tcG9uZW50IGluc3RhbmNlICovKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnQoXG4gICAgaW5zdGFsbC5pbnN0YWxsZWQsXG4gICAgXCJub3QgaW5zdGFsbGVkLiBNYWtlIHN1cmUgdG8gY2FsbCBgVnVlLnVzZShWdWVSb3V0ZXIpYCBcIiArXG4gICAgXCJiZWZvcmUgY3JlYXRpbmcgcm9vdCBpbnN0YW5jZS5cIlxuICApO1xuXG4gIHRoaXMuYXBwcy5wdXNoKGFwcCk7XG5cbiAgLy8gc2V0IHVwIGFwcCBkZXN0cm95ZWQgaGFuZGxlclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMjYzOVxuICBhcHAuJG9uY2UoJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIGNsZWFuIG91dCBhcHAgZnJvbSB0aGlzLmFwcHMgYXJyYXkgb25jZSBkZXN0cm95ZWRcbiAgICB2YXIgaW5kZXggPSB0aGlzJDEuYXBwcy5pbmRleE9mKGFwcCk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHsgdGhpcyQxLmFwcHMuc3BsaWNlKGluZGV4LCAxKTsgfVxuICAgIC8vIGVuc3VyZSB3ZSBzdGlsbCBoYXZlIGEgbWFpbiBhcHAgb3IgbnVsbCBpZiBubyBhcHBzXG4gICAgLy8gd2UgZG8gbm90IHJlbGVhc2UgdGhlIHJvdXRlciBzbyBpdCBjYW4gYmUgcmV1c2VkXG4gICAgaWYgKHRoaXMkMS5hcHAgPT09IGFwcCkgeyB0aGlzJDEuYXBwID0gdGhpcyQxLmFwcHNbMF0gfHwgbnVsbDsgfVxuICB9KTtcblxuICAvLyBtYWluIGFwcCBwcmV2aW91c2x5IGluaXRpYWxpemVkXG4gIC8vIHJldHVybiBhcyB3ZSBkb24ndCBuZWVkIHRvIHNldCB1cCBuZXcgaGlzdG9yeSBsaXN0ZW5lclxuICBpZiAodGhpcy5hcHApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoaXMuYXBwID0gYXBwO1xuXG4gIHZhciBoaXN0b3J5ID0gdGhpcy5oaXN0b3J5O1xuXG4gIGlmIChoaXN0b3J5IGluc3RhbmNlb2YgSFRNTDVIaXN0b3J5KSB7XG4gICAgaGlzdG9yeS50cmFuc2l0aW9uVG8oaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSk7XG4gIH0gZWxzZSBpZiAoaGlzdG9yeSBpbnN0YW5jZW9mIEhhc2hIaXN0b3J5KSB7XG4gICAgdmFyIHNldHVwSGFzaExpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgaGlzdG9yeS5zZXR1cExpc3RlbmVycygpO1xuICAgIH07XG4gICAgaGlzdG9yeS50cmFuc2l0aW9uVG8oXG4gICAgICBoaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpLFxuICAgICAgc2V0dXBIYXNoTGlzdGVuZXIsXG4gICAgICBzZXR1cEhhc2hMaXN0ZW5lclxuICAgICk7XG4gIH1cblxuICBoaXN0b3J5Lmxpc3RlbihmdW5jdGlvbiAocm91dGUpIHtcbiAgICB0aGlzJDEuYXBwcy5mb3JFYWNoKGZ1bmN0aW9uIChhcHApIHtcbiAgICAgIGFwcC5fcm91dGUgPSByb3V0ZTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJlZm9yZUVhY2ggPSBmdW5jdGlvbiBiZWZvcmVFYWNoIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMuYmVmb3JlSG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iZWZvcmVSZXNvbHZlID0gZnVuY3Rpb24gYmVmb3JlUmVzb2x2ZSAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLnJlc29sdmVIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmFmdGVyRWFjaCA9IGZ1bmN0aW9uIGFmdGVyRWFjaCAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLmFmdGVySG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gb25SZWFkeSAoY2IsIGVycm9yQ2IpIHtcbiAgdGhpcy5oaXN0b3J5Lm9uUmVhZHkoY2IsIGVycm9yQ2IpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5vbkVycm9yID0gZnVuY3Rpb24gb25FcnJvciAoZXJyb3JDYikge1xuICB0aGlzLmhpc3Rvcnkub25FcnJvcihlcnJvckNiKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghb25Db21wbGV0ZSAmJiAhb25BYm9ydCAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdGhpcyQxLmhpc3RvcnkucHVzaChsb2NhdGlvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KTtcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFvbkNvbXBsZXRlICYmICFvbkFib3J0ICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0aGlzJDEuaGlzdG9yeS5yZXBsYWNlKGxvY2F0aW9uLCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28gKG4pIHtcbiAgdGhpcy5oaXN0b3J5LmdvKG4pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gYmFjayAoKSB7XG4gIHRoaXMuZ28oLTEpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gZm9yd2FyZCAoKSB7XG4gIHRoaXMuZ28oMSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmdldE1hdGNoZWRDb21wb25lbnRzID0gZnVuY3Rpb24gZ2V0TWF0Y2hlZENvbXBvbmVudHMgKHRvKSB7XG4gIHZhciByb3V0ZSA9IHRvXG4gICAgPyB0by5tYXRjaGVkXG4gICAgICA/IHRvXG4gICAgICA6IHRoaXMucmVzb2x2ZSh0bykucm91dGVcbiAgICA6IHRoaXMuY3VycmVudFJvdXRlO1xuICBpZiAoIXJvdXRlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cbiAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgcm91dGUubWF0Y2hlZC5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobS5jb21wb25lbnRzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIG0uY29tcG9uZW50c1trZXldXG4gICAgfSlcbiAgfSkpXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlIChcbiAgdG8sXG4gIGN1cnJlbnQsXG4gIGFwcGVuZFxuKSB7XG4gIGN1cnJlbnQgPSBjdXJyZW50IHx8IHRoaXMuaGlzdG9yeS5jdXJyZW50O1xuICB2YXIgbG9jYXRpb24gPSBub3JtYWxpemVMb2NhdGlvbihcbiAgICB0byxcbiAgICBjdXJyZW50LFxuICAgIGFwcGVuZCxcbiAgICB0aGlzXG4gICk7XG4gIHZhciByb3V0ZSA9IHRoaXMubWF0Y2gobG9jYXRpb24sIGN1cnJlbnQpO1xuICB2YXIgZnVsbFBhdGggPSByb3V0ZS5yZWRpcmVjdGVkRnJvbSB8fCByb3V0ZS5mdWxsUGF0aDtcbiAgdmFyIGJhc2UgPSB0aGlzLmhpc3RvcnkuYmFzZTtcbiAgdmFyIGhyZWYgPSBjcmVhdGVIcmVmKGJhc2UsIGZ1bGxQYXRoLCB0aGlzLm1vZGUpO1xuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICByb3V0ZTogcm91dGUsXG4gICAgaHJlZjogaHJlZixcbiAgICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICAgIG5vcm1hbGl6ZWRUbzogbG9jYXRpb24sXG4gICAgcmVzb2x2ZWQ6IHJvdXRlXG4gIH1cbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWRkUm91dGVzID0gZnVuY3Rpb24gYWRkUm91dGVzIChyb3V0ZXMpIHtcbiAgdGhpcy5tYXRjaGVyLmFkZFJvdXRlcyhyb3V0ZXMpO1xuICBpZiAodGhpcy5oaXN0b3J5LmN1cnJlbnQgIT09IFNUQVJUKSB7XG4gICAgdGhpcy5oaXN0b3J5LnRyYW5zaXRpb25Ubyh0aGlzLmhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCkpO1xuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVnVlUm91dGVyLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVySG9vayAobGlzdCwgZm4pIHtcbiAgbGlzdC5wdXNoKGZuKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IGxpc3QuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkgeyBsaXN0LnNwbGljZShpLCAxKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhyZWYgKGJhc2UsIGZ1bGxQYXRoLCBtb2RlKSB7XG4gIHZhciBwYXRoID0gbW9kZSA9PT0gJ2hhc2gnID8gJyMnICsgZnVsbFBhdGggOiBmdWxsUGF0aDtcbiAgcmV0dXJuIGJhc2UgPyBjbGVhblBhdGgoYmFzZSArICcvJyArIHBhdGgpIDogcGF0aFxufVxuXG5WdWVSb3V0ZXIuaW5zdGFsbCA9IGluc3RhbGw7XG5WdWVSb3V0ZXIudmVyc2lvbiA9ICczLjEuMyc7XG5cbmlmIChpbkJyb3dzZXIgJiYgd2luZG93LlZ1ZSkge1xuICB3aW5kb3cuVnVlLnVzZShWdWVSb3V0ZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWdWVSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js\n");
/***/ }),
/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/App.vue?vue&type=style&index=0&lang=scss& ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"07db42f3\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(/*! !../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\", function() {\n var newContent = __webpack_require__(/*! !../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\");\n if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT8wNjJmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCIwN2RiNDJmM1wiLCBjb250ZW50LCBmYWxzZSwge1wic291cmNlTWFwXCI6ZmFsc2UsXCJzaGFkb3dNb2RlXCI6ZmFsc2V9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\n");
/***/ }),
/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&":
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& ***!
\**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"4d682107\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\", function() {\n var newContent = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\n if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT8xNmNkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zYjRmMzVhZiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjRkNjgyMTA3XCIsIGNvbnRlbnQsIGZhbHNlLCB7XCJzb3VyY2VNYXBcIjpmYWxzZSxcInNoYWRvd01vZGVcIjpmYWxzZX0pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9M2I0ZjM1YWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zYjRmMzVhZiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& ***!
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"63df74aa\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\", function() {\n var newContent = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\n if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/ZDk1NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZm9vdGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWY2NzhmYzIyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiNjNkZjc0YWFcIiwgY29udGVudCwgZmFsc2UsIHtcInNvdXJjZU1hcFwiOmZhbHNlLFwic2hhZG93TW9kZVwiOmZhbHNlfSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& ***!
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"3568dd4b\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\", function() {\n var newContent = __webpack_require__(/*! !../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\n if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/OWVlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTZmYmE4ZGFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiMzU2OGRkNGJcIiwgY29udGVudCwgZmFsc2UsIHtcInNvdXJjZU1hcFwiOmZhbHNlLFwic2hhZG93TW9kZVwiOmZhbHNlfSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&":
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!./node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!./node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& ***!
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"c0b7fb5c\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(/*! !../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\", function() {\n var newContent = __webpack_require__(/*! !../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\n if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8hLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/MTEwNyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCJjMGI3ZmI1Y1wiLCBjb250ZW50LCBmYWxzZSwge1wic291cmNlTWFwXCI6ZmFsc2UsXCJzaGFkb3dNb2RlXCI6ZmFsc2V9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTFiYWRjODAxJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js":
/*!**************************************************************************************!*\
!*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js ***!
\**************************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return addStylesClient; });\n/* harmony import */ var _listToStyles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./listToStyles */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js\");\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\n\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nfunction addStylesClient (parentId, list, _isProduction, _options) {\n isProduction = _isProduction\n\n options = _options || {}\n\n var styles = Object(_listToStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(parentId, list)\n addStylesToDom(styles)\n\n return function update (newList) {\n var mayRemove = []\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n domStyle.refs--\n mayRemove.push(domStyle)\n }\n if (newList) {\n styles = Object(_listToStyles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(parentId, newList)\n addStylesToDom(styles)\n } else {\n styles = []\n }\n for (var i = 0; i < mayRemove.length; i++) {\n var domStyle = mayRemove[i]\n if (domStyle.refs === 0) {\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j]()\n }\n delete stylesInDom[domStyle.id]\n }\n }\n }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n if (domStyle) {\n domStyle.refs++\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j](item.parts[j])\n }\n for (; j < item.parts.length; j++) {\n domStyle.parts.push(addStyle(item.parts[j]))\n }\n if (domStyle.parts.length > item.parts.length) {\n domStyle.parts.length = item.parts.length\n }\n } else {\n var parts = []\n for (var j = 0; j < item.parts.length; j++) {\n parts.push(addStyle(item.parts[j]))\n }\n stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n }\n }\n}\n\nfunction createStyleElement () {\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n head.appendChild(styleElement)\n return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n var update, remove\n var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n if (styleElement) {\n if (isProduction) {\n // has SSR styles and in production mode.\n // simply do nothing.\n return noop\n } else {\n // has SSR styles but in dev mode.\n // for some reason Chrome can't handle source map in server-rendered\n // style tags - source maps in <style> only works if the style tag is\n // created and inserted dynamically. So we remove the server rendered\n // styles and inject new ones.\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n if (isOldIE) {\n // use singleton mode for IE9.\n var styleIndex = singletonCounter++\n styleElement = singletonElement || (singletonElement = createStyleElement())\n update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n } else {\n // use multi-style-tag mode in all other cases\n styleElement = createStyleElement()\n update = applyToTag.bind(null, styleElement)\n remove = function () {\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n update(obj)\n\n return function updateStyle (newObj /* StyleObjectPart */) {\n if (newObj) {\n if (newObj.css === obj.css &&\n newObj.media === obj.media &&\n newObj.sourceMap === obj.sourceMap) {\n return\n }\n update(obj = newObj)\n } else {\n remove()\n }\n }\n}\n\nvar replaceText = (function () {\n var textStore = []\n\n return function (index, replacement) {\n textStore[index] = replacement\n return textStore.filter(Boolean).join('\\n')\n }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n var css = remove ? '' : obj.css\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css)\n } else {\n var cssNode = document.createTextNode(css)\n var childNodes = styleElement.childNodes\n if (childNodes[index]) styleElement.removeChild(childNodes[index])\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index])\n } else {\n styleElement.appendChild(cssNode)\n }\n }\n}\n\nfunction applyToTag (styleElement, obj) {\n var css = obj.css\n var media = obj.media\n var sourceMap = obj.sourceMap\n\n if (media) {\n styleElement.setAttribute('media', media)\n }\n if (options.ssrId) {\n styleElement.setAttribute(ssrIdKey, obj.id)\n }\n\n if (sourceMap) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n }\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild)\n }\n styleElement.appendChild(document.createTextNode(css))\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qcz84NWNiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiAgTW9kaWZpZWQgYnkgRXZhbiBZb3UgQHl5eDk5MDgwM1xuKi9cblxuaW1wb3J0IGxpc3RUb1N0eWxlcyBmcm9tICcuL2xpc3RUb1N0eWxlcydcblxudmFyIGhhc0RvY3VtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5pZiAodHlwZW9mIERFQlVHICE9PSAndW5kZWZpbmVkJyAmJiBERUJVRykge1xuICBpZiAoIWhhc0RvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2dWUtc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuICcgK1xuICAgIFwiVXNlIHsgdGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2VydmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIlxuICApIH1cbn1cblxuLypcbnR5cGUgU3R5bGVPYmplY3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHBhcnRzOiBBcnJheTxTdHlsZU9iamVjdFBhcnQ+XG59XG5cbnR5cGUgU3R5bGVPYmplY3RQYXJ0ID0ge1xuICBjc3M6IHN0cmluZztcbiAgbWVkaWE6IHN0cmluZztcbiAgc291cmNlTWFwOiA/c3RyaW5nXG59XG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7LypcbiAgW2lkOiBudW1iZXJdOiB7XG4gICAgaWQ6IG51bWJlcixcbiAgICByZWZzOiBudW1iZXIsXG4gICAgcGFydHM6IEFycmF5PChvYmo/OiBTdHlsZU9iamVjdFBhcnQpID0+IHZvaWQ+XG4gIH1cbiovfVxuXG52YXIgaGVhZCA9IGhhc0RvY3VtZW50ICYmIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pXG52YXIgc2luZ2xldG9uRWxlbWVudCA9IG51bGxcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMFxudmFyIGlzUHJvZHVjdGlvbiA9IGZhbHNlXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG52YXIgb3B0aW9ucyA9IG51bGxcbnZhciBzc3JJZEtleSA9ICdkYXRhLXZ1ZS1zc3ItaWQnXG5cbi8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxudmFyIGlzT2xkSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvbXNpZSBbNi05XVxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFN0eWxlc0NsaWVudCAocGFyZW50SWQsIGxpc3QsIF9pc1Byb2R1Y3Rpb24sIF9vcHRpb25zKSB7XG4gIGlzUHJvZHVjdGlvbiA9IF9pc1Byb2R1Y3Rpb25cblxuICBvcHRpb25zID0gX29wdGlvbnMgfHwge31cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBsaXN0KVxuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuICAgIHZhciBtYXlSZW1vdmUgPSBbXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICAgIGRvbVN0eWxlLnJlZnMtLVxuICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpXG4gICAgfVxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIG5ld0xpc3QpXG4gICAgICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlcyA9IFtdXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV1cbiAgICAgIGlmIChkb21TdHlsZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXSgpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzIC8qIEFycmF5PFN0eWxlT2JqZWN0PiAqLykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICBpZiAoZG9tU3R5bGUpIHtcbiAgICAgIGRvbVN0eWxlLnJlZnMrK1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKVxuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBpZiAoZG9tU3R5bGUucGFydHMubGVuZ3RoID4gaXRlbS5wYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMubGVuZ3RoID0gaXRlbS5wYXJ0cy5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW11cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7IGlkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHMgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKCkge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBzdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpXG4gIHJldHVybiBzdHlsZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgdmFyIHVwZGF0ZSwgcmVtb3ZlXG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVsnICsgc3NySWRLZXkgKyAnfj1cIicgKyBvYmouaWQgKyAnXCJdJylcblxuICBpZiAoc3R5bGVFbGVtZW50KSB7XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYW5kIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgIC8vIHNpbXBseSBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG5vb3BcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYnV0IGluIGRldiBtb2RlLlxuICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIENocm9tZSBjYW4ndCBoYW5kbGUgc291cmNlIG1hcCBpbiBzZXJ2ZXItcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlIHRhZ3MgLSBzb3VyY2UgbWFwcyBpbiA8c3R5bGU+IG9ubHkgd29ya3MgaWYgdGhlIHN0eWxlIHRhZyBpc1xuICAgICAgLy8gY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgZHluYW1pY2FsbHkuIFNvIHdlIHJlbW92ZSB0aGUgc2VydmVyIHJlbmRlcmVkXG4gICAgICAvLyBzdHlsZXMgYW5kIGluamVjdCBuZXcgb25lcy5cbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICBpZiAoaXNPbGRJRSkge1xuICAgIC8vIHVzZSBzaW5nbGV0b24gbW9kZSBmb3IgSUU5LlxuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrXG4gICAgc3R5bGVFbGVtZW50ID0gc2luZ2xldG9uRWxlbWVudCB8fCAoc2luZ2xldG9uRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIGZhbHNlKVxuICAgIHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIHRydWUpXG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIG11bHRpLXN0eWxlLXRhZyBtb2RlIGluIGFsbCBvdGhlciBjYXNlc1xuICAgIHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpXG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudClcbiAgICByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKG9iailcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuICAgICAgICAgIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG4gICAgICAgICAgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXVxuXG4gIHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJylcbiAgfVxufSkoKVxuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZUVsZW1lbnQsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmouY3NzXG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpXG4gICAgdmFyIGNoaWxkTm9kZXMgPSBzdHlsZUVsZW1lbnQuY2hpbGROb2Rlc1xuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGVFbGVtZW50Lmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGNzc05vZGUpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlRWxlbWVudCwgb2JqKSB7XG4gIHZhciBjc3MgPSBvYmouY3NzXG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcFxuXG4gIGlmIChtZWRpYSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpXG4gIH1cbiAgaWYgKG9wdGlvbnMuc3NySWQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKHNzcklkS2V5LCBvYmouaWQpXG4gIH1cblxuICBpZiAoc291cmNlTWFwKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kZXZ0b29scy9kb2NzL2phdmFzY3JpcHQtZGVidWdnaW5nXG4gICAgLy8gdGhpcyBtYWtlcyBzb3VyY2UgbWFwcyBpbnNpZGUgc3R5bGUgdGFncyB3b3JrIHByb3Blcmx5IGluIENocm9tZVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZVVSTD0nICsgc291cmNlTWFwLnNvdXJjZXNbMF0gKyAnICovJ1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCcgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgJyAqLydcbiAgfVxuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZClcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/addStylesClient.js\n");
/***/ }),
/***/ "./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js":
/*!***********************************************************************************!*\
!*** ./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js ***!
\***********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return listToStyles; });\n/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nfunction listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9saWIvbGlzdFRvU3R5bGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvbGliL2xpc3RUb1N0eWxlcy5qcz82MTgxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhbnNsYXRlcyB0aGUgbGlzdCBmb3JtYXQgcHJvZHVjZWQgYnkgY3NzLWxvYWRlciBpbnRvIHNvbWV0aGluZ1xuICogZWFzaWVyIHRvIG1hbmlwdWxhdGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAocGFyZW50SWQsIGxpc3QpIHtcbiAgdmFyIHN0eWxlcyA9IFtdXG4gIHZhciBuZXdTdHlsZXMgPSB7fVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV1cbiAgICB2YXIgaWQgPSBpdGVtWzBdXG4gICAgdmFyIGNzcyA9IGl0ZW1bMV1cbiAgICB2YXIgbWVkaWEgPSBpdGVtWzJdXG4gICAgdmFyIHNvdXJjZU1hcCA9IGl0ZW1bM11cbiAgICB2YXIgcGFydCA9IHtcbiAgICAgIGlkOiBwYXJlbnRJZCArICc6JyArIGksXG4gICAgICBjc3M6IGNzcyxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIHNvdXJjZU1hcDogc291cmNlTWFwXG4gICAgfVxuICAgIGlmICghbmV3U3R5bGVzW2lkXSkge1xuICAgICAgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHsgaWQ6IGlkLCBwYXJ0czogW3BhcnRdIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3R5bGVzXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue-style-loader@4.1.2@vue-style-loader/lib/listToStyles.js\n");
/***/ }),
/***/ "./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js":
/*!**************************************************************!*\
!*** ./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: \"sandbox\" !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: \"sandbox\" !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (true) {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return '<Root>'\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if ( true && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if ( true && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if ( true &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n true && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if ( true &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n true && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (true) {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n true && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n true && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (true) {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && \"sandbox\" !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (true) {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (true) {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (true) {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (true) {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if ( true && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n true\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if ( true && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (true) {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Techinically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (true) {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\nvar mark;\nvar measure;\n\nif (true) {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n true && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n if (def instanceof VNode) {\n def = def.data.hook || (def.data.hook = {});\n }\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (true) {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n toggleObserving(false);\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n if (true) {\n defineReactive$$1(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n } else {}\n });\n toggleObserving(true);\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject)\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n // #6574 in case the inject object is observed...\n if (key === '__ob__') { continue }\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && hasOwn(source._provided, provideKey)) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else if (true) {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n if (!children || !children.length) {\n return {}\n }\n var slots = {};\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.fnContext === context) &&\n data && data.slot != null\n ) {\n var name = data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children || []);\n } else {\n slot.push(child);\n }\n } else {\n (slots.default || (slots.default = [])).push(child);\n }\n }\n // ignore slots that contains only whitespace\n for (var name$1 in slots) {\n if (slots[name$1].every(isWhitespace)) {\n delete slots[name$1];\n }\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/* */\n\nfunction normalizeScopedSlots (\n slots,\n normalSlots,\n prevSlots\n) {\n var res;\n var hasNormalSlots = Object.keys(normalSlots).length > 0;\n var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n var key = slots && slots.$key;\n if (!slots) {\n res = {};\n } else if (slots._normalized) {\n // fast path 1: child component re-render only, parent did not change\n return slots._normalized\n } else if (\n isStable &&\n prevSlots &&\n prevSlots !== emptyObject &&\n key === prevSlots.$key &&\n !hasNormalSlots &&\n !prevSlots.$hasNormal\n ) {\n // fast path 2: stable scoped slots w/ no normal slots to proxy,\n // only need to normalize once\n return prevSlots\n } else {\n res = {};\n for (var key$1 in slots) {\n if (slots[key$1] && key$1[0] !== '$') {\n res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n }\n }\n }\n // expose normal slots on scopedSlots\n for (var key$2 in normalSlots) {\n if (!(key$2 in res)) {\n res[key$2] = proxyNormalSlot(normalSlots, key$2);\n }\n }\n // avoriaz seems to mock a non-extensible $scopedSlots object\n // and when that is passed down this would cause an error\n if (slots && Object.isExtensible(slots)) {\n (slots)._normalized = res;\n }\n def(res, '$stable', isStable);\n def(res, '$key', key);\n def(res, '$hasNormal', hasNormalSlots);\n return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n var normalized = function () {\n var res = arguments.length ? fn.apply(null, arguments) : fn({});\n res = res && typeof res === 'object' && !Array.isArray(res)\n ? [res] // single vnode\n : normalizeChildren(res);\n return res && (\n res.length === 0 ||\n (res.length === 1 && res[0].isComment) // #9658\n ) ? undefined\n : res\n };\n // this is a slot using the new v-slot syntax without scope. although it is\n // compiled as a scoped slot, render fn users would expect it to be present\n // on this.$slots because the usage is semantically a normal slot.\n if (fn.proxy) {\n Object.defineProperty(normalSlots, key, {\n get: normalized,\n enumerable: true,\n configurable: true\n });\n }\n return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n return function () { return slots[key]; }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n if (hasSymbol && val[Symbol.iterator]) {\n ret = [];\n var iterator = val[Symbol.iterator]();\n var result = iterator.next();\n while (!result.done) {\n ret.push(render(result.value, ret.length));\n result = iterator.next();\n }\n } else {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n }\n if (!isDef(ret)) {\n ret = [];\n }\n (ret)._isVList = true;\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n var nodes;\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if ( true && !isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n nodes = scopedSlotFn(props) || fallback;\n } else {\n nodes = this.$slots[name] || fallback;\n }\n\n var target = props && props.slot;\n if (target) {\n return this.$createElement('template', { slot: target }, nodes)\n } else {\n return nodes\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\nfunction isKeyNotMatch (expect, actual) {\n if (Array.isArray(expect)) {\n return expect.indexOf(actual) === -1\n } else {\n return expect !== actual\n }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInKeyCode,\n eventKeyName,\n builtInKeyName\n) {\n var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n return isKeyNotMatch(builtInKeyName, eventKeyName)\n } else if (mappedKeyCode) {\n return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n true && warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n var camelizedKey = camelize(key);\n var hyphenatedKey = hyphenate(key);\n if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n var cached = this._staticTrees || (this._staticTrees = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree.\n if (tree && !isInFor) {\n return tree\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = this.$options.staticRenderFns[index].call(\n this._renderProxy,\n null,\n this // for render fns generated for functional component templates\n );\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n true && warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res,\n // the following are added in 2.6\n hasDynamicKeys,\n contentHashKey\n) {\n res = res || { $stable: !hasDynamicKeys };\n for (var i = 0; i < fns.length; i++) {\n var slot = fns[i];\n if (Array.isArray(slot)) {\n resolveScopedSlots(slot, res, hasDynamicKeys);\n } else if (slot) {\n // marker for reverse proxying v-slot without scope on this.$slots\n if (slot.proxy) {\n slot.fn.proxy = true;\n }\n res[slot.key] = slot.fn;\n }\n }\n if (contentHashKey) {\n (res).$key = contentHashKey;\n }\n return res\n}\n\n/* */\n\nfunction bindDynamicKeys (baseObj, values) {\n for (var i = 0; i < values.length; i += 2) {\n var key = values[i];\n if (typeof key === 'string' && key) {\n baseObj[values[i]] = values[i + 1];\n } else if ( true && key !== '' && key !== null) {\n // null is a speical value for explicitly removing a binding\n warn(\n (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n this\n );\n }\n }\n return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n return typeof value === 'string' ? symbol + value : value\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n target._d = bindDynamicKeys;\n target._p = prependModifier;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var this$1 = this;\n\n var options = Ctor.options;\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm;\n if (hasOwn(parent, '_uid')) {\n contextVm = Object.create(parent);\n // $flow-disable-line\n contextVm._original = parent;\n } else {\n // the context vm passed in is a functional context as well.\n // in this case we want to make sure we are able to get a hold to the\n // real context instance.\n contextVm = parent;\n // $flow-disable-line\n parent = parent._original;\n }\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () {\n if (!this$1.$slots) {\n normalizeScopedSlots(\n data.scopedSlots,\n this$1.$slots = resolveSlots(children, parent)\n );\n }\n return this$1.$slots\n };\n\n Object.defineProperty(this, 'scopedSlots', ({\n enumerable: true,\n get: function get () {\n return normalizeScopedSlots(data.scopedSlots, this.slots())\n }\n }));\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode && !Array.isArray(vnode)) {\n vnode.fnScopeId = options._scopeId;\n vnode.fnContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n } else if (Array.isArray(vnode)) {\n var vnodes = normalizeChildren(vnode) || [];\n var res = new Array(vnodes.length);\n for (var i = 0; i < vnodes.length; i++) {\n res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n }\n return res\n }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n // #7817 clone node before setting fnContext, otherwise if the node is reused\n // (e.g. it was from a cached normal slot) the fnContext causes named slots\n // that should not be matched to match.\n var clone = cloneVNode(vnode);\n clone.fnContext = contextVm;\n clone.fnOptions = options;\n if (true) {\n (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n }\n if (data.slot) {\n (clone.data || (clone.data = {})).slot = data.slot;\n }\n return clone\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n/* */\n\n/* */\n\n/* */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (vnode, hydrating) {\n if (\n vnode.componentInstance &&\n !vnode.componentInstance._isDestroyed &&\n vnode.data.keepAlive\n ) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n } else {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n if (true) {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // install component management hooks onto the placeholder node\n installComponentHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent // activeInstance in lifecycle state\n) {\n var options = {\n _isComponent: true,\n _parentVnode: vnode,\n parent: parent\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n var hooks = data.hook || (data.hook = {});\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n var existing = hooks[key];\n var toMerge = componentVNodeHooks[key];\n if (existing !== toMerge && !(existing && existing._merged)) {\n hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n }\n }\n}\n\nfunction mergeHook$1 (f1, f2) {\n var merged = function (a, b) {\n // flow complains about extra args which is why we use any\n f1(a, b);\n f2(a, b);\n };\n merged._merged = true;\n return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input'\n ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n var existing = on[event];\n var callback = data.model.callback;\n if (isDef(existing)) {\n if (\n Array.isArray(existing)\n ? existing.indexOf(callback) === -1\n : existing !== callback\n ) {\n on[event] = [callback].concat(existing);\n }\n } else {\n on[event] = callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n true && warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if ( true &&\n isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (Array.isArray(vnode)) {\n return vnode\n } else if (isDef(vnode)) {\n if (isDef(ns)) { applyNS(vnode, ns); }\n if (isDef(data)) { registerDeepBindings(data); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (\n isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n if (isObject(data.style)) {\n traverse(data.style);\n }\n if (isObject(data.class)) {\n traverse(data.class);\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n vm._staticTrees = null; // v-once cached trees\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n if (true) {\n defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n } else {}\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n if (_parentVnode) {\n vm.$scopedSlots = normalizeScopedSlots(\n _parentVnode.data.scopedSlots,\n vm.$slots,\n vm.$scopedSlots\n );\n }\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n // There's no need to maintain a stack becaues all render fns are called\n // separately from one another. Nested component's render fns are called\n // when parent component is patched.\n currentRenderingInstance = vm;\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if ( true && vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } finally {\n currentRenderingInstance = null;\n }\n // if the returned array contains only a single node, allow it\n if (Array.isArray(vnode) && vnode.length === 1) {\n vnode = vnode[0];\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if ( true && Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n var owner = currentRenderingInstance;\n if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n // already pending\n factory.owners.push(owner);\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (owner && !isDef(factory.owners)) {\n var owners = factory.owners = [owner];\n var sync = true;\n var timerLoading = null;\n var timerTimeout = null\n\n ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n var forceRender = function (renderCompleted) {\n for (var i = 0, l = owners.length; i < l; i++) {\n (owners[i]).$forceUpdate();\n }\n\n if (renderCompleted) {\n owners.length = 0;\n if (timerLoading !== null) {\n clearTimeout(timerLoading);\n timerLoading = null;\n }\n if (timerTimeout !== null) {\n clearTimeout(timerTimeout);\n timerTimeout = null;\n }\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender(true);\n } else {\n owners.length = 0;\n }\n });\n\n var reject = once(function (reason) {\n true && warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender(true);\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (isPromise(res)) {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isPromise(res.component)) {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n timerLoading = setTimeout(function () {\n timerLoading = null;\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender(false);\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n timerTimeout = setTimeout(function () {\n timerTimeout = null;\n if (isUndef(factory.resolved)) {\n reject(\n true\n ? (\"timeout (\" + (res.timeout) + \"ms)\")\n : undefined\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn) {\n target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n var _target = target;\n return function onceHandler () {\n var res = fn.apply(null, arguments);\n if (res !== null) {\n _target.$off(event, onceHandler);\n }\n }\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n vm.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n vm.$off(event[i$1], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (!fn) {\n vm._events[event] = null;\n return vm\n }\n // specific handler\n var cb;\n var i = cbs.length;\n while (i--) {\n cb = cbs[i];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i, 1);\n break\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n if (true) {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n var info = \"event handler for \\\"\" + event + \"\\\"\";\n for (var i = 0, l = cbs.length; i < l; i++) {\n invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n }\n }\n return vm\n };\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n return function () {\n activeInstance = prevActiveInstance;\n }\n}\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var restoreActiveInstance = setActiveInstance(vm);\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n restoreActiveInstance();\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction mountComponent (\n vm,\n el,\n hydrating\n) {\n vm.$el = el;\n if (!vm.$options.render) {\n vm.$options.render = createEmptyVNode;\n if (true) {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n callHook(vm, 'beforeMount');\n\n var updateComponent;\n /* istanbul ignore if */\n if ( true && config.performance && mark) {\n updateComponent = function () {\n var name = vm._name;\n var id = vm._uid;\n var startTag = \"vue-perf-start:\" + id;\n var endTag = \"vue-perf-end:\" + id;\n\n mark(startTag);\n var vnode = vm._render();\n mark(endTag);\n measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n mark(startTag);\n vm._update(vnode, hydrating);\n mark(endTag);\n measure((\"vue \" + name + \" patch\"), startTag, endTag);\n };\n } else {\n updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n }\n\n // we set this to vm._watcher inside the watcher's constructor\n // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n // component's mounted hook), which relies on vm._watcher being already defined\n new Watcher(vm, updateComponent, noop, {\n before: function before () {\n if (vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'beforeUpdate');\n }\n }\n }, true /* isRenderWatcher */);\n hydrating = false;\n\n // manually mounted instance, call mounted on self\n // mounted is called for render-created child components in its inserted hook\n if (vm.$vnode == null) {\n vm._isMounted = true;\n callHook(vm, 'mounted');\n }\n return vm\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n if (true) {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren.\n\n // check if there are dynamic scopedSlots (hand-written or compiled but with\n // dynamic slot names). Static scoped slots compiled from template has the\n // \"$stable\" marker.\n var newScopedSlots = parentVnode.data.scopedSlots;\n var oldScopedSlots = vm.$scopedSlots;\n var hasDynamicScopedSlot = !!(\n (newScopedSlots && !newScopedSlots.$stable) ||\n (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n );\n\n // Any static slot children from the parent may have changed during parent's\n // update. Dynamic scoped slots may also have changed. In such cases, a forced\n // update is necessary to ensure correctness.\n var needsForceUpdate = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n hasDynamicScopedSlot\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = parentVnode.data.attrs || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n toggleObserving(false);\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n var propOptions = vm.$options.props; // wtf flow?\n props[key] = validateProp(key, propOptions, propsData, vm);\n }\n toggleObserving(true);\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n\n // update listeners\n listeners = listeners || emptyObject;\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n\n // resolve slots + force update if has children\n if (needsForceUpdate) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n if (true) {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n // #7573 disable dep collection when invoking lifecycle hooks\n pushTarget();\n var handlers = vm.$options[hook];\n var info = hook + \" hook\";\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n popTarget();\n}\n\n/* */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n if (true) {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n var performance = window.performance;\n if (\n performance &&\n typeof performance.now === 'function' &&\n getNow() > document.createEvent('Event').timeStamp\n ) {\n // if the event timestamp, although evaluated AFTER the Date.now(), is\n // smaller than it, it means the event is using a hi-res timestamp,\n // and we need to use the hi-res version for event listener timestamps as\n // well.\n getNow = function () { return performance.now(); };\n }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n currentFlushTimestamp = getNow();\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n if (watcher.before) {\n watcher.before();\n }\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if ( true && has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n\n if ( true && !config.async) {\n flushSchedulerQueue();\n return\n }\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options,\n isRenderWatcher\n) {\n this.vm = vm;\n if (isRenderWatcher) {\n vm._watcher = this;\n }\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n this.before = options.before;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$2; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = true\n ? expOrFn.toString()\n : undefined;\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = noop;\n true && warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var i = this.deps.length;\n while (i--) {\n var dep = this.deps[i];\n if (!this.newDepIds.has(dep.id)) {\n dep.removeSub(this);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this.deps[i].removeSub(this);\n }\n this.active = false;\n }\n};\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n if (!isRoot) {\n toggleObserving(false);\n }\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n if (true) {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive$$1(props, key, value, function () {\n if (!isRoot && !isUpdatingChildComponent) {\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n } else {}\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n toggleObserving(true);\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n true && warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n if (true) {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n true && warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n // #7573 disable dep collection when invoking data getters\n pushTarget();\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n } finally {\n popTarget();\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n // $flow-disable-line\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if ( true && getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else if (true) {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : createGetterInvoker(userDef);\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : createGetterInvoker(userDef.get)\n : noop;\n sharedPropertyDefinition.set = userDef.set || noop;\n }\n if ( true &&\n sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction createGetterInvoker(fn) {\n return function computedGetter () {\n return fn.call(this, this)\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n if (true) {\n if (typeof methods[key] !== 'function') {\n warn(\n \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n expOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n if (true) {\n dataDef.set = function () {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n try {\n cb.call(vm, watcher.value);\n } catch (error) {\n handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n }\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid$3++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if ( true && config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n if (true) {\n initProxy(vm);\n } else {}\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n initInjections(vm); // resolve injections before data/props\n initState(vm);\n initProvide(vm); // resolve provide after data/props\n callHook(vm, 'created');\n\n /* istanbul ignore if */\n if ( true && config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n var parentVnode = options._parentVnode;\n opts.parent = options.parent;\n opts._parentVnode = parentVnode;\n\n var vnodeComponentOptions = parentVnode.componentOptions;\n opts.propsData = vnodeComponentOptions.propsData;\n opts._parentListeners = vnodeComponentOptions.listeners;\n opts._renderChildren = vnodeComponentOptions.children;\n opts._componentTag = vnodeComponentOptions.tag;\n\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = latest[key];\n }\n }\n return modified\n}\n\nfunction Vue (options) {\n if ( true &&\n !(this instanceof Vue)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if ( true && name) {\n validateComponentName(name);\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if ( true && type === 'component') {\n validateComponentName(id);\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\n\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n for (var key in this.cache) {\n pruneCacheEntry(this.cache, key, this.keys);\n }\n },\n\n mounted: function mounted () {\n var this$1 = this;\n\n this.$watch('include', function (val) {\n pruneCache(this$1, function (name) { return matches(val, name); });\n });\n this.$watch('exclude', function (val) {\n pruneCache(this$1, function (name) { return !matches(val, name); });\n });\n },\n\n render: function render () {\n var slot = this.$slots.default;\n var vnode = getFirstComponentChild(slot);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n var ref = this;\n var include = ref.include;\n var exclude = ref.exclude;\n if (\n // not included\n (include && (!name || !matches(include, name))) ||\n // excluded\n (exclude && name && matches(exclude, name))\n ) {\n return vnode\n }\n\n var ref$1 = this;\n var cache = ref$1.cache;\n var keys = ref$1.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode || (slot && slot[0])\n }\n};\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n};\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n if (true) {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive$$1\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n // 2.6 explicit observable API\n Vue.observable = function (obj) {\n observe(obj);\n return obj\n };\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/* */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n return (\n (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n (attr === 'selected' && tag === 'option') ||\n (attr === 'checked' && tag === 'input') ||\n (attr === 'muted' && tag === 'video')\n )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n return isFalsyAttrValue(value) || value === 'false'\n ? 'false'\n // allow arbitrary string value for contenteditable\n : key === 'contenteditable' && isValidContentEditableValue(value)\n ? value\n : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n 'required,reversed,scoped,seamless,selected,sortable,translate,' +\n 'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n return val == null || val === false\n};\n\n/* */\n\nfunction genClassForVnode (vnode) {\n var data = vnode.data;\n var parentNode = vnode;\n var childNode = vnode;\n while (isDef(childNode.componentInstance)) {\n childNode = childNode.componentInstance._vnode;\n if (childNode && childNode.data) {\n data = mergeClassData(childNode.data, data);\n }\n }\n while (isDef(parentNode = parentNode.parent)) {\n if (parentNode && parentNode.data) {\n data = mergeClassData(data, parentNode.data);\n }\n }\n return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n return {\n staticClass: concat(child.staticClass, parent.staticClass),\n class: isDef(child.class)\n ? [child.class, parent.class]\n : parent.class\n }\n}\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar namespaceMap = {\n svg: 'http://www.w3.org/2000/svg',\n math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n 'html,body,base,head,link,meta,style,title,' +\n 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n 'embed,object,param,source,canvas,script,noscript,del,ins,' +\n 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n 'output,progress,select,textarea,' +\n 'details,dialog,menu,menuitem,summary,' +\n 'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n true\n);\n\nvar isReservedTag = function (tag) {\n return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n if (isSVG(tag)) {\n return 'svg'\n }\n // basic support for MathML\n // note it doesn't support other MathML elements being component roots\n if (tag === 'math') {\n return 'math'\n }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n /* istanbul ignore if */\n if (!inBrowser) {\n return true\n }\n if (isReservedTag(tag)) {\n return false\n }\n tag = tag.toLowerCase();\n /* istanbul ignore if */\n if (unknownElementCache[tag] != null) {\n return unknownElementCache[tag]\n }\n var el = document.createElement(tag);\n if (tag.indexOf('-') > -1) {\n // http://stackoverflow.com/a/28210364/1070244\n return (unknownElementCache[tag] = (\n el.constructor === window.HTMLUnknownElement ||\n el.constructor === window.HTMLElement\n ))\n } else {\n return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/* */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n if (typeof el === 'string') {\n var selected = document.querySelector(el);\n if (!selected) {\n true && warn(\n 'Cannot find element: ' + el\n );\n return document.createElement('div')\n }\n return selected\n } else {\n return el\n }\n}\n\n/* */\n\nfunction createElement$1 (tagName, vnode) {\n var elm = document.createElement(tagName);\n if (tagName !== 'select') {\n return elm\n }\n // false or null will remove the attribute but undefined will not\n if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n elm.setAttribute('multiple', 'multiple');\n }\n return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n node.appendChild(child);\n}\n\nfunction parentNode (node) {\n return node.parentNode\n}\n\nfunction nextSibling (node) {\n return node.nextSibling\n}\n\nfunction tagName (node) {\n return node.tagName\n}\n\nfunction setTextContent (node, text) {\n node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n createElement: createElement$1,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n setStyleScope: setStyleScope\n});\n\n/* */\n\nvar ref = {\n create: function create (_, vnode) {\n registerRef(vnode);\n },\n update: function update (oldVnode, vnode) {\n if (oldVnode.data.ref !== vnode.data.ref) {\n registerRef(oldVnode, true);\n registerRef(vnode);\n }\n },\n destroy: function destroy (vnode) {\n registerRef(vnode, true);\n }\n};\n\nfunction registerRef (vnode, isRemoval) {\n var key = vnode.data.ref;\n if (!isDef(key)) { return }\n\n var vm = vnode.context;\n var ref = vnode.componentInstance || vnode.elm;\n var refs = vm.$refs;\n if (isRemoval) {\n if (Array.isArray(refs[key])) {\n remove(refs[key], ref);\n } else if (refs[key] === ref) {\n refs[key] = undefined;\n }\n } else {\n if (vnode.data.refInFor) {\n if (!Array.isArray(refs[key])) {\n refs[key] = [ref];\n } else if (refs[key].indexOf(ref) < 0) {\n // $flow-disable-line\n refs[key].push(ref);\n }\n } else {\n refs[key] = ref;\n }\n }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n return (\n a.key === b.key && (\n (\n a.tag === b.tag &&\n a.isComment === b.isComment &&\n isDef(a.data) === isDef(b.data) &&\n sameInputType(a, b)\n ) || (\n isTrue(a.isAsyncPlaceholder) &&\n a.asyncFactory === b.asyncFactory &&\n isUndef(b.asyncFactory.error)\n )\n )\n )\n}\n\nfunction sameInputType (a, b) {\n if (a.tag !== 'input') { return true }\n var i;\n var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n var i, key;\n var map = {};\n for (i = beginIdx; i <= endIdx; ++i) {\n key = children[i].key;\n if (isDef(key)) { map[key] = i; }\n }\n return map\n}\n\nfunction createPatchFunction (backend) {\n var i, j;\n var cbs = {};\n\n var modules = backend.modules;\n var nodeOps = backend.nodeOps;\n\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n if (isDef(modules[j][hooks[i]])) {\n cbs[hooks[i]].push(modules[j][hooks[i]]);\n }\n }\n }\n\n function emptyNodeAt (elm) {\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n }\n\n function createRmCb (childElm, listeners) {\n function remove$$1 () {\n if (--remove$$1.listeners === 0) {\n removeNode(childElm);\n }\n }\n remove$$1.listeners = listeners;\n return remove$$1\n }\n\n function removeNode (el) {\n var parent = nodeOps.parentNode(el);\n // element may have already been removed due to v-html / v-text\n if (isDef(parent)) {\n nodeOps.removeChild(parent, el);\n }\n }\n\n function isUnknownElement$$1 (vnode, inVPre) {\n return (\n !inVPre &&\n !vnode.ns &&\n !(\n config.ignoredElements.length &&\n config.ignoredElements.some(function (ignore) {\n return isRegExp(ignore)\n ? ignore.test(vnode.tag)\n : ignore === vnode.tag\n })\n ) &&\n config.isUnknownElement(vnode.tag)\n )\n }\n\n var creatingElmInVPre = 0;\n\n function createElm (\n vnode,\n insertedVnodeQueue,\n parentElm,\n refElm,\n nested,\n ownerArray,\n index\n ) {\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // This vnode was used in a previous render!\n // now it's used as a new node, overwriting its elm would cause\n // potential patch errors down the road when it's used as an insertion\n // reference node. Instead, we clone the node on-demand before creating\n // associated DOM element for it.\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n vnode.isRootInsert = !nested; // for transition enter check\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n return\n }\n\n var data = vnode.data;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n if (true) {\n if (data && data.pre) {\n creatingElmInVPre++;\n }\n if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n warn(\n 'Unknown custom element: <' + tag + '> - did you ' +\n 'register the component correctly? For recursive components, ' +\n 'make sure to provide the \"name\" option.',\n vnode.context\n );\n }\n }\n\n vnode.elm = vnode.ns\n ? nodeOps.createElementNS(vnode.ns, tag)\n : nodeOps.createElement(tag, vnode);\n setScope(vnode);\n\n /* istanbul ignore if */\n {\n createChildren(vnode, children, insertedVnodeQueue);\n if (isDef(data)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n }\n insert(parentElm, vnode.elm, refElm);\n }\n\n if ( true && data && data.pre) {\n creatingElmInVPre--;\n }\n } else if (isTrue(vnode.isComment)) {\n vnode.elm = nodeOps.createComment(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n } else {\n vnode.elm = nodeOps.createTextNode(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n }\n }\n\n function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i = vnode.data;\n if (isDef(i)) {\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n if (isDef(i = i.hook) && isDef(i = i.init)) {\n i(vnode, false /* hydrating */);\n }\n // after calling the init hook, if the vnode is a child component\n // it should've created a child instance and mounted it. the child\n // component also has set the placeholder vnode's elm.\n // in that case we can just return the element and be done.\n if (isDef(vnode.componentInstance)) {\n initComponent(vnode, insertedVnodeQueue);\n insert(parentElm, vnode.elm, refElm);\n if (isTrue(isReactivated)) {\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n }\n return true\n }\n }\n }\n\n function initComponent (vnode, insertedVnodeQueue) {\n if (isDef(vnode.data.pendingInsert)) {\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n vnode.data.pendingInsert = null;\n }\n vnode.elm = vnode.componentInstance.$el;\n if (isPatchable(vnode)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n setScope(vnode);\n } else {\n // empty component root.\n // skip all element-related modules except for ref (#3455)\n registerRef(vnode);\n // make sure to invoke the insert hook\n insertedVnodeQueue.push(vnode);\n }\n }\n\n function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i;\n // hack for #4339: a reactivated component with inner transition\n // does not trigger because the inner node's created hooks are not called\n // again. It's not ideal to involve module-specific logic in here but\n // there doesn't seem to be a better way to do it.\n var innerNode = vnode;\n while (innerNode.componentInstance) {\n innerNode = innerNode.componentInstance._vnode;\n if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n for (i = 0; i < cbs.activate.length; ++i) {\n cbs.activate[i](emptyNode, innerNode);\n }\n insertedVnodeQueue.push(innerNode);\n break\n }\n }\n // unlike a newly created component,\n // a reactivated keep-alive component doesn't insert itself\n insert(parentElm, vnode.elm, refElm);\n }\n\n function insert (parent, elm, ref$$1) {\n if (isDef(parent)) {\n if (isDef(ref$$1)) {\n if (nodeOps.parentNode(ref$$1) === parent) {\n nodeOps.insertBefore(parent, elm, ref$$1);\n }\n } else {\n nodeOps.appendChild(parent, elm);\n }\n }\n }\n\n function createChildren (vnode, children, insertedVnodeQueue) {\n if (Array.isArray(children)) {\n if (true) {\n checkDuplicateKeys(children);\n }\n for (var i = 0; i < children.length; ++i) {\n createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n }\n } else if (isPrimitive(vnode.text)) {\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n }\n }\n\n function isPatchable (vnode) {\n while (vnode.componentInstance) {\n vnode = vnode.componentInstance._vnode;\n }\n return isDef(vnode.tag)\n }\n\n function invokeCreateHooks (vnode, insertedVnodeQueue) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, vnode);\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (isDef(i.create)) { i.create(emptyNode, vnode); }\n if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n }\n }\n\n // set scope id attribute for scoped CSS.\n // this is implemented as a special case to avoid the overhead\n // of going through the normal attribute patching process.\n function setScope (vnode) {\n var i;\n if (isDef(i = vnode.fnScopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n } else {\n var ancestor = vnode;\n while (ancestor) {\n if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n ancestor = ancestor.parent;\n }\n }\n // for slot content they should also get the scopeId from the host instance.\n if (isDef(i = activeInstance) &&\n i !== vnode.context &&\n i !== vnode.fnContext &&\n isDef(i = i.$options._scopeId)\n ) {\n nodeOps.setStyleScope(vnode.elm, i);\n }\n }\n\n function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n }\n }\n\n function invokeDestroyHook (vnode) {\n var i, j;\n var data = vnode.data;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n }\n if (isDef(i = vnode.children)) {\n for (j = 0; j < vnode.children.length; ++j) {\n invokeDestroyHook(vnode.children[j]);\n }\n }\n }\n\n function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (isDef(ch)) {\n if (isDef(ch.tag)) {\n removeAndInvokeRemoveHook(ch);\n invokeDestroyHook(ch);\n } else { // Text node\n removeNode(ch.elm);\n }\n }\n }\n }\n\n function removeAndInvokeRemoveHook (vnode, rm) {\n if (isDef(rm) || isDef(vnode.data)) {\n var i;\n var listeners = cbs.remove.length + 1;\n if (isDef(rm)) {\n // we have a recursively passed down rm callback\n // increase the listeners count\n rm.listeners += listeners;\n } else {\n // directly removing\n rm = createRmCb(vnode.elm, listeners);\n }\n // recursively invoke hooks on child component root node\n if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n removeAndInvokeRemoveHook(i, rm);\n }\n for (i = 0; i < cbs.remove.length; ++i) {\n cbs.remove[i](vnode, rm);\n }\n if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n i(vnode, rm);\n } else {\n rm();\n }\n } else {\n removeNode(vnode.elm);\n }\n }\n\n function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n // removeOnly is a special flag used only by <transition-group>\n // to ensure removed elements stay in correct relative positions\n // during leaving transitions\n var canMove = !removeOnly;\n\n if (true) {\n checkDuplicateKeys(newCh);\n }\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (isUndef(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n } else if (isUndef(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n idxInOld = isDef(newStartVnode.key)\n ? oldKeyToIdx[newStartVnode.key]\n : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n if (isUndef(idxInOld)) { // New element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n } else {\n vnodeToMove = oldCh[idxInOld];\n if (sameVnode(vnodeToMove, newStartVnode)) {\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n oldCh[idxInOld] = undefined;\n canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n } else {\n // same key but different element. treat as new element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx > oldEndIdx) {\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n\n function checkDuplicateKeys (children) {\n var seenKeys = {};\n for (var i = 0; i < children.length; i++) {\n var vnode = children[i];\n var key = vnode.key;\n if (isDef(key)) {\n if (seenKeys[key]) {\n warn(\n (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n vnode.context\n );\n } else {\n seenKeys[key] = true;\n }\n }\n }\n }\n\n function findIdxInOld (node, oldCh, start, end) {\n for (var i = start; i < end; i++) {\n var c = oldCh[i];\n if (isDef(c) && sameVnode(node, c)) { return i }\n }\n }\n\n function patchVnode (\n oldVnode,\n vnode,\n insertedVnodeQueue,\n ownerArray,\n index,\n removeOnly\n ) {\n if (oldVnode === vnode) {\n return\n }\n\n if (isDef(vnode.elm) && isDef(ownerArray)) {\n // clone reused vnode\n vnode = ownerArray[index] = cloneVNode(vnode);\n }\n\n var elm = vnode.elm = oldVnode.elm;\n\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\n if (isDef(vnode.asyncFactory.resolved)) {\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n } else {\n vnode.isAsyncPlaceholder = true;\n }\n return\n }\n\n // reuse element for static trees.\n // note we only do this if the vnode is cloned -\n // if the new node is not cloned it means the render functions have been\n // reset by the hot-reload-api and we need to do a proper re-render.\n if (isTrue(vnode.isStatic) &&\n isTrue(oldVnode.isStatic) &&\n vnode.key === oldVnode.key &&\n (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n ) {\n vnode.componentInstance = oldVnode.componentInstance;\n return\n }\n\n var i;\n var data = vnode.data;\n if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n i(oldVnode, vnode);\n }\n\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (isDef(data) && isPatchable(vnode)) {\n for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n } else if (isDef(ch)) {\n if (true) {\n checkDuplicateKeys(ch);\n }\n if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n nodeOps.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n nodeOps.setTextContent(elm, vnode.text);\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n }\n }\n\n function invokeInsertHook (vnode, queue, initial) {\n // delay insert hooks for component root nodes, invoke them after the\n // element is really inserted\n if (isTrue(initial) && isDef(vnode.parent)) {\n vnode.parent.data.pendingInsert = queue;\n } else {\n for (var i = 0; i < queue.length; ++i) {\n queue[i].data.hook.insert(queue[i]);\n }\n }\n }\n\n var hydrationBailed = false;\n // list of modules that can skip create hook during hydration because they\n // are already rendered on the client or has no need for initialization\n // Note: style is excluded because it relies on initial clone for future\n // deep updates (#7063).\n var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\n function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n var i;\n var tag = vnode.tag;\n var data = vnode.data;\n var children = vnode.children;\n inVPre = inVPre || (data && data.pre);\n vnode.elm = elm;\n\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n vnode.isAsyncPlaceholder = true;\n return true\n }\n // assert node match\n if (true) {\n if (!assertNodeMatch(elm, vnode, inVPre)) {\n return false\n }\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n if (isDef(i = vnode.componentInstance)) {\n // child component. it should have hydrated its own tree.\n initComponent(vnode, insertedVnodeQueue);\n return true\n }\n }\n if (isDef(tag)) {\n if (isDef(children)) {\n // empty element, allow client to pick up and populate children\n if (!elm.hasChildNodes()) {\n createChildren(vnode, children, insertedVnodeQueue);\n } else {\n // v-html and domProps: innerHTML\n if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n if (i !== elm.innerHTML) {\n /* istanbul ignore if */\n if ( true &&\n typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('server innerHTML: ', i);\n console.warn('client innerHTML: ', elm.innerHTML);\n }\n return false\n }\n } else {\n // iterate and compare children lists\n var childrenMatch = true;\n var childNode = elm.firstChild;\n for (var i$1 = 0; i$1 < children.length; i$1++) {\n if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n childrenMatch = false;\n break\n }\n childNode = childNode.nextSibling;\n }\n // if childNode is not null, it means the actual childNodes list is\n // longer than the virtual children list.\n if (!childrenMatch || childNode) {\n /* istanbul ignore if */\n if ( true &&\n typeof console !== 'undefined' &&\n !hydrationBailed\n ) {\n hydrationBailed = true;\n console.warn('Parent: ', elm);\n console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n }\n return false\n }\n }\n }\n }\n if (isDef(data)) {\n var fullInvoke = false;\n for (var key in data) {\n if (!isRenderedModule(key)) {\n fullInvoke = true;\n invokeCreateHooks(vnode, insertedVnodeQueue);\n break\n }\n }\n if (!fullInvoke && data['class']) {\n // ensure collecting deps for deep class bindings for future updates\n traverse(data['class']);\n }\n }\n } else if (elm.data !== vnode.text) {\n elm.data = vnode.text;\n }\n return true\n }\n\n function assertNodeMatch (node, vnode, inVPre) {\n if (isDef(vnode.tag)) {\n return vnode.tag.indexOf('vue-component') === 0 || (\n !isUnknownElement$$1(vnode, inVPre) &&\n vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n )\n } else {\n return node.nodeType === (vnode.isComment ? 8 : 3)\n }\n }\n\n return function patch (oldVnode, vnode, hydrating, removeOnly) {\n if (isUndef(vnode)) {\n if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n return\n }\n\n var isInitialPatch = false;\n var insertedVnodeQueue = [];\n\n if (isUndef(oldVnode)) {\n // empty mount (likely as component), create new root element\n isInitialPatch = true;\n createElm(vnode, insertedVnodeQueue);\n } else {\n var isRealElement = isDef(oldVnode.nodeType);\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\n // patch existing root node\n patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n } else {\n if (isRealElement) {\n // mounting to a real element\n // check if this is server-rendered content and if we can perform\n // a successful hydration.\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n oldVnode.removeAttribute(SSR_ATTR);\n hydrating = true;\n }\n if (isTrue(hydrating)) {\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n invokeInsertHook(vnode, insertedVnodeQueue, true);\n return oldVnode\n } else if (true) {\n warn(\n 'The client-side rendered virtual DOM tree is not matching ' +\n 'server-rendered content. This is likely caused by incorrect ' +\n 'HTML markup, for example nesting block-level elements inside ' +\n '<p>, or missing <tbody>. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm = nodeOps.parentNode(oldElm);\n\n // create new node\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm,\n nodeOps.nextSibling(oldElm)\n );\n\n // update parent placeholder node element, recursively\n if (isDef(vnode.parent)) {\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n // destroy old node\n if (isDef(parentElm)) {\n removeVnodes(parentElm, [oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n dir.oldArg = oldDir.arg;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode, 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n // $flow-disable-line\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n // $flow-disable-line\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n // $flow-disable-line\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n];\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (el.tagName.indexOf('-') > -1) {\n baseSetAttr(el, key, value);\n } else if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. <option disabled>Select one</option>\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for <iframe>,\n // but Flash expects a value of \"true\" when used on <embed> tag\n value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n ? 'true'\n : key;\n el.setAttribute(key, value);\n }\n } else if (isEnumeratedAttr(key)) {\n el.setAttribute(key, convertEnumeratedValue(key, value));\n } else if (isXlink(key)) {\n if (isFalsyAttrValue(value)) {\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n baseSetAttr(el, key, value);\n }\n}\n\nfunction baseSetAttr (el, key, value) {\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // #7138: IE10 & 11 fires input event when setting placeholder on\n // <textarea>... block the first input event and remove the blocker\n // immediately.\n /* istanbul ignore if */\n if (\n isIE && !isIE9 &&\n el.tagName === 'TEXTAREA' &&\n key === 'placeholder' && value !== '' && !el.__ieph\n ) {\n var blocker = function (e) {\n e.stopImmediatePropagation();\n el.removeEventListener('input', blocker);\n };\n el.addEventListener('input', blocker);\n // $flow-disable-line\n el.__ieph = true; /* IE placeholder patched */\n }\n el.setAttribute(key, value);\n }\n}\n\nvar attrs = {\n create: updateAttrs,\n update: updateAttrs\n};\n\n/* */\n\nfunction updateClass (oldVnode, vnode) {\n var el = vnode.elm;\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (\n isUndef(data.staticClass) &&\n isUndef(data.class) && (\n isUndef(oldData) || (\n isUndef(oldData.staticClass) &&\n isUndef(oldData.class)\n )\n )\n ) {\n return\n }\n\n var cls = genClassForVnode(vnode);\n\n // handle transition classes\n var transitionClass = el._transitionClasses;\n if (isDef(transitionClass)) {\n cls = concat(cls, stringifyClass(transitionClass));\n }\n\n // set the class\n if (cls !== el._prevClass) {\n el.setAttribute('class', cls);\n el._prevClass = cls;\n }\n}\n\nvar klass = {\n create: updateClass,\n update: updateClass\n};\n\n/* */\n\n/* */\n\n/* */\n\n/* */\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\n/* */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n /* istanbul ignore if */\n if (isDef(on[RANGE_TOKEN])) {\n // IE input[type=range] only supports `change` event\n var event = isIE ? 'change' : 'input';\n on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n delete on[RANGE_TOKEN];\n }\n // This was originally intended to fix #4521 but no longer necessary\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n /* istanbul ignore if */\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n delete on[CHECKBOX_RADIO_TOKEN];\n }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n var _target = target$1; // save current target element in closure\n return function onceHandler () {\n var res = handler.apply(null, arguments);\n if (res !== null) {\n remove$2(event, onceHandler, capture, _target);\n }\n }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n name,\n handler,\n capture,\n passive\n) {\n // async edge case #6566: inner click event triggers patch, event handler\n // attached to outer element during patch, and triggered again. This\n // happens because browsers fire microtask ticks between event propagation.\n // the solution is simple: we save the timestamp when a handler is attached,\n // and the handler would only fire if the event passed to it was fired\n // AFTER it was attached.\n if (useMicrotaskFix) {\n var attachedTimestamp = currentFlushTimestamp;\n var original = handler;\n handler = original._wrapper = function (e) {\n if (\n // no bubbling, should always fire.\n // this is just a safety net in case event.timeStamp is unreliable in\n // certain weird environments...\n e.target === e.currentTarget ||\n // event is fired after handler attachment\n e.timeStamp >= attachedTimestamp ||\n // bail for environments that have buggy event.timeStamp implementations\n // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n // #9681 QtWebEngine event.timeStamp is negative value\n e.timeStamp <= 0 ||\n // #9448 bail if event is fired in another document in a multi-page\n // electron/nw.js app, since event.timeStamp will be using a different\n // starting reference\n e.target.ownerDocument !== document\n ) {\n return original.apply(this, arguments)\n }\n };\n }\n target$1.addEventListener(\n name,\n handler,\n supportsPassive\n ? { capture: capture, passive: passive }\n : capture\n );\n}\n\nfunction remove$2 (\n name,\n handler,\n capture,\n _target\n) {\n (_target || target$1).removeEventListener(\n name,\n handler._wrapper || handler,\n capture\n );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n return\n }\n var on = vnode.data.on || {};\n var oldOn = oldVnode.data.on || {};\n target$1 = vnode.elm;\n normalizeEvents(on);\n updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n target$1 = undefined;\n}\n\nvar events = {\n create: updateDOMListeners,\n update: updateDOMListeners\n};\n\n/* */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n return\n }\n var key, cur;\n var elm = vnode.elm;\n var oldProps = oldVnode.data.domProps || {};\n var props = vnode.data.domProps || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(props.__ob__)) {\n props = vnode.data.domProps = extend({}, props);\n }\n\n for (key in oldProps) {\n if (!(key in props)) {\n elm[key] = '';\n }\n }\n\n for (key in props) {\n cur = props[key];\n // ignore children if the node has textContent or innerHTML,\n // as these will throw away existing DOM nodes and cause removal errors\n // on subsequent patches (#3360)\n if (key === 'textContent' || key === 'innerHTML') {\n if (vnode.children) { vnode.children.length = 0; }\n if (cur === oldProps[key]) { continue }\n // #6601 work around Chrome version <= 55 bug where single textNode\n // replaced by innerHTML/textContent retains its parentNode property\n if (elm.childNodes.length === 1) {\n elm.removeChild(elm.childNodes[0]);\n }\n }\n\n if (key === 'value' && elm.tagName !== 'PROGRESS') {\n // store value as _value as well since\n // non-string values will be stringified\n elm._value = cur;\n // avoid resetting cursor position when value is the same\n var strCur = isUndef(cur) ? '' : String(cur);\n if (shouldUpdateValue(elm, strCur)) {\n elm.value = strCur;\n }\n } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n // IE doesn't support innerHTML for SVG elements\n svgContainer = svgContainer || document.createElement('div');\n svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n var svg = svgContainer.firstChild;\n while (elm.firstChild) {\n elm.removeChild(elm.firstChild);\n }\n while (svg.firstChild) {\n elm.appendChild(svg.firstChild);\n }\n } else if (\n // skip the update if old and new VDOM state is the same.\n // `value` is handled separately because the DOM value may be temporarily\n // out of sync with VDOM state due to focus, composition and modifiers.\n // This #4521 by skipping the unnecesarry `checked` update.\n cur !== oldProps[key]\n ) {\n // some property updates can throw\n // e.g. `value` on <progress> w/ non-finite value\n try {\n elm[key] = cur;\n } catch (e) {}\n }\n }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n return (!elm.composing && (\n elm.tagName === 'OPTION' ||\n isNotInFocusAndDirty(elm, checkVal) ||\n isDirtyWithModifiers(elm, checkVal)\n ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n // return true when textbox (.number and .trim) loses focus and its value is\n // not equal to the updated value\n var notInFocus = true;\n // #6157\n // work around IE bug when accessing document.activeElement in an iframe\n try { notInFocus = document.activeElement !== elm; } catch (e) {}\n return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n var value = elm.value;\n var modifiers = elm._vModifiers; // injected by v-model runtime\n if (isDef(modifiers)) {\n if (modifiers.number) {\n return toNumber(value) !== toNumber(newVal)\n }\n if (modifiers.trim) {\n return value.trim() !== newVal.trim()\n }\n }\n return value !== newVal\n}\n\nvar domProps = {\n create: updateDOMProps,\n update: updateDOMProps\n};\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n var style = normalizeStyleBinding(data.style);\n // static style is pre-processed into an object during compilation\n // and is always a fresh object, so it's safe to merge into it\n return data.staticStyle\n ? extend(data.staticStyle, style)\n : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n var res = {};\n var styleData;\n\n if (checkChild) {\n var childNode = vnode;\n while (childNode.componentInstance) {\n childNode = childNode.componentInstance._vnode;\n if (\n childNode && childNode.data &&\n (styleData = normalizeStyleData(childNode.data))\n ) {\n extend(res, styleData);\n }\n }\n }\n\n if ((styleData = normalizeStyleData(vnode.data))) {\n extend(res, styleData);\n }\n\n var parentNode = vnode;\n while ((parentNode = parentNode.parent)) {\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n extend(res, styleData);\n }\n }\n return res\n}\n\n/* */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n /* istanbul ignore if */\n if (cssVarRE.test(name)) {\n el.style.setProperty(name, val);\n } else if (importantRE.test(val)) {\n el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n } else {\n var normalizedName = normalize(name);\n if (Array.isArray(val)) {\n // Support values array created by autoprefixer, e.g.\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n // Set them one by one, and the browser will only set those it can recognize\n for (var i = 0, len = val.length; i < len; i++) {\n el.style[normalizedName] = val[i];\n }\n } else {\n el.style[normalizedName] = val;\n }\n }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n emptyStyle = emptyStyle || document.createElement('div').style;\n prop = camelize(prop);\n if (prop !== 'filter' && (prop in emptyStyle)) {\n return prop\n }\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n for (var i = 0; i < vendorNames.length; i++) {\n var name = vendorNames[i] + capName;\n if (name in emptyStyle) {\n return name\n }\n }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n var data = vnode.data;\n var oldData = oldVnode.data;\n\n if (isUndef(data.staticStyle) && isUndef(data.style) &&\n isUndef(oldData.staticStyle) && isUndef(oldData.style)\n ) {\n return\n }\n\n var cur, name;\n var el = vnode.elm;\n var oldStaticStyle = oldData.staticStyle;\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n var oldStyle = oldStaticStyle || oldStyleBinding;\n\n var style = normalizeStyleBinding(vnode.data.style) || {};\n\n // store normalized style under a different key for next diff\n // make sure to clone it if it's reactive, since the user likely wants\n // to mutate it.\n vnode.data.normalizedStyle = isDef(style.__ob__)\n ? extend({}, style)\n : style;\n\n var newStyle = getStyle(vnode, true);\n\n for (name in oldStyle) {\n if (isUndef(newStyle[name])) {\n setProp(el, name, '');\n }\n }\n for (name in newStyle) {\n cur = newStyle[name];\n if (cur !== oldStyle[name]) {\n // ie9 setting to null has no effect, must use empty string\n setProp(el, name, cur == null ? '' : cur);\n }\n }\n}\n\nvar style = {\n create: updateStyle,\n update: updateStyle\n};\n\n/* */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n } else {\n el.classList.add(cls);\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.setAttribute('class', (cur + cls).trim());\n }\n }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n } else {\n el.classList.remove(cls);\n }\n if (!el.classList.length) {\n el.removeAttribute('class');\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n var tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n cur = cur.trim();\n if (cur) {\n el.setAttribute('class', cur);\n } else {\n el.removeAttribute('class');\n }\n }\n}\n\n/* */\n\nfunction resolveTransition (def$$1) {\n if (!def$$1) {\n return\n }\n /* istanbul ignore else */\n if (typeof def$$1 === 'object') {\n var res = {};\n if (def$$1.css !== false) {\n extend(res, autoCssTransition(def$$1.name || 'v'));\n }\n extend(res, def$$1);\n return res\n } else if (typeof def$$1 === 'string') {\n return autoCssTransition(def$$1)\n }\n}\n\nvar autoCssTransition = cached(function (name) {\n return {\n enterClass: (name + \"-enter\"),\n enterToClass: (name + \"-enter-to\"),\n enterActiveClass: (name + \"-enter-active\"),\n leaveClass: (name + \"-leave\"),\n leaveToClass: (name + \"-leave-to\"),\n leaveActiveClass: (name + \"-leave-active\")\n }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n /* istanbul ignore if */\n if (window.ontransitionend === undefined &&\n window.onwebkittransitionend !== undefined\n ) {\n transitionProp = 'WebkitTransition';\n transitionEndEvent = 'webkitTransitionEnd';\n }\n if (window.onanimationend === undefined &&\n window.onwebkitanimationend !== undefined\n ) {\n animationProp = 'WebkitAnimation';\n animationEndEvent = 'webkitAnimationEnd';\n }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n ? window.requestAnimationFrame\n ? window.requestAnimationFrame.bind(window)\n : setTimeout\n : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n raf(function () {\n raf(fn);\n });\n}\n\nfunction addTransitionClass (el, cls) {\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n if (transitionClasses.indexOf(cls) < 0) {\n transitionClasses.push(cls);\n addClass(el, cls);\n }\n}\n\nfunction removeTransitionClass (el, cls) {\n if (el._transitionClasses) {\n remove(el._transitionClasses, cls);\n }\n removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n el,\n expectedType,\n cb\n) {\n var ref = getTransitionInfo(el, expectedType);\n var type = ref.type;\n var timeout = ref.timeout;\n var propCount = ref.propCount;\n if (!type) { return cb() }\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n var ended = 0;\n var end = function () {\n el.removeEventListener(event, onEnd);\n cb();\n };\n var onEnd = function (e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end();\n }\n }\n };\n setTimeout(function () {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n var styles = window.getComputedStyle(el);\n // JSDOM may return undefined for transition properties\n var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n var type;\n var timeout = 0;\n var propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0\n ? transitionTimeout > animationTimeout\n ? TRANSITION\n : ANIMATION\n : null;\n propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0;\n }\n var hasTransform =\n type === TRANSITION &&\n transformRE.test(styles[transitionProp + 'Property']);\n return {\n type: type,\n timeout: timeout,\n propCount: propCount,\n hasTransform: hasTransform\n }\n}\n\nfunction getTimeout (delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n\n return Math.max.apply(null, durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i])\n }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/* */\n\nfunction enter (vnode, toggleDisplay) {\n var el = vnode.elm;\n\n // call leave callback now\n if (isDef(el._leaveCb)) {\n el._leaveCb.cancelled = true;\n el._leaveCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return\n }\n\n /* istanbul ignore if */\n if (isDef(el._enterCb) || el.nodeType !== 1) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var enterClass = data.enterClass;\n var enterToClass = data.enterToClass;\n var enterActiveClass = data.enterActiveClass;\n var appearClass = data.appearClass;\n var appearToClass = data.appearToClass;\n var appearActiveClass = data.appearActiveClass;\n var beforeEnter = data.beforeEnter;\n var enter = data.enter;\n var afterEnter = data.afterEnter;\n var enterCancelled = data.enterCancelled;\n var beforeAppear = data.beforeAppear;\n var appear = data.appear;\n var afterAppear = data.afterAppear;\n var appearCancelled = data.appearCancelled;\n var duration = data.duration;\n\n // activeInstance will always be the <transition> component managing this\n // transition. One edge case to check is when the <transition> is placed\n // as the root node of a child component. In that case we need to check\n // <transition>'s parent for appear check.\n var context = activeInstance;\n var transitionNode = activeInstance.$vnode;\n while (transitionNode && transitionNode.parent) {\n context = transitionNode.context;\n transitionNode = transitionNode.parent;\n }\n\n var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n if (isAppear && !appear && appear !== '') {\n return\n }\n\n var startClass = isAppear && appearClass\n ? appearClass\n : enterClass;\n var activeClass = isAppear && appearActiveClass\n ? appearActiveClass\n : enterActiveClass;\n var toClass = isAppear && appearToClass\n ? appearToClass\n : enterToClass;\n\n var beforeEnterHook = isAppear\n ? (beforeAppear || beforeEnter)\n : beforeEnter;\n var enterHook = isAppear\n ? (typeof appear === 'function' ? appear : enter)\n : enter;\n var afterEnterHook = isAppear\n ? (afterAppear || afterEnter)\n : afterEnter;\n var enterCancelledHook = isAppear\n ? (appearCancelled || enterCancelled)\n : enterCancelled;\n\n var explicitEnterDuration = toNumber(\n isObject(duration)\n ? duration.enter\n : duration\n );\n\n if ( true && explicitEnterDuration != null) {\n checkDuration(explicitEnterDuration, 'enter', vnode);\n }\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(enterHook);\n\n var cb = el._enterCb = once(function () {\n if (expectsCSS) {\n removeTransitionClass(el, toClass);\n removeTransitionClass(el, activeClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, startClass);\n }\n enterCancelledHook && enterCancelledHook(el);\n } else {\n afterEnterHook && afterEnterHook(el);\n }\n el._enterCb = null;\n });\n\n if (!vnode.data.show) {\n // remove pending leave element on enter by injecting an insert hook\n mergeVNodeHook(vnode, 'insert', function () {\n var parent = el.parentNode;\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n if (pendingNode &&\n pendingNode.tag === vnode.tag &&\n pendingNode.elm._leaveCb\n ) {\n pendingNode.elm._leaveCb();\n }\n enterHook && enterHook(el, cb);\n });\n }\n\n // start enter transition\n beforeEnterHook && beforeEnterHook(el);\n if (expectsCSS) {\n addTransitionClass(el, startClass);\n addTransitionClass(el, activeClass);\n nextFrame(function () {\n removeTransitionClass(el, startClass);\n if (!cb.cancelled) {\n addTransitionClass(el, toClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitEnterDuration)) {\n setTimeout(cb, explicitEnterDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n\n if (vnode.data.show) {\n toggleDisplay && toggleDisplay();\n enterHook && enterHook(el, cb);\n }\n\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n}\n\nfunction leave (vnode, rm) {\n var el = vnode.elm;\n\n // call enter callback now\n if (isDef(el._enterCb)) {\n el._enterCb.cancelled = true;\n el._enterCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data) || el.nodeType !== 1) {\n return rm()\n }\n\n /* istanbul ignore if */\n if (isDef(el._leaveCb)) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var leaveClass = data.leaveClass;\n var leaveToClass = data.leaveToClass;\n var leaveActiveClass = data.leaveActiveClass;\n var beforeLeave = data.beforeLeave;\n var leave = data.leave;\n var afterLeave = data.afterLeave;\n var leaveCancelled = data.leaveCancelled;\n var delayLeave = data.delayLeave;\n var duration = data.duration;\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(leave);\n\n var explicitLeaveDuration = toNumber(\n isObject(duration)\n ? duration.leave\n : duration\n );\n\n if ( true && isDef(explicitLeaveDuration)) {\n checkDuration(explicitLeaveDuration, 'leave', vnode);\n }\n\n var cb = el._leaveCb = once(function () {\n if (el.parentNode && el.parentNode._pending) {\n el.parentNode._pending[vnode.key] = null;\n }\n if (expectsCSS) {\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, leaveClass);\n }\n leaveCancelled && leaveCancelled(el);\n } else {\n rm();\n afterLeave && afterLeave(el);\n }\n el._leaveCb = null;\n });\n\n if (delayLeave) {\n delayLeave(performLeave);\n } else {\n performLeave();\n }\n\n function performLeave () {\n // the delayed leave may have already been cancelled\n if (cb.cancelled) {\n return\n }\n // record leaving element\n if (!vnode.data.show && el.parentNode) {\n (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n }\n beforeLeave && beforeLeave(el);\n if (expectsCSS) {\n addTransitionClass(el, leaveClass);\n addTransitionClass(el, leaveActiveClass);\n nextFrame(function () {\n removeTransitionClass(el, leaveClass);\n if (!cb.cancelled) {\n addTransitionClass(el, leaveToClass);\n if (!userWantsControl) {\n if (isValidDuration(explicitLeaveDuration)) {\n setTimeout(cb, explicitLeaveDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n }\n });\n }\n leave && leave(el, cb);\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n if (typeof val !== 'number') {\n warn(\n \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n \"got \" + (JSON.stringify(val)) + \".\",\n vnode.context\n );\n } else if (isNaN(val)) {\n warn(\n \"<transition> explicit \" + name + \" duration is NaN - \" +\n 'the duration expression might be incorrect.',\n vnode.context\n );\n }\n}\n\nfunction isValidDuration (val) {\n return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n if (isUndef(fn)) {\n return false\n }\n var invokerFns = fn.fns;\n if (isDef(invokerFns)) {\n // invoker\n return getHookArgumentsLength(\n Array.isArray(invokerFns)\n ? invokerFns[0]\n : invokerFns\n )\n } else {\n return (fn._length || fn.length) > 1\n }\n}\n\nfunction _enter (_, vnode) {\n if (vnode.data.show !== true) {\n enter(vnode);\n }\n}\n\nvar transition = inBrowser ? {\n create: _enter,\n activate: _enter,\n remove: function remove$$1 (vnode, rm) {\n /* istanbul ignore else */\n if (vnode.data.show !== true) {\n leave(vnode, rm);\n } else {\n rm();\n }\n }\n} : {};\n\nvar platformModules = [\n attrs,\n klass,\n events,\n domProps,\n style,\n transition\n];\n\n/* */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n // http://www.matts411.com/post/internet-explorer-9-oninput/\n document.addEventListener('selectionchange', function () {\n var el = document.activeElement;\n if (el && el.vmodel) {\n trigger(el, 'input');\n }\n });\n}\n\nvar directive = {\n inserted: function inserted (el, binding, vnode, oldVnode) {\n if (vnode.tag === 'select') {\n // #6903\n if (oldVnode.elm && !oldVnode.elm._vOptions) {\n mergeVNodeHook(vnode, 'postpatch', function () {\n directive.componentUpdated(el, binding, vnode);\n });\n } else {\n setSelected(el, binding, vnode.context);\n }\n el._vOptions = [].map.call(el.options, getValue);\n } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n el._vModifiers = binding.modifiers;\n if (!binding.modifiers.lazy) {\n el.addEventListener('compositionstart', onCompositionStart);\n el.addEventListener('compositionend', onCompositionEnd);\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n el.addEventListener('change', onCompositionEnd);\n /* istanbul ignore if */\n if (isIE9) {\n el.vmodel = true;\n }\n }\n }\n },\n\n componentUpdated: function componentUpdated (el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n // in case the options rendered by v-for have changed,\n // it's possible that the value is out-of-sync with the rendered options.\n // detect such cases and filter out values that no longer has a matching\n // option in the DOM.\n var prevOptions = el._vOptions;\n var curOptions = el._vOptions = [].map.call(el.options, getValue);\n if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n // trigger change event if\n // no matching option found for at least one value\n var needReset = el.multiple\n ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n if (needReset) {\n trigger(el, 'change');\n }\n }\n }\n }\n};\n\nfunction setSelected (el, binding, vm) {\n actuallySetSelected(el, binding, vm);\n /* istanbul ignore if */\n if (isIE || isEdge) {\n setTimeout(function () {\n actuallySetSelected(el, binding, vm);\n }, 0);\n }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n var value = binding.value;\n var isMultiple = el.multiple;\n if (isMultiple && !Array.isArray(value)) {\n true && warn(\n \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n vm\n );\n return\n }\n var selected, option;\n for (var i = 0, l = el.options.length; i < l; i++) {\n option = el.options[i];\n if (isMultiple) {\n selected = looseIndexOf(value, getValue(option)) > -1;\n if (option.selected !== selected) {\n option.selected = selected;\n }\n } else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) {\n el.selectedIndex = i;\n }\n return\n }\n }\n }\n if (!isMultiple) {\n el.selectedIndex = -1;\n }\n}\n\nfunction hasNoMatchingOption (value, options) {\n return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n return '_value' in option\n ? option._value\n : option.value\n}\n\nfunction onCompositionStart (e) {\n e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n // prevent triggering an input event for no reason\n if (!e.target.composing) { return }\n e.target.composing = false;\n trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n}\n\n/* */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n ? locateNode(vnode.componentInstance._vnode)\n : vnode\n}\n\nvar show = {\n bind: function bind (el, ref, vnode) {\n var value = ref.value;\n\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n var originalDisplay = el.__vOriginalDisplay =\n el.style.display === 'none' ? '' : el.style.display;\n if (value && transition$$1) {\n vnode.data.show = true;\n enter(vnode, function () {\n el.style.display = originalDisplay;\n });\n } else {\n el.style.display = value ? originalDisplay : 'none';\n }\n },\n\n update: function update (el, ref, vnode) {\n var value = ref.value;\n var oldValue = ref.oldValue;\n\n /* istanbul ignore if */\n if (!value === !oldValue) { return }\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n if (transition$$1) {\n vnode.data.show = true;\n if (value) {\n enter(vnode, function () {\n el.style.display = el.__vOriginalDisplay;\n });\n } else {\n leave(vnode, function () {\n el.style.display = 'none';\n });\n }\n } else {\n el.style.display = value ? el.__vOriginalDisplay : 'none';\n }\n },\n\n unbind: function unbind (\n el,\n binding,\n vnode,\n oldVnode,\n isDestroy\n ) {\n if (!isDestroy) {\n el.style.display = el.__vOriginalDisplay;\n }\n }\n};\n\nvar platformDirectives = {\n model: directive,\n show: show\n};\n\n/* */\n\nvar transitionProps = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n var compOptions = vnode && vnode.componentOptions;\n if (compOptions && compOptions.Ctor.options.abstract) {\n return getRealChild(getFirstComponentChild(compOptions.children))\n } else {\n return vnode\n }\n}\n\nfunction extractTransitionData (comp) {\n var data = {};\n var options = comp.$options;\n // props\n for (var key in options.propsData) {\n data[key] = comp[key];\n }\n // events.\n // extract listeners and pass them directly to the transition methods\n var listeners = options._parentListeners;\n for (var key$1 in listeners) {\n data[camelize(key$1)] = listeners[key$1];\n }\n return data\n}\n\nfunction placeholder (h, rawChild) {\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\n return h('keep-alive', {\n props: rawChild.componentOptions.propsData\n })\n }\n}\n\nfunction hasParentTransition (vnode) {\n while ((vnode = vnode.parent)) {\n if (vnode.data.transition) {\n return true\n }\n }\n}\n\nfunction isSameChild (child, oldChild) {\n return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n name: 'transition',\n props: transitionProps,\n abstract: true,\n\n render: function render (h) {\n var this$1 = this;\n\n var children = this.$slots.default;\n if (!children) {\n return\n }\n\n // filter out text nodes (possible whitespaces)\n children = children.filter(isNotTextNode);\n /* istanbul ignore if */\n if (!children.length) {\n return\n }\n\n // warn multiple elements\n if ( true && children.length > 1) {\n warn(\n '<transition> can only be used on a single element. Use ' +\n '<transition-group> for lists.',\n this.$parent\n );\n }\n\n var mode = this.mode;\n\n // warn invalid mode\n if ( true &&\n mode && mode !== 'in-out' && mode !== 'out-in'\n ) {\n warn(\n 'invalid <transition> mode: ' + mode,\n this.$parent\n );\n }\n\n var rawChild = children[0];\n\n // if this is a component root node and the component's\n // parent container node also has transition, skip.\n if (hasParentTransition(this.$vnode)) {\n return rawChild\n }\n\n // apply transition data to child\n // use getRealChild() to ignore abstract components e.g. keep-alive\n var child = getRealChild(rawChild);\n /* istanbul ignore if */\n if (!child) {\n return rawChild\n }\n\n if (this._leaving) {\n return placeholder(h, rawChild)\n }\n\n // ensure a key that is unique to the vnode type and to this transition\n // component instance. This key will be used to remove pending leaving nodes\n // during entering.\n var id = \"__transition-\" + (this._uid) + \"-\";\n child.key = child.key == null\n ? child.isComment\n ? id + 'comment'\n : id + child.tag\n : isPrimitive(child.key)\n ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n : child.key;\n\n var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n var oldRawChild = this._vnode;\n var oldChild = getRealChild(oldRawChild);\n\n // mark v-show\n // so that the transition module can hand over the control to the directive\n if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n child.data.show = true;\n }\n\n if (\n oldChild &&\n oldChild.data &&\n !isSameChild(child, oldChild) &&\n !isAsyncPlaceholder(oldChild) &&\n // #6687 component root is a comment node\n !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n ) {\n // replace old child transition data with fresh one\n // important for dynamic transitions!\n var oldData = oldChild.data.transition = extend({}, data);\n // handle transition mode\n if (mode === 'out-in') {\n // return placeholder node and queue update when leave finishes\n this._leaving = true;\n mergeVNodeHook(oldData, 'afterLeave', function () {\n this$1._leaving = false;\n this$1.$forceUpdate();\n });\n return placeholder(h, rawChild)\n } else if (mode === 'in-out') {\n if (isAsyncPlaceholder(child)) {\n return oldRawChild\n }\n var delayedLeave;\n var performLeave = function () { delayedLeave(); };\n mergeVNodeHook(data, 'afterEnter', performLeave);\n mergeVNodeHook(data, 'enterCancelled', performLeave);\n mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n }\n }\n\n return rawChild\n }\n};\n\n/* */\n\nvar props = extend({\n tag: String,\n moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n props: props,\n\n beforeMount: function beforeMount () {\n var this$1 = this;\n\n var update = this._update;\n this._update = function (vnode, hydrating) {\n var restoreActiveInstance = setActiveInstance(this$1);\n // force removing pass\n this$1.__patch__(\n this$1._vnode,\n this$1.kept,\n false, // hydrating\n true // removeOnly (!important, avoids unnecessary moves)\n );\n this$1._vnode = this$1.kept;\n restoreActiveInstance();\n update.call(this$1, vnode, hydrating);\n };\n },\n\n render: function render (h) {\n var tag = this.tag || this.$vnode.data.tag || 'span';\n var map = Object.create(null);\n var prevChildren = this.prevChildren = this.children;\n var rawChildren = this.$slots.default || [];\n var children = this.children = [];\n var transitionData = extractTransitionData(this);\n\n for (var i = 0; i < rawChildren.length; i++) {\n var c = rawChildren[i];\n if (c.tag) {\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n children.push(c);\n map[c.key] = c\n ;(c.data || (c.data = {})).transition = transitionData;\n } else if (true) {\n var opts = c.componentOptions;\n var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n }\n }\n }\n\n if (prevChildren) {\n var kept = [];\n var removed = [];\n for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n var c$1 = prevChildren[i$1];\n c$1.data.transition = transitionData;\n c$1.data.pos = c$1.elm.getBoundingClientRect();\n if (map[c$1.key]) {\n kept.push(c$1);\n } else {\n removed.push(c$1);\n }\n }\n this.kept = h(tag, null, kept);\n this.removed = removed;\n }\n\n return h(tag, null, children)\n },\n\n updated: function updated () {\n var children = this.prevChildren;\n var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n return\n }\n\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n children.forEach(callPendingCbs);\n children.forEach(recordPosition);\n children.forEach(applyTranslation);\n\n // force reflow to put everything in position\n // assign to this to avoid being removed in tree-shaking\n // $flow-disable-line\n this._reflow = document.body.offsetHeight;\n\n children.forEach(function (c) {\n if (c.data.moved) {\n var el = c.elm;\n var s = el.style;\n addTransitionClass(el, moveClass);\n s.transform = s.WebkitTransform = s.transitionDuration = '';\n el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n if (e && e.target !== el) {\n return\n }\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(transitionEndEvent, cb);\n el._moveCb = null;\n removeTransitionClass(el, moveClass);\n }\n });\n }\n });\n },\n\n methods: {\n hasMove: function hasMove (el, moveClass) {\n /* istanbul ignore if */\n if (!hasTransition) {\n return false\n }\n /* istanbul ignore if */\n if (this._hasMove) {\n return this._hasMove\n }\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n var clone = el.cloneNode();\n if (el._transitionClasses) {\n el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n }\n addClass(clone, moveClass);\n clone.style.display = 'none';\n this.$el.appendChild(clone);\n var info = getTransitionInfo(clone);\n this.$el.removeChild(clone);\n return (this._hasMove = info.hasTransform)\n }\n }\n};\n\nfunction callPendingCbs (c) {\n /* istanbul ignore if */\n if (c.elm._moveCb) {\n c.elm._moveCb();\n }\n /* istanbul ignore if */\n if (c.elm._enterCb) {\n c.elm._enterCb();\n }\n}\n\nfunction recordPosition (c) {\n c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n var oldPos = c.data.pos;\n var newPos = c.data.newPos;\n var dx = oldPos.left - newPos.left;\n var dy = oldPos.top - newPos.top;\n if (dx || dy) {\n c.data.moved = true;\n var s = c.elm.style;\n s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n s.transitionDuration = '0s';\n }\n}\n\nvar platformComponents = {\n Transition: Transition,\n TransitionGroup: TransitionGroup\n};\n\n/* */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && inBrowser ? query(el) : undefined;\n return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n setTimeout(function () {\n if (config.devtools) {\n if (devtools) {\n devtools.emit('init', Vue);\n } else if (\n true\n ) {\n console[console.info ? 'info' : 'log'](\n 'Download the Vue Devtools extension for a better development experience:\\n' +\n 'https://github.com/vuejs/vue-devtools'\n );\n }\n }\n if ( true &&\n config.productionTip !== false &&\n typeof console !== 'undefined'\n ) {\n console[console.info ? 'info' : 'log'](\n \"You are running Vue in development mode.\\n\" +\n \"Make sure to turn on production mode when deploying for production.\\n\" +\n \"See more tips at https://vuejs.org/guide/deployment.html\"\n );\n }\n }, 0);\n}\n\n/* */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vue);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../_webpack@4.41.2@webpack/buildin/global.js */ \"./node_modules/_webpack@4.41.2@webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZUAyLjYuMTBAdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWVAMi42LjEwQHZ1ZS9kaXN0L3Z1ZS5ydW50aW1lLmVzbS5qcz82ZTZkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogVnVlLmpzIHYyLjYuMTBcbiAqIChjKSAyMDE0LTIwMTkgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuLyogICovXG5cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4vLyBUaGVzZSBoZWxwZXJzIHByb2R1Y2UgYmV0dGVyIFZNIGNvZGUgaW4gSlMgZW5naW5lcyBkdWUgdG8gdGhlaXJcbi8vIGV4cGxpY2l0bmVzcyBhbmQgZnVuY3Rpb24gaW5saW5pbmcuXG5mdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZiAodikge1xuICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gIHJldHVybiB2ID09PSB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgcmV0dXJuIHYgPT09IGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlLlxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICApXG59XG5cbi8qKlxuICogUXVpY2sgb2JqZWN0IGNoZWNrIC0gdGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byB0ZWxsXG4gKiBPYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXG4gKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG4vKipcbiAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAqL1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHRvUmF3VHlwZSAodmFsdWUpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cblxuLyoqXG4gKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gKiBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwICh2KSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWwgaXMgYSB2YWxpZCBhcnJheSBpbmRleC5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEFycmF5SW5kZXggKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbCkpO1xuICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKVxufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gKFxuICAgIGlzRGVmKHZhbCkgJiZcbiAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcgKHZhbCkge1xuICByZXR1cm4gdmFsID09IG51bGxcbiAgICA/ICcnXG4gICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgdG8gYSBudW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG5cbn1cblxuLyoqXG4gKiBNYWtlIGEgbWFwIGFuZCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYSBrZXlcbiAqIGlzIGluIHRoYXQgbWFwLlxuICovXG5mdW5jdGlvbiBtYWtlTWFwIChcbiAgc3RyLFxuICBleHBlY3RzTG93ZXJDYXNlXG4pIHtcbiAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2VcbiAgICA/IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWwudG9Mb3dlckNhc2UoKV07IH1cbiAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gKi9cbnZhciBpc0J1aWx0SW5UYWcgPSBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcsIHRydWUpO1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZS5cbiAqL1xudmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXG4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICB2YXIgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywgYykgeyByZXR1cm4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnOyB9KVxufSk7XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59KTtcblxuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICovXG52YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xudmFyIGh5cGhlbmF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKClcbn0pO1xuXG4vKipcbiAqIFNpbXBsZSBiaW5kIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCxcbiAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICogc2luY2UgbmF0aXZlIGJpbmQgaXMgbm93IHBlcmZvcm1hbnQgZW5vdWdoIGluIG1vc3QgYnJvd3NlcnMuXG4gKiBCdXQgcmVtb3ZpbmcgaXQgd291bGQgbWVhbiBicmVha2luZyBjb2RlIHRoYXQgd2FzIGFibGUgdG8gcnVuIGluXG4gKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gcG9seWZpbGxCaW5kIChmbiwgY3R4KSB7XG4gIGZ1bmN0aW9uIGJvdW5kRm4gKGEpIHtcbiAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIGxcbiAgICAgID8gbCA+IDFcbiAgICAgICAgPyBmbi5hcHBseShjdHgsIGFyZ3VtZW50cylcbiAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgIDogZm4uY2FsbChjdHgpXG4gIH1cblxuICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gIHJldHVybiBib3VuZEZuXG59XG5cbmZ1bmN0aW9uIG5hdGl2ZUJpbmQgKGZuLCBjdHgpIHtcbiAgcmV0dXJuIGZuLmJpbmQoY3R4KVxufVxuXG52YXIgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gID8gbmF0aXZlQmluZFxuICA6IHBvbHlmaWxsQmluZDtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0pIHtcbiAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogTWVyZ2UgYW4gQXJyYXkgb2YgT2JqZWN0cyBpbnRvIGEgc2luZ2xlIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICB2YXIgcmVzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxuICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gKiB3aXRoIC4uLnJlc3QgKGh0dHBzOi8vZmxvdy5vcmcvYmxvZy8yMDE3LzA1LzA3L1N0cmljdC1GdW5jdGlvbi1DYWxsLUFyaXR5LykuXG4gKi9cbmZ1bmN0aW9uIG5vb3AgKGEsIGIsIGMpIHt9XG5cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuICovXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbnZhciBBU1NFVF9UWVBFUyA9IFtcbiAgJ2NvbXBvbmVudCcsXG4gICdkaXJlY3RpdmUnLFxuICAnZmlsdGVyJ1xuXTtcblxudmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgJ2JlZm9yZUNyZWF0ZScsXG4gICdjcmVhdGVkJyxcbiAgJ2JlZm9yZU1vdW50JyxcbiAgJ21vdW50ZWQnLFxuICAnYmVmb3JlVXBkYXRlJyxcbiAgJ3VwZGF0ZWQnLFxuICAnYmVmb3JlRGVzdHJveScsXG4gICdkZXN0cm95ZWQnLFxuICAnYWN0aXZhdGVkJyxcbiAgJ2RlYWN0aXZhdGVkJyxcbiAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAnc2VydmVyUHJlZmV0Y2gnXG5dO1xuXG4vKiAgKi9cblxuXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgKi9cbiAgYXN5bmM6IHRydWUsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSk7XG5cbi8qICAqL1xuXG4vKipcbiAqIHVuaWNvZGUgbGV0dGVycyB1c2VkIGZvciBwYXJzaW5nIGh0bWwgdGFncywgY29tcG9uZW50IG5hbWVzIGFuZCBwcm9wZXJ0eSBwYXRocy5cbiAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gKiBza2lwcGluZyBcXHUxMDAwMC1cXHVFRkZGRiBkdWUgdG8gaXQgZnJlZXppbmcgdXAgUGhhbnRvbUpTXG4gKi9cbnZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkIChzdHIpIHtcbiAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZGVmIChvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIHZhbHVlOiB2YWwsXG4gICAgZW51bWVyYWJsZTogISFlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoKFwiW15cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIi4kX1xcXFxkXVwiKSk7XG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICBvYmogPSBvYmpbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuLyogICovXG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG5cbi8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBpbldlZXggPSB0eXBlb2YgV1hFbnZpcm9ubWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgISFXWEVudmlyb25tZW50LnBsYXRmb3JtO1xudmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSAoVUEgJiYgVUEuaW5kZXhPZignYW5kcm9pZCcpID4gMCkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKTtcbnZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG52YXIgaXNDaHJvbWUgPSBVQSAmJiAvY2hyb21lXFwvXFxkKy8udGVzdChVQSkgJiYgIWlzRWRnZTtcbnZhciBpc1BoYW50b21KUyA9IFVBICYmIC9waGFudG9tanMvLnRlc3QoVUEpO1xudmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuXG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCAoe1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxuLy8gdGhpcyBuZWVkcyB0byBiZSBsYXp5LWV2YWxlZCBiZWNhdXNlIHZ1ZSBtYXkgYmUgcmVxdWlyZWQgYmVmb3JlXG4vLyB2dWUtc2VydmVyLXJlbmRlcmVyIGNhbiBzZXQgVlVFX0VOVlxudmFyIF9pc1NlcnZlcjtcbnZhciBpc1NlcnZlclJlbmRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWluV2VleCAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICBfaXNTZXJ2ZXIgPSBnbG9iYWxbJ3Byb2Nlc3MnXSAmJiBnbG9iYWxbJ3Byb2Nlc3MnXS5lbnYuVlVFX0VOViA9PT0gJ3NlcnZlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2lzU2VydmVyXG59O1xuXG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGlzTmF0aXZlIChDdG9yKSB7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcblxudmFyIF9TZXQ7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG5pZiAodHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU2V0KSkge1xuICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgX1NldCA9IFNldDtcbn0gZWxzZSB7XG4gIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgX1NldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNldCAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gaGFzIChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFtrZXldID09PSB0cnVlXG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoa2V5KSB7XG4gICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBjbGVhciAoKSB7XG4gICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfTtcblxuICAgIHJldHVybiBTZXQ7XG4gIH0oKSk7XG59XG5cbi8qICAqL1xuXG52YXIgd2FybiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gKG5vb3ApOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZSA9IChub29wKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGhhc0NvbnNvbGUgPSB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCc7XG4gIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICB2YXIgY2xhc3NpZnkgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHJcbiAgICAucmVwbGFjZShjbGFzc2lmeVJFLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KVxuICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICB3YXJuID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICB2YXIgdHJhY2UgPSB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJyc7XG5cbiAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICBjb25maWcud2FybkhhbmRsZXIuY2FsbChudWxsLCBtc2csIHZtLCB0cmFjZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgIH1cbiAgfTtcblxuICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIGlmIChoYXNDb25zb2xlICYmICghY29uZmlnLnNpbGVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltWdWUgdGlwXTogXCIgKyBtc2cgKyAoXG4gICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgKSk7XG4gICAgfVxuICB9O1xuXG4gIGZvcm1hdENvbXBvbmVudE5hbWUgPSBmdW5jdGlvbiAodm0sIGluY2x1ZGVGaWxlKSB7XG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHZtID09PSAnZnVuY3Rpb24nICYmIHZtLmNpZCAhPSBudWxsXG4gICAgICA/IHZtLm9wdGlvbnNcbiAgICAgIDogdm0uX2lzVnVlXG4gICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICA6IHZtO1xuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lIHx8IG9wdGlvbnMuX2NvbXBvbmVudFRhZztcbiAgICB2YXIgZmlsZSA9IG9wdGlvbnMuX19maWxlO1xuICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgKG5hbWUgPyAoXCI8XCIgKyAoY2xhc3NpZnkobmFtZSkpICsgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgIClcbiAgfTtcblxuICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB3aGlsZSAobikge1xuICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgIGlmIChuID4gMSkgeyBzdHIgKz0gc3RyOyB9XG4gICAgICBuID4+PSAxO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH07XG5cbiAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgIGlmICh2bS5faXNWdWUgJiYgdm0uJHBhcmVudCkge1xuICAgICAgdmFyIHRyZWUgPSBbXTtcbiAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgd2hpbGUgKHZtKSB7XG4gICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSsrO1xuICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXG5cXG5mb3VuZCBpblxcblxcbicgKyB0cmVlXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7IHJldHVybiAoXCJcIiArIChpID09PSAwID8gJy0tLT4gJyA6IHJlcGVhdCgnICcsIDUgKyBpICogMikpICsgKEFycmF5LmlzQXJyYXkodm0pXG4gICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgIDogZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpKTsgfSlcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcXG5cXG4oZm91bmQgaW4gXCIgKyAoZm9ybWF0Q29tcG9uZW50TmFtZSh2bSkpICsgXCIpXCIpXG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCsrO1xuICB0aGlzLnN1YnMgPSBbXTtcbn07XG5cbkRlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgcmVtb3ZlKHRoaXMuc3Vicywgc3ViKTtcbn07XG5cbkRlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgaWYgKERlcC50YXJnZXQpIHtcbiAgICBEZXAudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAvLyBvcmRlclxuICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBzdWJzW2ldLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbi8vIGNhbiBiZSBldmFsdWF0ZWQgYXQgYSB0aW1lLlxuRGVwLnRhcmdldCA9IG51bGw7XG52YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAodGFyZ2V0KSB7XG4gIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbn1cblxuLyogICovXG5cbnZhciBWTm9kZSA9IGZ1bmN0aW9uIFZOb2RlIChcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgZWxtLFxuICBjb250ZXh0LFxuICBjb21wb25lbnRPcHRpb25zLFxuICBhc3luY0ZhY3Rvcnlcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLmVsbSA9IGVsbTtcbiAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY2hpbGQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnByb3RvdHlwZUFjY2Vzc29ycy5jaGlsZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVk5vZGUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICBpZiAoIHRleHQgPT09IHZvaWQgMCApIHRleHQgPSAnJztcblxuICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICBub2RlLnRleHQgPSB0ZXh0O1xuICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gIHJldHVybiBub2RlXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUgKHZhbCkge1xuICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKVxufVxuXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9uZVxuLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBtYXkgYmUgcmV1c2VkIGFjcm9zc1xuLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4vLyBvbiB0aGVpciBlbG0gcmVmZXJlbmNlLlxuZnVuY3Rpb24gY2xvbmVWTm9kZSAodm5vZGUpIHtcbiAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICB2bm9kZS50YWcsXG4gICAgdm5vZGUuZGF0YSxcbiAgICAvLyAjNzk3NVxuICAgIC8vIGNsb25lIGNoaWxkcmVuIGFycmF5IHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIGluIGNhc2Ugb2YgY2xvbmluZ1xuICAgIC8vIGEgY2hpbGQuXG4gICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICB2bm9kZS50ZXh0LFxuICAgIHZub2RlLmVsbSxcbiAgICB2bm9kZS5jb250ZXh0LFxuICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsXG4gICAgdm5vZGUuYXN5bmNGYWN0b3J5XG4gICk7XG4gIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgY2xvbmVkLmlzQ29tbWVudCA9IHZub2RlLmlzQ29tbWVudDtcbiAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgY2xvbmVkLmZuU2NvcGVJZCA9IHZub2RlLmZuU2NvcGVJZDtcbiAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgcmV0dXJuIGNsb25lZFxufVxuXG4vKlxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXG4gKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAqL1xuXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xuXG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnXG5dO1xuXG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgLy8gY2FjaGUgb3JpZ2luYWwgbWV0aG9kXG4gIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgdmFyIGluc2VydGVkO1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgIGNhc2UgJ3Vuc2hpZnQnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pO1xufSk7XG5cbi8qICAqL1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcblxuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG5mdW5jdGlvbiB0b2dnbGVPYnNlcnZpbmcgKHZhbHVlKSB7XG4gIHNob3VsZE9ic2VydmUgPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGlzIGF0dGFjaGVkIHRvIGVhY2ggb2JzZXJ2ZWRcbiAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAqIG9iamVjdCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2ggdXBkYXRlcy5cbiAqL1xudmFyIE9ic2VydmVyID0gZnVuY3Rpb24gT2JzZXJ2ZXIgKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gIHRoaXMudm1Db3VudCA9IDA7XG4gIGRlZih2YWx1ZSwgJ19fb2JfXycsIHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgIHByb3RvQXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29weUF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB9XG4gICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud2Fsayh2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiB3YWxrIChvYmopIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMShvYmosIGtleXNbaV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgaW50ZXJjZXB0aW5nXG4gKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICovXG5mdW5jdGlvbiBwcm90b0F1Z21lbnQgKHRhcmdldCwgc3JjKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gIHRhcmdldC5fX3Byb3RvX18gPSBzcmM7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tcHJvdG8gKi9cbn1cblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBkZWZpbmluZ1xuICogaGlkZGVuIHByb3BlcnRpZXMuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUgKHZhbHVlLCBhc1Jvb3REYXRhKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFsdWUsICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgIG9iID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIHNob3VsZE9ic2VydmUgJiZcbiAgICAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSAmJlxuICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICF2YWx1ZS5faXNWdWVcbiAgKSB7XG4gICAgb2IgPSBuZXcgT2JzZXJ2ZXIodmFsdWUpO1xuICB9XG4gIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgb2Iudm1Db3VudCsrO1xuICB9XG4gIHJldHVybiBvYlxufVxuXG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUkJDEgKFxuICBvYmosXG4gIGtleSxcbiAgdmFsLFxuICBjdXN0b21TZXR0ZXIsXG4gIHNoYWxsb3dcbikge1xuICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gIHZhciBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YWwgPSBvYmpba2V5XTtcbiAgfVxuXG4gIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIgKG5ld1ZhbCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKG5ld1ZhbCA9PT0gdmFsdWUgfHwgKG5ld1ZhbCAhPT0gbmV3VmFsICYmIHZhbHVlICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgfVxuICAgICAgLy8gIzc5ODE6IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdpdGhvdXQgc2V0dGVyXG4gICAgICBpZiAoZ2V0dGVyICYmICFzZXR0ZXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgc2V0dGVyLmNhbGwob2JqLCBuZXdWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgfVxuICAgICAgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUobmV3VmFsKTtcbiAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9uIGFuIG9iamVjdC4gQWRkcyB0aGUgbmV3IHByb3BlcnR5IGFuZFxuICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICogYWxyZWFkeSBleGlzdC5cbiAqL1xuZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICdhdCBydW50aW1lIC0gZGVjbGFyZSBpdCB1cGZyb250IGluIHRoZSBkYXRhIG9wdGlvbi4nXG4gICAgKTtcbiAgICByZXR1cm4gdmFsXG4gIH1cbiAgaWYgKCFvYikge1xuICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBkZWZpbmVSZWFjdGl2ZSQkMShvYi52YWx1ZSwga2V5LCB2YWwpO1xuICBvYi5kZXAubm90aWZ5KCk7XG4gIHJldHVybiB2YWxcbn1cblxuLyoqXG4gKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiBkZWwgKHRhcmdldCwga2V5KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKVxuICApIHtcbiAgICB3YXJuKChcIkNhbm5vdCBkZWxldGUgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2IgPSAodGFyZ2V0KS5fX29iX187XG4gIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJy0ganVzdCBzZXQgaXQgdG8gbnVsbC4nXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBkZWxldGUgdGFyZ2V0W2tleV07XG4gIGlmICghb2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBvYi5kZXAubm90aWZ5KCk7XG59XG5cbi8qKlxuICogQ29sbGVjdCBkZXBlbmRlbmNpZXMgb24gYXJyYXkgZWxlbWVudHMgd2hlbiB0aGUgYXJyYXkgaXMgdG91Y2hlZCwgc2luY2VcbiAqIHdlIGNhbm5vdCBpbnRlcmNlcHQgYXJyYXkgZWxlbWVudCBhY2Nlc3MgbGlrZSBwcm9wZXJ0eSBnZXR0ZXJzLlxuICovXG5mdW5jdGlvbiBkZXBlbmRBcnJheSAodmFsdWUpIHtcbiAgZm9yICh2YXIgZSA9ICh2b2lkIDApLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGUgPSB2YWx1ZVtpXTtcbiAgICBlICYmIGUuX19vYl9fICYmIGUuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gKiB2YWx1ZSBpbnRvIHRoZSBmaW5hbCB2YWx1ZS5cbiAqL1xudmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG5cbi8qKlxuICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICBpZiAoIXZtKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIm9wdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW5zdGFuY2UgXCIgK1xuICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdFN0cmF0KHBhcmVudCwgY2hpbGQpXG4gIH07XG59XG5cbi8qKlxuICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YSAodG8sIGZyb20pIHtcbiAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuXG4gIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICA6IE9iamVjdC5rZXlzKGZyb20pO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdG9WYWwgIT09IGZyb21WYWwgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICBpc1BsYWluT2JqZWN0KGZyb21WYWwpXG4gICAgKSB7XG4gICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBEYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bVxuKSB7XG4gIGlmICghdm0pIHtcbiAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgIHJldHVybiBjaGlsZFZhbFxuICAgIH1cbiAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbiAoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbicgPyBjaGlsZFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogY2hpbGRWYWwsXG4gICAgICAgIHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbicgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgLy8gaW5zdGFuY2UgbWVyZ2VcbiAgICAgIHZhciBpbnN0YW5jZURhdGEgPSB0eXBlb2YgY2hpbGRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBjaGlsZFZhbDtcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHR5cGVvZiBwYXJlbnRWYWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXG4gICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAnZGVmaW5pdGlvbnMuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgfVxuXG4gIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKVxufTtcblxuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlSG9vayAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWxcbikge1xuICB2YXIgcmVzID0gY2hpbGRWYWxcbiAgICA/IHBhcmVudFZhbFxuICAgICAgPyBwYXJlbnRWYWwuY29uY2F0KGNoaWxkVmFsKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKVxuICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgIDogW2NoaWxkVmFsXVxuICAgIDogcGFyZW50VmFsO1xuICByZXR1cm4gcmVzXG4gICAgPyBkZWR1cGVIb29rcyhyZXMpXG4gICAgOiByZXNcbn1cblxuZnVuY3Rpb24gZGVkdXBlSG9va3MgKGhvb2tzKSB7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChyZXMuaW5kZXhPZihob29rc1tpXSkgPT09IC0xKSB7XG4gICAgICByZXMucHVzaChob29rc1tpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgc3RyYXRzW2hvb2tdID0gbWVyZ2VIb29rO1xufSk7XG5cbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgaWYgKGNoaWxkVmFsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAncyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hpbGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgfVxuICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgdmFyIHBhcmVudCA9IHJldFtrZXkkMV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5JDFdO1xuICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07XG4gICAgfVxuICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgID8gcGFyZW50LmNvbmNhdChjaGlsZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XG4gIH1cbiAgcmV0dXJuIHJldFxufTtcblxuLyoqXG4gKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICovXG5zdHJhdHMucHJvcHMgPVxuc3RyYXRzLm1ldGhvZHMgPVxuc3RyYXRzLmluamVjdCA9XG5zdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRWYWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMucHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNoaWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZSAobmFtZSkge1xuICBpZiAoIW5ldyBSZWdFeHAoKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIgKyAodW5pY29kZVJlZ0V4cC5zb3VyY2UpICsgXCJdKiRcIikpLnRlc3QobmFtZSkpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArIG5hbWUgKyAnXCIuIENvbXBvbmVudCBuYW1lcyAnICtcbiAgICAgICdzaG91bGQgY29uZm9ybSB0byB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lIGluIGh0bWw1IHNwZWNpZmljYXRpb24uJ1xuICAgICk7XG4gIH1cbiAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICdpZDogJyArIG5hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRW5zdXJlIGFsbCBwcm9wcyBvcHRpb24gc3ludGF4IGFyZSBub3JtYWxpemVkIGludG8gdGhlXG4gKiBPYmplY3QtYmFzZWQgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQcm9wcyAob3B0aW9ucywgdm0pIHtcbiAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBpLCB2YWwsIG5hbWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhbCA9IHByb3BzW2tleV07XG4gICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IHZhbFxuICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcInByb3BzXFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICBvcHRpb25zLnByb3BzID0gcmVzO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbGwgaW5qZWN0aW9ucyBpbnRvIE9iamVjdC1iYXNlZCBmb3JtYXRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gIGlmICghaW5qZWN0KSB7IHJldHVybiB9XG4gIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGluamVjdCkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICB2YXIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICA6IHsgZnJvbTogdmFsIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZShpbmplY3QpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgdmFyIGRlZiQkMSA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgZGVmJCQxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRPYmplY3RUeXBlIChuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICB9XG5cbiAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZURpcmVjdGl2ZXMoY2hpbGQpO1xuXG4gIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAvLyB0aGUgcmVzdWx0IG9mIGFub3RoZXIgbWVyZ2VPcHRpb25zIGNhbGwuXG4gIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgfVxuICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5taXhpbnNbaV0sIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICBtZXJnZUZpZWxkKGtleSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgdmFyIHN0cmF0ID0gc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0O1xuICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0IChcbiAgb3B0aW9ucyxcbiAgdHlwZSxcbiAgaWQsXG4gIHdhcm5NaXNzaW5nXG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XG4gIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpIHsgcmV0dXJuIGFzc2V0c1tpZF0gfVxuICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpIHsgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF0gfVxuICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxuICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgd2FybihcbiAgICAgICdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wIChcbiAga2V5LFxuICBwcm9wT3B0aW9ucyxcbiAgcHJvcHNEYXRhLFxuICB2bVxuKSB7XG4gIHZhciBwcm9wID0gcHJvcE9wdGlvbnNba2V5XTtcbiAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICB2YXIgdmFsdWUgPSBwcm9wc0RhdGFba2V5XTtcbiAgLy8gYm9vbGVhbiBjYXN0aW5nXG4gIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgaWYgKGJvb2xlYW5JbmRleCA+IC0xKSB7XG4gICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSB7XG4gICAgICAvLyBvbmx5IGNhc3QgZW1wdHkgc3RyaW5nIC8gc2FtZSBuYW1lIHRvIGJvb2xlYW4gaWZcbiAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgdmFyIHN0cmluZ0luZGV4ID0gZ2V0VHlwZUluZGV4KFN0cmluZywgcHJvcC50eXBlKTtcbiAgICAgIGlmIChzdHJpbmdJbmRleCA8IDAgfHwgYm9vbGVhbkluZGV4IDwgc3RyaW5nSW5kZXgpIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICB9XG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgLy8gc2tpcCB2YWxpZGF0aW9uIGZvciB3ZWV4IHJlY3ljbGUtbGlzdCBjaGlsZCBjb21wb25lbnQgcHJvcHNcbiAgICAhKGZhbHNlKVxuICApIHtcbiAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHByb3AuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BEZWZhdWx0VmFsdWUgKHZtLCBwcm9wLCBrZXkpIHtcbiAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tZmFjdG9yeSBkZWZhdWx0cyBmb3IgT2JqZWN0ICYgQXJyYXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbiAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gIGlmICh2bSAmJiB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgfVxuICAvLyBjYWxsIGZhY3RvcnkgZnVuY3Rpb24gZm9yIG5vbi1GdW5jdGlvbiB0eXBlc1xuICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gIHJldHVybiB0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgID8gZGVmLmNhbGwodm0pXG4gICAgOiBkZWZcbn1cblxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AgKFxuICBwcm9wLFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgdm0sXG4gIGFic2VudFxuKSB7XG4gIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgIHdhcm4oXG4gICAgICAnTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhcHJvcC5yZXF1aXJlZCkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciB0eXBlID0gcHJvcC50eXBlO1xuICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICBpZiAodHlwZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aCAmJiAhdmFsaWQ7IGkrKykge1xuICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgdmFsaWQgPSBhc3NlcnRlZFR5cGUudmFsaWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgaWYgKHZhbGlkYXRvcikge1xuICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHNpbXBsZUNoZWNrUkUgPSAvXihTdHJpbmd8TnVtYmVyfEJvb2xlYW58RnVuY3Rpb258U3ltYm9sKSQvO1xuXG5mdW5jdGlvbiBhc3NlcnRUeXBlICh2YWx1ZSwgdHlwZSkge1xuICB2YXIgdmFsaWQ7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBnZXRUeXBlKHR5cGUpO1xuICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICB2YWxpZCA9IHQgPT09IGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ0FycmF5Jykge1xuICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2YWxpZDogdmFsaWQsXG4gICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlIChmbikge1xuICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYilcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgIHJldHVybiBpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXMsIHR5cGUpID8gMCA6IC0xXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzW2ldLCB0eXBlKSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZSAobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgXCIgRXhwZWN0ZWQgXCIgKyAoZXhwZWN0ZWRUeXBlcy5tYXAoY2FwaXRhbGl6ZSkuam9pbignLCAnKSk7XG4gIHZhciBleHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGVzWzBdO1xuICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgdmFyIGV4cGVjdGVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgcmVjZWl2ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSk7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGlzRXhwbGljYWJsZShleHBlY3RlZFR5cGUpICYmXG4gICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCIgd2l0aCB2YWx1ZSBcIiArIGV4cGVjdGVkVmFsdWU7XG4gIH1cbiAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSByZWNlaXZlZCB2YWx1ZVxuICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgfVxuICByZXR1cm4gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBzdHlsZVZhbHVlICh2YWx1ZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgIHJldHVybiAoXCJcIiArIChOdW1iZXIodmFsdWUpKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFwiXCIgKyB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4cGxpY2FibGUgKHZhbHVlKSB7XG4gIHZhciBleHBsaWNpdFR5cGVzID0gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXTtcbiAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICByZXR1cm4gYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiBlbGVtLnRvTG93ZXJDYXNlKCkgPT09ICdib29sZWFuJzsgfSlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWV4L2lzc3Vlcy8xNTA1XG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICBpZiAodm0pIHtcbiAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyAoXG4gIGhhbmRsZXIsXG4gIGNvbnRleHQsXG4gIGFyZ3MsXG4gIHZtLFxuICBpbmZvXG4pIHtcbiAgdmFyIHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgLy8gaXNzdWUgIzk1MTFcbiAgICAgIC8vIGF2b2lkIGNhdGNoIHRyaWdnZXJpbmcgbXVsdGlwbGUgdGltZXMgd2hlbiBuZXN0ZWQgY2FsbHNcbiAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICgoaW5Ccm93c2VyIHx8IGluV2VleCkgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgaXNVc2luZ01pY3JvVGFzayA9IGZhbHNlO1xuXG52YXIgY2FsbGJhY2tzID0gW107XG52YXIgcGVuZGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcyAoKSB7XG4gIHBlbmRpbmcgPSBmYWxzZTtcbiAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29waWVzW2ldKCk7XG4gIH1cbn1cblxuLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuLy8gSW4gMi41IHdlIHVzZWQgKG1hY3JvKSB0YXNrcyAoaW4gY29tYmluYXRpb24gd2l0aCBtaWNyb3Rhc2tzKS5cbi8vIEhvd2V2ZXIsIGl0IGhhcyBzdWJ0bGUgcHJvYmxlbXMgd2hlbiBzdGF0ZSBpcyBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSByZXBhaW50XG4vLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbi8vIEFsc28sIHVzaW5nIChtYWNybykgdGFza3MgaW4gZXZlbnQgaGFuZGxlciB3b3VsZCBjYXVzZSBzb21lIHdlaXJkIGJlaGF2aW9yc1xuLy8gdGhhdCBjYW5ub3QgYmUgY2lyY3VtdmVudGVkIChlLmcuICM3MTA5LCAjNzE1MywgIzc1NDYsICM3ODM0LCAjODEwOSkuXG4vLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4vLyBBIG1ham9yIGRyYXdiYWNrIG9mIHRoaXMgdHJhZGVvZmYgaXMgdGhhdCB0aGVyZSBhcmUgc29tZSBzY2VuYXJpb3Ncbi8vIHdoZXJlIG1pY3JvdGFza3MgaGF2ZSB0b28gaGlnaCBhIHByaW9yaXR5IGFuZCBmaXJlIGluIGJldHdlZW4gc3VwcG9zZWRseVxuLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuLy8gb3IgZXZlbiBiZXR3ZWVuIGJ1YmJsaW5nIG9mIHRoZSBzYW1lIGV2ZW50ICgjNjU2NikuXG52YXIgdGltZXJGdW5jO1xuXG4vLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cbi8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4vLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gIHZhciBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgaWYgKGlzSU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgfTtcbiAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG59IGVsc2UgaWYgKCFpc0lFICYmIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gIGlzTmF0aXZlKE11dGF0aW9uT2JzZXJ2ZXIpIHx8XG4gIC8vIFBoYW50b21KUyBhbmQgaU9TIDcueFxuICBNdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl0nXG4pKSB7XG4gIC8vIFVzZSBNdXRhdGlvbk9ic2VydmVyIHdoZXJlIG5hdGl2ZSBQcm9taXNlIGlzIG5vdCBhdmFpbGFibGUsXG4gIC8vIGUuZy4gUGhhbnRvbUpTLCBpT1M3LCBBbmRyb2lkIDQuNFxuICAvLyAoIzY0NjYgTXV0YXRpb25PYnNlcnZlciBpcyB1bnJlbGlhYmxlIGluIElFMTEpXG4gIHZhciBjb3VudGVyID0gMTtcbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2hDYWxsYmFja3MpO1xuICB2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoY291bnRlcikpO1xuICBvYnNlcnZlci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICB9KTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIGNvdW50ZXIgPSAoY291bnRlciArIDEpICUgMjtcbiAgICB0ZXh0Tm9kZS5kYXRhID0gU3RyaW5nKGNvdW50ZXIpO1xuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gIC8vIFRlY2hpbmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdWV1ZSxcbiAgLy8gYnV0IGl0IGlzIHN0aWxsIGEgYmV0dGVyIGNob2ljZSB0aGFuIHNldFRpbWVvdXQuXG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJbW1lZGlhdGUoZmx1c2hDYWxsYmFja3MpO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayAoY2IsIGN0eCkge1xuICB2YXIgX3Jlc29sdmU7XG4gIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgY3R4LCAnbmV4dFRpY2snKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF9yZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZShjdHgpO1xuICAgIH1cbiAgfSk7XG4gIGlmICghcGVuZGluZykge1xuICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgIHRpbWVyRnVuYygpO1xuICB9XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIWNiICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pXG4gIH1cbn1cblxuLyogICovXG5cbi8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuXG52YXIgaW5pdFByb3h5O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgYWxsb3dlZEdsb2JhbHMgPSBtYWtlTWFwKFxuICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICdwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCwnICtcbiAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLCcgK1xuICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICk7XG5cbiAgdmFyIHdhcm5Ob25QcmVzZW50ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgb3IgbWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiICtcbiAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgd2FybihcbiAgICAgIFwiUHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIG11c3QgYmUgYWNjZXNzZWQgd2l0aCBcXFwiJGRhdGEuXCIgKyBrZXkgKyBcIlxcXCIgYmVjYXVzZSBcIiArXG4gICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgJ3ByZXZlbnQgY29uZmxpY3RzIHdpdGggVnVlIGludGVybmFscycgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNkYXRhJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIGhhc1Byb3h5ID1cbiAgICB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb3h5KTtcblxuICBpZiAoaGFzUHJveHkpIHtcbiAgICB2YXIgaXNCdWlsdEluTW9kaWZpZXIgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXIoa2V5KSkge1xuICAgICAgICAgIHdhcm4oKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIgKyBrZXkpKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBoYXNIYW5kbGVyID0ge1xuICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAgICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHMoa2V5KSB8fFxuICAgICAgICAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xuICAgICAgaWYgKCFoYXMgJiYgIWlzQWxsb3dlZCkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXMgfHwgIWlzQWxsb3dlZFxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0SGFuZGxlciA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG4gICAgfVxuICB9O1xuXG4gIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSAodm0pIHtcbiAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgIC8vIGRldGVybWluZSB3aGljaCBwcm94eSBoYW5kbGVyIHRvIHVzZVxuICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAgIHZhciBoYW5kbGVycyA9IG9wdGlvbnMucmVuZGVyICYmIG9wdGlvbnMucmVuZGVyLl93aXRoU3RyaXBwZWRcbiAgICAgICAgPyBnZXRIYW5kbGVyXG4gICAgICAgIDogaGFzSGFuZGxlcjtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gKiBnZXR0ZXJzLCBzbyB0aGF0IGV2ZXJ5IG5lc3RlZCBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdFxuICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2UgKHZhbCkge1xuICBfdHJhdmVyc2UodmFsLCBzZWVuT2JqZWN0cyk7XG4gIHNlZW5PYmplY3RzLmNsZWFyKCk7XG59XG5cbmZ1bmN0aW9uIF90cmF2ZXJzZSAodmFsLCBzZWVuKSB7XG4gIHZhciBpLCBrZXlzO1xuICB2YXIgaXNBID0gQXJyYXkuaXNBcnJheSh2YWwpO1xuICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8IE9iamVjdC5pc0Zyb3plbih2YWwpIHx8IHZhbCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZhbC5fX29iX18pIHtcbiAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICBpZiAoc2Vlbi5oYXMoZGVwSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2Vlbi5hZGQoZGVwSWQpO1xuICB9XG4gIGlmIChpc0EpIHtcbiAgICBpID0gdmFsLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pOyB9XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgaSA9IGtleXMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7IH1cbiAgfVxufVxuXG52YXIgbWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICB9O1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIHBhc3NpdmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyYnO1xuICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgbmFtZSA9IG9uY2UkJDEgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgb25jZTogb25jZSQkMSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlciAoZm5zLCB2bSkge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIilcbiAgICB9XG4gIH1cbiAgaW52b2tlci5mbnMgPSBmbnM7XG4gIHJldHVybiBpbnZva2VyXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVycyAoXG4gIG9uLFxuICBvbGRPbixcbiAgYWRkLFxuICByZW1vdmUkJDEsXG4gIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICB2bVxuKSB7XG4gIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgZm9yIChuYW1lIGluIG9uKSB7XG4gICAgZGVmJCQxID0gY3VyID0gb25bbmFtZV07XG4gICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgaWYgKGlzVW5kZWYoY3VyLmZucykpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVGbkludm9rZXIoY3VyLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgIH1cbiAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICB9XG4gIHZhciBpbnZva2VyO1xuICB2YXIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcblxuICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgaG9vay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgIHJlbW92ZShpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICB9XG5cbiAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob2xkSG9vay5mbnMpICYmIGlzVHJ1ZShvbGRIb29rLm1lcmdlZCkpIHtcbiAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICBpbnZva2VyLmZucy5wdXNoKHdyYXBwZWRIb29rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICB9XG4gIH1cblxuICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gIGRlZltob29rS2V5XSA9IGludm9rZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgZGF0YSxcbiAgQ3RvcixcbiAgdGFnXG4pIHtcbiAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICB2YXIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGF0dHJzID0gZGF0YS5hdHRycztcbiAgdmFyIHByb3BzID0gZGF0YS5wcm9wcztcbiAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHZhciBhbHRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJlxuICAgICAgICAgIGF0dHJzICYmIGhhc093bihhdHRycywga2V5SW5Mb3dlckNhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIHRpcChcbiAgICAgICAgICAgIFwiUHJvcCBcXFwiXCIgKyBrZXlJbkxvd2VyQ2FzZSArIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICBcIiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgXCJ0ZW1wbGF0ZXMuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIGFsdEtleSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGtleSArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcCAoXG4gIHJlcyxcbiAgaGFzaCxcbiAga2V5LFxuICBhbHRLZXksXG4gIHByZXNlcnZlXG4pIHtcbiAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2FsdEtleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuXG4vLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4vLyBtYXkgcmV0dXJuIGFuIEFycmF5IGluc3RlYWQgb2YgYSBzaW5nbGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBqdXN0IGEgc2ltcGxlXG4vLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbi8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuLy8gYmVjYXVzZSBmdW5jdGlvbmFsIGNvbXBvbmVudHMgYWxyZWFkeSBub3JtYWxpemUgdGhlaXIgb3duIGNoaWxkcmVuLlxuZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbi8vIDIuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbnN0cnVjdHMgdGhhdCBhbHdheXMgZ2VuZXJhdGVkIG5lc3RlZCBBcnJheXMsXG4vLyBlLmcuIDx0ZW1wbGF0ZT4sIDxzbG90Piwgdi1mb3IsIG9yIHdoZW4gdGhlIGNoaWxkcmVuIGlzIHByb3ZpZGVkIGJ5IHVzZXJcbi8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbi8vIGlzIG5lZWRlZCB0byBjYXRlciB0byBhbGwgcG9zc2libGUgdHlwZXMgb2YgY2hpbGRyZW4gdmFsdWVzLlxuZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4gKGNoaWxkcmVuKSB7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICA/IFtjcmVhdGVUZXh0Vk5vZGUoY2hpbGRyZW4pXVxuICAgIDogQXJyYXkuaXNBcnJheShjaGlsZHJlbilcbiAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIGlzRGVmKG5vZGUpICYmIGlzRGVmKG5vZGUudGV4dCkgJiYgaXNGYWxzZShub2RlLmlzQ29tbWVudClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gIHZhciByZXMgPSBbXTtcbiAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgYyA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChpc1VuZGVmKGMpIHx8IHR5cGVvZiBjID09PSAnYm9vbGVhbicpIHsgY29udGludWUgfVxuICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgIGxhc3QgPSByZXNbbGFzdEluZGV4XTtcbiAgICAvLyAgbmVzdGVkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgKChuZXN0ZWRJbmRleCB8fCAnJykgKyBcIl9cIiArIGkpKTtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgKGNbMF0pLnRleHQpO1xuICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaC5hcHBseShyZXMsIGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAvLyBlc3NlbnRpYWxseSBtZXJnZWQgd2hlbiByZW5kZXJlZCB0byBIVE1MIHN0cmluZ3NcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICB9IGVsc2UgaWYgKGMgIT09ICcnKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIHRvIHZub2RlXG4gICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgaWYgKGlzVHJ1ZShjaGlsZHJlbi5faXNWTGlzdCkgJiZcbiAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgIGlzRGVmKG5lc3RlZEluZGV4KSkge1xuICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gIHZhciBwcm92aWRlID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgaWYgKHByb3ZpZGUpIHtcbiAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm92aWRlLmNhbGwodm0pXG4gICAgICA6IHByb3ZpZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnMgKHZtKSB7XG4gIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICBpZiAocmVzdWx0KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSW5qZWN0IChpbmplY3QsIHZtKSB7XG4gIGlmIChpbmplY3QpIHtcbiAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpXG4gICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgLy8gIzY1NzQgaW4gY2FzZSB0aGUgaW5qZWN0IG9iamVjdCBpcyBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBoYXNPd24oc291cmNlLl9wcm92aWRlZCwgcHJvdmlkZUtleSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG5cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMgKFxuICBjaGlsZHJlbixcbiAgY29udGV4dFxuKSB7XG4gIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHZhciBzbG90cyA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnNsb3QpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgfVxuICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBkYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHJldHVybiByZXMgJiYgKFxuICAgICAgcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICApID8gdW5kZWZpbmVkXG4gICAgICA6IHJlc1xuICB9O1xuICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICBpZiAoZm4ucHJveHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsU2xvdHMsIGtleSwge1xuICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbG90c1trZXldOyB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0ID0gW107XG4gICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNEZWYocmV0KSkge1xuICAgIHJldCA9IFtdO1xuICB9XG4gIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgcmV0dXJuIHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ssXG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICB2YXIgbm9kZXM7XG4gIGlmIChzY29wZWRTbG90Rm4pIHsgLy8gc2NvcGVkIHNsb3RcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXSB8fCBmYWxsYmFjaztcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBwcm9wcyAmJiBwcm9wcy5zbG90O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzS2V5Tm90TWF0Y2ggKGV4cGVjdCwgYWN0dWFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdCkpIHtcbiAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWxcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xuICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4gIGtleSxcbiAgYnVpbHRJbktleUNvZGUsXG4gIGV2ZW50S2V5TmFtZSxcbiAgYnVpbHRJbktleU5hbWVcbikge1xuICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpXG4gIH0gZWxzZSBpZiAobWFwcGVkS2V5Q29kZSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWljYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gIH0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgIH1cbiAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgIGlmIChjb250ZXh0Ll9pc01vdW50ZWQpIHtcbiAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkaXJlY3RseSB3YWxraW5nIHRoZSB0cmVlIGhlcmUgbWF5IGNhbGwgYWN0aXZhdGVkIGhvb2tzXG4gICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3kgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQgKFxuICBDdG9yLFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgaWYgKGlzVW5kZWYoQ3RvcikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBiYXNlQ3RvciA9IGNvbnRleHQuJG9wdGlvbnMuX2Jhc2U7XG5cbiAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gIGlmIChpc09iamVjdChDdG9yKSkge1xuICAgIEN0b3IgPSBiYXNlQ3Rvci5leHRlbmQoQ3Rvcik7XG4gIH1cblxuICAvLyBpZiBhdCB0aGlzIHN0YWdlIGl0J3Mgbm90IGEgY29uc3RydWN0b3Igb3IgYW4gYXN5bmMgY29tcG9uZW50IGZhY3RvcnksXG4gIC8vIHJlamVjdC5cbiAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGFzeW5jIGNvbXBvbmVudFxuICB2YXIgYXN5bmNGYWN0b3J5O1xuICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmV0dXJuIGEgcGxhY2Vob2xkZXIgbm9kZSBmb3IgYXN5bmMgY29tcG9uZW50LCB3aGljaCBpcyByZW5kZXJlZFxuICAgICAgLy8gYXMgYSBjb21tZW50IG5vZGUgYnV0IHByZXNlcnZlcyBhbGwgdGhlIHJhdyBpbmZvcm1hdGlvbiBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihcbiAgICAgICAgYXN5bmNGYWN0b3J5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgdGFnXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZGF0YSA9IGRhdGEgfHwge307XG5cbiAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKTtcblxuICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gIH1cblxuICAvLyBleHRyYWN0IHByb3BzXG4gIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgIGlmIChfcGFyZW50Vm5vZGUpIHtcbiAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgdm0uJHNsb3RzLFxuICAgICAgICB2bS4kc2NvcGVkU2xvdHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVlcyBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcbiAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJldmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHNldCBwYXJlbnRcbiAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgcmV0dXJuIHZub2RlXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4gIGlmIChcbiAgICBjb21wLl9fZXNNb2R1bGUgfHxcbiAgICAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG4gICkge1xuICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgPyBiYXNlLmV4dGVuZChjb21wKVxuICAgIDogY29tcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyIChcbiAgZmFjdG9yeSxcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudCAoXG4gIGZhY3RvcnksXG4gIGJhc2VDdG9yXG4pIHtcbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cblxuICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gIH1cblxuICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICB9XG5cbiAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICB2YXIgb3duZXJzID0gZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICB2YXIgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICB2YXIgdGltZXJUaW1lb3V0ID0gbnVsbFxuXG4gICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmICh0aW1lckxvYWRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nKTtcbiAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lclRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgIGlmICghc3luYykge1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIgKyAoU3RyaW5nKGZhY3RvcnkpKSArXG4gICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlcy5jb21wb25lbnQpKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9uKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIgKGV2ZW50LCBmbikge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldDtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKTtcbiAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBldmVudHNNaXhpbiAoVnVlKSB7XG4gIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb24uZm4gPSBmbjtcbiAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtcbiAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgdGlwKFxuICAgICAgICAgIFwiRXZlbnQgXFxcIlwiICsgbG93ZXJDYXNlRXZlbnQgKyBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIgK1xuICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKGNicykge1xuICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4gIHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICAvLyB3ZSBzZXQgdGhpcyB0byB2bS5fd2F0Y2hlciBpbnNpZGUgdGhlIHdhdGNoZXIncyBjb25zdHJ1Y3RvclxuICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAvLyBjb21wb25lbnQncyBtb3VudGVkIGhvb2spLCB3aGljaCByZWxpZXMgb24gdm0uX3dhdGNoZXIgYmVpbmcgYWxyZWFkeSBkZWZpbmVkXG4gIG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3AsIHtcbiAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gIC8vIG1vdW50ZWQgaXMgY2FsbGVkIGZvciByZW5kZXItY3JlYXRlZCBjaGlsZCBjb21wb25lbnRzIGluIGl0cyBpbnNlcnRlZCBob29rXG4gIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgIHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIGNhbGxIb29rKHZtLCAnbW91bnRlZCcpO1xuICB9XG4gIHJldHVybiB2bVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gIHZtLFxuICBwcm9wc0RhdGEsXG4gIGxpc3RlbmVycyxcbiAgcGFyZW50Vm5vZGUsXG4gIHJlbmRlckNoaWxkcmVuXG4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgLy8gZHluYW1pYyBzbG90IG5hbWVzKS4gU3RhdGljIHNjb3BlZCBzbG90cyBjb21waWxlZCBmcm9tIHRlbXBsYXRlIGhhcyB0aGVcbiAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICB2YXIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICB2YXIgb2xkU2NvcGVkU2xvdHMgPSB2bS4kc2NvcGVkU2xvdHM7XG4gIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgIChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAob2xkU2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmICFvbGRTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgKTtcblxuICAvLyBBbnkgc3RhdGljIHNsb3QgY2hpbGRyZW4gZnJvbSB0aGUgcGFyZW50IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHBhcmVudCdzXG4gIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAvLyB1cGRhdGUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy5cbiAgdmFyIG5lZWRzRm9yY2VVcGRhdGUgPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIGhhc0R5bmFtaWNTY29wZWRTbG90XG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IHBhcmVudFZub2RlLmRhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZtLiRsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG5cbiAgLy8gdXBkYXRlIHByb3BzXG4gIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICB2YXIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gdm0uJG9wdGlvbnMucHJvcHM7IC8vIHd0ZiBmbG93P1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICB9XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgdmFyIG9sZExpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChuZWVkc0ZvcmNlVXBkYXRlKSB7XG4gICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICB2bS4kZm9yY2VVcGRhdGUoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkluYWN0aXZlVHJlZSAodm0pIHtcbiAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgaWYgKHZtLl9pbmFjdGl2ZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHZtLl9kaXJlY3RJbmFjdGl2ZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2bS5faW5hY3RpdmUgfHwgdm0uX2luYWN0aXZlID09PSBudWxsKSB7XG4gICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQgKHZtLCBkaXJlY3QpIHtcbiAgaWYgKGRpcmVjdCkge1xuICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKCF2bS5faW5hY3RpdmUpIHtcbiAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdkZWFjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rICh2bSwgaG9vaykge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgaWYgKGhhbmRsZXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgbnVsbCwgdm0sIGluZm8pO1xuICAgIH1cbiAgfVxuICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgfVxuICBwb3BUYXJnZXQoKTtcbn1cblxuLyogICovXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuLy8gYXR0YWNoZWQuIEhvd2V2ZXIsIGNhbGxpbmcgcGVyZm9ybWFuY2Uubm93KCkgaGFzIGEgcGVyZiBvdmVyaGVhZCBlc3BlY2lhbGx5XG4vLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4vLyBhdHRhY2hlZCBkdXJpbmcgdGhhdCBmbHVzaC5cbnZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4vLyBBc3luYyBlZGdlIGNhc2UgZml4IHJlcXVpcmVzIHN0b3JpbmcgYW4gZXZlbnQgbGlzdGVuZXIncyBhdHRhY2ggdGltZXN0YW1wLlxudmFyIGdldE5vdyA9IERhdGUubm93O1xuXG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIGlmIChcbiAgICBwZXJmb3JtYW5jZSAmJlxuICAgIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicgJiZcbiAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcFxuICApIHtcbiAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgLy8gc21hbGxlciB0aGFuIGl0LCBpdCBtZWFucyB0aGUgZXZlbnQgaXMgdXNpbmcgYSBoaS1yZXMgdGltZXN0YW1wLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAvLyB3ZWxsLlxuICAgIGdldE5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpOyB9O1xuICB9XG59XG5cbi8qKlxuICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gKi9cbmZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUgKCkge1xuICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgZmx1c2hpbmcgPSB0cnVlO1xuICB2YXIgd2F0Y2hlciwgaWQ7XG5cbiAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGF0OlxuICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgLy8gMi4gQSBjb21wb25lbnQncyB1c2VyIHdhdGNoZXJzIGFyZSBydW4gYmVmb3JlIGl0cyByZW5kZXIgd2F0Y2hlciAoYmVjYXVzZVxuICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gIC8vICAgIGl0cyB3YXRjaGVycyBjYW4gYmUgc2tpcHBlZC5cbiAgcXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuXG4gIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAvLyBhcyB3ZSBydW4gZXhpc3Rpbmcgd2F0Y2hlcnNcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcXVldWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICBpZiAod2F0Y2hlci5iZWZvcmUpIHtcbiAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgfVxuICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICBoYXNbaWRdID0gbnVsbDtcbiAgICB3YXRjaGVyLnJ1bigpO1xuICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBoYXNbaWRdICE9IG51bGwpIHtcbiAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IG1heSBoYXZlIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wICcgKyAoXG4gICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgPyAoXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKVxuICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YXRjaGVyLnZtXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICB2YXIgYWN0aXZhdGVkUXVldWUgPSBhY3RpdmF0ZWRDaGlsZHJlbi5zbGljZSgpO1xuICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICByZXNldFNjaGVkdWxlclN0YXRlKCk7XG5cbiAgLy8gY2FsbCBjb21wb25lbnQgdXBkYXRlZCBhbmQgYWN0aXZhdGVkIGhvb2tzXG4gIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcblxuICAvLyBkZXZ0b29sIGhvb2tcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChkZXZ0b29scyAmJiBjb25maWcuZGV2dG9vbHMpIHtcbiAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgIGlmICh2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zLFxuICBpc1JlbmRlcldhdGNoZXJcbikge1xuICB0aGlzLnZtID0gdm07XG4gIGlmIChpc1JlbmRlcldhdGNoZXIpIHtcbiAgICB2bS5fd2F0Y2hlciA9IHRoaXM7XG4gIH1cbiAgdm0uX3dhdGNoZXJzLnB1c2godGhpcyk7XG4gIC8vIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlcDtcbiAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gbm9vcDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiICsgZXhwT3JGbiArIFwiXFxcIiBcIiArXG4gICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICdGb3IgZnVsbCBjb250cm9sLCB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHRoaXMuZ2V0KCk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSBnZXR0ZXIsIGFuZCByZS1jb2xsZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0ICgpIHtcbiAgcHVzaFRhcmdldCh0aGlzKTtcbiAgdmFyIHZhbHVlO1xuICB2YXIgdm0gPSB0aGlzLnZtO1xuICB0cnkge1xuICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gXCJ0b3VjaFwiIGV2ZXJ5IHByb3BlcnR5IHNvIHRoZXkgYXJlIGFsbCB0cmFja2VkIGFzXG4gICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgdHJhdmVyc2UodmFsdWUpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICB0aGlzLmNsZWFudXBEZXBzKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59O1xuXG4vKipcbiAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gIHZhciBpZCA9IGRlcC5pZDtcbiAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoaWQpKSB7XG4gICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgIGlmICghdGhpcy5kZXBJZHMuaGFzKGlkKSkge1xuICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYW4gdXAgZm9yIGRlcGVuZGVuY3kgY29sbGVjdGlvbi5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuY2xlYW51cERlcHMgPSBmdW5jdGlvbiBjbGVhbnVwRGVwcyAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgaWYgKCF0aGlzLm5ld0RlcElkcy5oYXMoZGVwLmlkKSkge1xuICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0aGlzLmRlcHNbaV0uZGVwZW5kKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVtb3ZlIHNlbGYgZnJvbSBhbGwgZGVwZW5kZW5jaWVzJyBzdWJzY3JpYmVyIGxpc3QuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gdGVhcmRvd24gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBub29wLFxuICBzZXQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIHByb3h5ICh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgcmV0dXJuIHRoaXNbc291cmNlS2V5XVtrZXldXG4gIH07XG4gIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gIH07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5pdFN0YXRlICh2bSkge1xuICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgaWYgKG9wdHMucHJvcHMpIHsgaW5pdFByb3BzKHZtLCBvcHRzLnByb3BzKTsgfVxuICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gIGlmIChvcHRzLmRhdGEpIHtcbiAgICBpbml0RGF0YSh2bSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2ZSh2bS5fZGF0YSA9IHt9LCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xuICB9XG4gIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgaWYgKG9wdHMud2F0Y2ggJiYgb3B0cy53YXRjaCAhPT0gbmF0aXZlV2F0Y2gpIHtcbiAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyAodm0sIHByb3BzT3B0aW9ucykge1xuICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICB2YXIgcHJvcHMgPSB2bS5fcHJvcHMgPSB7fTtcbiAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gIHZhciBrZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW107XG4gIHZhciBpc1Jvb3QgPSAhdm0uJHBhcmVudDtcbiAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gIGlmICghaXNSb290KSB7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgfVxuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiXFxcIlwiICsgaHlwaGVuYXRlZEtleSArIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XG4gICAgcmV0dXJuIHt9XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkICh2bSwgY29tcHV0ZWQpIHtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBudWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcihcbiAgICAgICAgdm0sXG4gICAgICAgIGdldHRlciB8fCBub29wLFxuICAgICAgICBub29wLFxuICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBtZXRob2RzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyB0eXBlIFxcXCJcIiArICh0eXBlb2YgbWV0aG9kc1trZXldKSArIFwiXFxcIiBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicgPyBub29wIDogYmluZChtZXRob2RzW2tleV0sIHZtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0V2F0Y2ggKHZtLCB3YXRjaCkge1xuICBmb3IgKHZhciBrZXkgaW4gd2F0Y2gpIHtcbiAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGhhbmRsZXIsXG4gIG9wdGlvbnNcbikge1xuICBpZiAoaXNQbGFpbk9iamVjdChoYW5kbGVyKSkge1xuICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgfVxuICByZXR1cm4gdm0uJHdhdGNoKGV4cE9yRm4sIGhhbmRsZXIsIG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIHN0YXRlTWl4aW4gKFZ1ZSkge1xuICAvLyBmbG93IHNvbWVob3cgaGFzIHByb2JsZW1zIHdpdGggZGlyZWN0bHkgZGVjbGFyZWQgZGVmaW5pdGlvbiBvYmplY3RcbiAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gIC8vIHRoZSBvYmplY3QgaGVyZS5cbiAgdmFyIGRhdGFEZWYgPSB7fTtcbiAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gIHZhciBwcm9wc0RlZiA9IHt9O1xuICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcm9wcyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGRhdGFEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIHJlcGxhY2luZyBpbnN0YW5jZSByb290ICRkYXRhLiAnICtcbiAgICAgICAgJ1VzZSBuZXN0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHRoaXMpO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRwcm9wcycsIHByb3BzRGVmKTtcblxuICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcblxuICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChcbiAgICBleHBPckZuLFxuICAgIGNiLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKHZtLCB3YXRjaGVyLnZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHVpZCQzID0gMDtcblxuZnVuY3Rpb24gaW5pdE1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhIHVpZFxuICAgIHZtLl91aWQgPSB1aWQkMysrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICBpbml0U3RhdGUodm0pO1xuICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIHZhciBwYXJlbnRWbm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuXG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gIGlmIChvcHRpb25zLnJlbmRlcikge1xuICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICBpZiAoQ3Rvci5zdXBlcikge1xuICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wb25lbnRzW29wdGlvbnMubmFtZV0gPSBDdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zIChDdG9yKSB7XG4gIHZhciBtb2RpZmllZDtcbiAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlmICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gVnVlIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlKVxuICApIHtcbiAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1ZSk7XG5zdGF0ZU1peGluKFZ1ZSk7XG5ldmVudHNNaXhpbihWdWUpO1xubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbnJlbmRlck1peGluKFZ1ZSk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIG9ic2VydmUob2JqKTtcbiAgICByZXR1cm4gb2JqXG4gIH07XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi42LjEwJztcblxuLyogICovXG5cbi8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuLy8gZHVyaW5nIHRlbXBsYXRlIGNvbXBpbGF0aW9uXG52YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gIHJldHVybiAoXG4gICAgKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSkgJiYgdHlwZSAhPT0gJ2J1dHRvbicgfHxcbiAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJylcbiAgKVxufTtcblxudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcblxudmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxudmFyIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICA/ICdmYWxzZSdcbiAgICAvLyBhbGxvdyBhcmJpdHJhcnkgc3RyaW5nIHZhbHVlIGZvciBjb250ZW50ZWRpdGFibGVcbiAgICA6IGtleSA9PT0gJ2NvbnRlbnRlZGl0YWJsZScgJiYgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlKHZhbHVlKVxuICAgICAgPyB2YWx1ZVxuICAgICAgOiAndHJ1ZSdcbn07XG5cbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoaXNEZWYocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO1xuXG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZylcbn07XG5cbmZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSAodGFnKSB7XG4gIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgcmV0dXJuICdzdmcnXG4gIH1cbiAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgcmV0dXJuICdtYXRoJ1xuICB9XG59XG5cbnZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duRWxlbWVudENhY2hlW3RhZ11cbiAgfVxuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAoXG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxVbmtub3duRWxlbWVudCB8fFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICB9XG59XG5cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKiAgKi9cblxuLyoqXG4gKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnkgKGVsKSB7XG4gIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHNlbGVjdGVkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCk7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbFxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEgKHRhZ05hbWUsIHZub2RlKSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gZWxtXG4gIH1cbiAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgaWYgKHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS5hdHRycyAmJiB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbG0uc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICdtdWx0aXBsZScpO1xuICB9XG4gIHJldHVybiBlbG1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlXG59XG5cbmZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5leHRTaWJsaW5nXG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZVxufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn1cblxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICBub2RlLnNldEF0dHJpYnV0ZShzY29wZUlkLCAnJyk7XG59XG5cbnZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50JDEsXG4gIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gIGNyZWF0ZUNvbW1lbnQ6IGNyZWF0ZUNvbW1lbnQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gIGFwcGVuZENoaWxkOiBhcHBlbmRDaGlsZCxcbiAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICB0YWdOYW1lOiB0YWdOYW1lLFxuICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFpc0RlZihrZXkpKSB7IHJldHVybiB9XG5cbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgdmFyIHJlZnMgPSB2bS4kcmVmcztcbiAgaWYgKGlzUmVtb3ZhbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgIHJlbW92ZShyZWZzW2tleV0sIHJlZik7XG4gICAgfSBlbHNlIGlmIChyZWZzW2tleV0gPT09IHJlZikge1xuICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVmc1trZXldID0gW3JlZl07XG4gICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICByZWZzW2tleV0ucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWZzW2tleV0gPSByZWY7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG5cbnZhciBlbXB0eU5vZGUgPSBuZXcgVk5vZGUoJycsIHt9LCBbXSk7XG5cbnZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG5mdW5jdGlvbiBzYW1lVm5vZGUgKGEsIGIpIHtcbiAgcmV0dXJuIChcbiAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgKFxuICAgICAgICBhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKVxuICAgICAgKSB8fCAoXG4gICAgICAgIGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiZcbiAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHNhbWVJbnB1dFR5cGUgKGEsIGIpIHtcbiAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGk7XG4gIHZhciB0eXBlQSA9IGlzRGVmKGkgPSBhLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgaXNUZXh0SW5wdXRUeXBlKHR5cGVBKSAmJiBpc1RleHRJbnB1dFR5cGUodHlwZUIpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICB2YXIgaSwga2V5O1xuICB2YXIgbWFwID0ge307XG4gIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAga2V5ID0gY2hpbGRyZW5baV0ua2V5O1xuICAgIGlmIChpc0RlZihrZXkpKSB7IG1hcFtrZXldID0gaTsgfVxuICB9XG4gIHJldHVybiBtYXBcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICB2YXIgaSwgajtcbiAgdmFyIGNicyA9IHt9O1xuXG4gIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICB2YXIgbm9kZU9wcyA9IGJhY2tlbmQubm9kZU9wcztcblxuICBmb3IgKGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyArK2kpIHtcbiAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eU5vZGVBdCAoZWxtKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZShub2RlT3BzLnRhZ05hbWUoZWxtKS50b0xvd2VyQ2FzZSgpLCB7fSwgW10sIHVuZGVmaW5lZCwgZWxtKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUm1DYiAoY2hpbGRFbG0sIGxpc3RlbmVycykge1xuICAgIGZ1bmN0aW9uIHJlbW92ZSQkMSAoKSB7XG4gICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZW1vdmUkJDEubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHJldHVybiByZW1vdmUkJDFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU5vZGUgKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIG5vZGVPcHMucmVtb3ZlQ2hpbGQocGFyZW50LCBlbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCQkMSAodm5vZGUsIGluVlByZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhaW5WUHJlICYmXG4gICAgICAhdm5vZGUubnMgJiZcbiAgICAgICEoXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgID8gaWdub3JlLnRlc3Qodm5vZGUudGFnKVxuICAgICAgICAgICAgOiBpZ25vcmUgPT09IHZub2RlLnRhZ1xuICAgICAgICB9KVxuICAgICAgKSAmJlxuICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKVxuICAgIClcbiAgfVxuXG4gIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbSxcbiAgICBuZXN0ZWQsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleFxuICApIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgIC8vIG5vdyBpdCdzIHVzZWQgYXMgYSBuZXcgbm9kZSwgb3ZlcndyaXRpbmcgaXRzIGVsbSB3b3VsZCBjYXVzZVxuICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgIC8vIGFzc29jaWF0ZWQgRE9NIGVsZW1lbnQgZm9yIGl0LlxuICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIH1cblxuICAgIHZub2RlLmlzUm9vdEluc2VydCA9ICFuZXN0ZWQ7IC8vIGZvciB0cmFuc2l0aW9uIGVudGVyIGNoZWNrXG4gICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgKyB0YWcgKyAnPiAtIGRpZCB5b3UgJyArXG4gICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAnbWFrZSBzdXJlIHRvIHByb3ZpZGUgdGhlIFwibmFtZVwiIG9wdGlvbi4nLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICB2YXIgaXNSZWFjdGl2YXRlZCA9IGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpLmtlZXBBbGl2ZTtcbiAgICAgIGlmIChpc0RlZihpID0gaS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkge1xuICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSkge1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgIGlmIChpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICB2YXIgaTtcbiAgICAvLyBoYWNrIGZvciAjNDMzOTogYSByZWFjdGl2YXRlZCBjb21wb25lbnQgd2l0aCBpbm5lciB0cmFuc2l0aW9uXG4gICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgIC8vIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGJldHRlciB3YXkgdG8gZG8gaXQuXG4gICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzLmFjdGl2YXRlW2ldKGVtcHR5Tm9kZSwgaW5uZXJOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaChpbm5lck5vZGUpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICAvLyB1bmxpa2UgYSBuZXdseSBjcmVhdGVkIGNvbXBvbmVudCxcbiAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgIGlmIChpc0RlZihwYXJlbnQpKSB7XG4gICAgICBpZiAoaXNEZWYocmVmJCQxKSkge1xuICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudCwgZWxtLCByZWYkJDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHBhcmVudCwgZWxtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZHJlbiAodm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGFuY2VzdG9yLmNvbnRleHQpICYmIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKSkge1xuICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICB9XG4gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgIGkgIT09IHZub2RlLmNvbnRleHQgJiZcbiAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgKSB7XG4gICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhZGRWbm9kZXMgKHBhcmVudEVsbSwgcmVmRWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sgKHZub2RlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKSB7IGkodm5vZGUpOyB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc0RlZihpID0gdm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaW52b2tlRGVzdHJveUhvb2sodm5vZGUuY2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyAocGFyZW50RWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYoY2gudGFnKSkge1xuICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gVGV4dCBub2RlXG4gICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayAodm5vZGUsIHJtKSB7XG4gICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxuICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpLCBybSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnMucmVtb3ZlW2ldKHZub2RlLCBybSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICBpKHZub2RlLCBybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICB2YXIgb2xkU3RhcnRJZHggPSAwO1xuICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgLy8gdG8gZW5zdXJlIHJlbW92ZWQgZWxlbWVudHMgc3RheSBpbiBjb3JyZWN0IHJlbGF0aXZlIHBvc2l0aW9uc1xuICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgIH1cblxuICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2RlIGhhcyBiZWVuIG1vdmVkIGxlZnRcbiAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgcmlnaHRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICA/IG9sZEtleVRvSWR4W25ld1N0YXJ0Vm5vZGUua2V5XVxuICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgaWYgKGlzVW5kZWYoaWR4SW5PbGQpKSB7IC8vIE5ldyBlbGVtZW50XG4gICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgIG9sZENoW2lkeEluT2xkXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCB2bm9kZVRvTW92ZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2FtZSBrZXkgYnV0IGRpZmZlcmVudCBlbGVtZW50LiB0cmVhdCBhcyBuZXcgZWxlbWVudFxuICAgICAgICAgICAgY3JlYXRlRWxtKG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgZmFsc2UsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgIH0gZWxzZSBpZiAobmV3U3RhcnRJZHggPiBuZXdFbmRJZHgpIHtcbiAgICAgIHJlbW92ZVZub2RlcyhwYXJlbnRFbG0sIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0R1cGxpY2F0ZUtleXMgKGNoaWxkcmVuKSB7XG4gICAgdmFyIHNlZW5LZXlzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZub2RlID0gY2hpbGRyZW5baV07XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5O1xuICAgICAgaWYgKGlzRGVmKGtleSkpIHtcbiAgICAgICAgaWYgKHNlZW5LZXlzW2tleV0pIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiRHVwbGljYXRlIGtleXMgZGV0ZWN0ZWQ6ICdcIiArIGtleSArIFwiJy4gVGhpcyBtYXkgY2F1c2UgYW4gdXBkYXRlIGVycm9yLlwiKSxcbiAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZElkeEluT2xkIChub2RlLCBvbGRDaCwgc3RhcnQsIGVuZCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IG9sZENoW2ldO1xuICAgICAgaWYgKGlzRGVmKGMpICYmIHNhbWVWbm9kZShub2RlLCBjKSkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hWbm9kZSAoXG4gICAgb2xkVm5vZGUsXG4gICAgdm5vZGUsXG4gICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgIG93bmVyQXJyYXksXG4gICAgaW5kZXgsXG4gICAgcmVtb3ZlT25seVxuICApIHtcbiAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgLy8gY2xvbmUgcmV1c2VkIHZub2RlXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbSA9IG9sZFZub2RlLmVsbTtcblxuICAgIGlmIChpc1RydWUob2xkVm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyKSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgaHlkcmF0ZShvbGRWbm9kZS5lbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHJldXNlIGVsZW1lbnQgZm9yIHN0YXRpYyB0cmVlcy5cbiAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAvLyByZXNldCBieSB0aGUgaG90LXJlbG9hZC1hcGkgYW5kIHdlIG5lZWQgdG8gZG8gYSBwcm9wZXIgcmUtcmVuZGVyLlxuICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpXG4gICAgKSB7XG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICB2YXIgY2ggPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS51cGRhdGUpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgaWYgKGlzRGVmKG9sZENoKSAmJiBpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKG9sZENoICE9PSBjaCkgeyB1cGRhdGVDaGlsZHJlbihlbG0sIG9sZENoLCBjaCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCByZW1vdmVPbmx5KTsgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkgeyBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpOyB9XG4gICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRDaCkpIHtcbiAgICAgICAgcmVtb3ZlVm5vZGVzKGVsbSwgb2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2xkVm5vZGUudGV4dCAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMgcmVhbGx5IGluc2VydGVkXG4gICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICB2bm9kZS5wYXJlbnQuZGF0YS5wZW5kaW5nSW5zZXJ0ID0gcXVldWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcXVldWVbaV0uZGF0YS5ob29rLmluc2VydChxdWV1ZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAvLyBhcmUgYWxyZWFkeSByZW5kZXJlZCBvbiB0aGUgY2xpZW50IG9yIGhhcyBubyBuZWVkIGZvciBpbml0aWFsaXphdGlvblxuICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gIHZhciBpc1JlbmRlcmVkTW9kdWxlID0gbWFrZU1hcCgnYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5Jyk7XG5cbiAgLy8gTm90ZTogdGhpcyBpcyBhIGJyb3dzZXItb25seSBmdW5jdGlvbiBzbyB3ZSBjYW4gYXNzdW1lIGVsbXMgYXJlIERPTSBub2Rlcy5cbiAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICBpblZQcmUgPSBpblZQcmUgfHwgKGRhdGEgJiYgZGF0YS5wcmUpO1xuICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSAmJiBpc0RlZih2bm9kZS5hc3luY0ZhY3RvcnkpKSB7XG4gICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gYXNzZXJ0IG5vZGUgbWF0Y2hcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHsgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pOyB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgLy8gZW1wdHkgZWxlbWVudCwgYWxsb3cgY2xpZW50IHRvIHBpY2sgdXAgYW5kIHBvcHVsYXRlIGNoaWxkcmVuXG4gICAgICAgIGlmICghZWxtLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB2LWh0bWwgYW5kIGRvbVByb3BzOiBpbm5lckhUTUxcbiAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5NYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZWxtLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8ICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baSQxXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgY2hpbGROb2RlIGlzIG5vdCBudWxsLCBpdCBtZWFucyB0aGUgYWN0dWFsIGNoaWxkTm9kZXMgbGlzdCBpc1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIHZhciBmdWxsSW52b2tlID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgIGZ1bGxJbnZva2UgPSB0cnVlO1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgIC8vIGVuc3VyZSBjb2xsZWN0aW5nIGRlcHMgZm9yIGRlZXAgY2xhc3MgYmluZGluZ3MgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnROb2RlTWF0Y2ggKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAhaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkVm5vZGUpKSB7IGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuXG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1JlYWxFbGVtZW50ID0gaXNEZWYob2xkVm5vZGUubm9kZVR5cGUpO1xuICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHRydWUpO1xuICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgaW5jb3JyZWN0ICcgK1xuICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAnZnVsbCBjbGllbnQtc2lkZSByZW5kZXIuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgIG9sZFZub2RlID0gZW1wdHlOb2RlQXQob2xkVm5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICBjcmVhdGVFbG0oXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgICAgIC8vIGV4dHJlbWVseSByYXJlIGVkZ2UgY2FzZTogZG8gbm90IGluc2VydCBpZiBvbGQgZWxlbWVudCBpcyBpbiBhXG4gICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICBvbGRFbG0uX2xlYXZlQ2IgPyBudWxsIDogcGFyZW50RWxtLFxuICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHVwZGF0ZSBwYXJlbnQgcGxhY2Vob2xkZXIgbm9kZSBlbGVtZW50LCByZWN1cnNpdmVseVxuICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlLnBhcmVudDtcbiAgICAgICAgICB2YXIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXShhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3Rvci5lbG0gPSB2bm9kZS5lbG07XG4gICAgICAgICAgICBpZiAocGF0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAvLyBpbnZva2UgaW5zZXJ0IGhvb2tzIHRoYXQgbWF5IGhhdmUgYmVlbiBtZXJnZWQgYnkgY3JlYXRlIGhvb2tzLlxuICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICBpZiAoaW5zZXJ0Lm1lcmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgaW5zZXJ0LmZuc1tpJDJdKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWdpc3RlclJlZihhbmNlc3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZXN0cm95IG9sZCBub2RlXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgW29sZFZub2RlXSwgMCwgMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgIHJldHVybiB2bm9kZS5lbG1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGRpcmVjdGl2ZXMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzICh2bm9kZSkge1xuICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcywgb2xkVm5vZGUuY29udGV4dCk7XG4gIHZhciBuZXdEaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyQxKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4dCk7XG5cbiAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gIHZhciBkaXJzV2l0aFBvc3RwYXRjaCA9IFtdO1xuXG4gIHZhciBrZXksIG9sZERpciwgZGlyO1xuICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgIGRpciA9IG5ld0RpcnNba2V5XTtcbiAgICBpZiAoIW9sZERpcikge1xuICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAgY2FsbEhvb2skMShkaXIsICdiaW5kJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBkaXJlY3RpdmUsIHVwZGF0ZVxuICAgICAgZGlyLm9sZFZhbHVlID0gb2xkRGlyLnZhbHVlO1xuICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICBjYWxsSG9vayQxKGRpciwgJ3VwZGF0ZScsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmNvbXBvbmVudFVwZGF0ZWQpIHtcbiAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aEluc2VydC5sZW5ndGgpIHtcbiAgICB2YXIgY2FsbEluc2VydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0NyZWF0ZSkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBjYWxsSW5zZXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbEluc2VydCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGgpIHtcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbEhvb2skMShkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFpc0NyZWF0ZSkge1xuICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgIGlmICghbmV3RGlyc1trZXldKSB7XG4gICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gIGRpcnMsXG4gIHZtXG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmICghZGlycykge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHJldHVybiByZXNcbiAgfVxuICB2YXIgaSwgZGlyO1xuICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgIGRpciA9IGRpcnNbaV07XG4gICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0UmF3RGlyTmFtZSAoZGlyKSB7XG4gIHJldHVybiBkaXIucmF3TmFtZSB8fCAoKGRpci5uYW1lKSArIFwiLlwiICsgKE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpXG59XG5cbmZ1bmN0aW9uIGNhbGxIb29rJDEgKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgdmFyIGZuID0gZGlyLmRlZiAmJiBkaXIuZGVmW2hvb2tdO1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgZm4odm5vZGUuZWxtLCBkaXIsIHZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCAoXCJkaXJlY3RpdmUgXCIgKyAoZGlyLm5hbWUpICsgXCIgXCIgKyBob29rICsgXCIgaG9va1wiKSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtcbiAgcmVmLFxuICBkaXJlY3RpdmVzXG5dO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQXR0cnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgb3B0cyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1ciwgb2xkO1xuICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkQXR0cnMgPSBvbGRWbm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgaWYgKGlzRGVmKGF0dHJzLl9fb2JfXykpIHtcbiAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgfVxuXG4gIGZvciAoa2V5IGluIGF0dHJzKSB7XG4gICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICBvbGQgPSBvbGRBdHRyc1trZXldO1xuICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyKTtcbiAgICB9XG4gIH1cbiAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgLy8gIzY2NjY6IElFL0VkZ2UgZm9yY2VzIHByb2dyZXNzIHZhbHVlIGRvd24gdG8gMSBiZWZvcmUgc2V0dGluZyBhIG1heFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgfVxuICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoZWwudGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5BdHRyKGtleSkpIHtcbiAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcbiAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnXG4gICAgICAgID8gJ3RydWUnXG4gICAgICAgIDoga2V5O1xuICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgfSBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlU2V0QXR0ciAoZWwsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAvLyA8dGV4dGFyZWE+Li4uIGJsb2NrIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhbmQgcmVtb3ZlIHRoZSBibG9ja2VyXG4gICAgLy8gaW1tZWRpYXRlbHkuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKFxuICAgICAgaXNJRSAmJiAhaXNJRTkgJiZcbiAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgIGtleSA9PT0gJ3BsYWNlaG9sZGVyJyAmJiB2YWx1ZSAhPT0gJycgJiYgIWVsLl9faWVwaFxuICAgICkge1xuICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXIpO1xuICAgICAgfTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICB9XG59XG5cbnZhciBhdHRycyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgdXBkYXRlOiB1cGRhdGVBdHRyc1xufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgaWYgKFxuICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICBpc1VuZGVmKGRhdGEuY2xhc3MpICYmIChcbiAgICAgIGlzVW5kZWYob2xkRGF0YSkgfHwgKFxuICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5jbGFzcylcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuXG4gIC8vIGhhbmRsZSB0cmFuc2l0aW9uIGNsYXNzZXNcbiAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgaWYgKGlzRGVmKHRyYW5zaXRpb25DbGFzcykpIHtcbiAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgfVxuXG4gIC8vIHNldCB0aGUgY2xhc3NcbiAgaWYgKGNscyAhPT0gZWwuX3ByZXZDbGFzcykge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbHMpO1xuICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gIH1cbn1cblxudmFyIGtsYXNzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUNsYXNzLFxuICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuLy8gc28gd2UgdXNlZCBzb21lIHJlc2VydmVkIHRva2VucyBkdXJpbmcgY29tcGlsZS5cbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xudmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gIH1cbiAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gIH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciQxIChldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldCQxOyAvLyBzYXZlIGN1cnJlbnQgdGFyZ2V0IGVsZW1lbnQgaW4gY2xvc3VyZVxuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgcmVtb3ZlJDIoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbi8vIGltcGxlbWVudGF0aW9uIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc29cbi8vIHNhZmUgdG8gZXhjbHVkZS5cbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuXG5mdW5jdGlvbiBhZGQkMSAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIHBhc3NpdmVcbikge1xuICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXG4gIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXG4gIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxuICBpZiAodXNlTWljcm90YXNrRml4KSB7XG4gICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgIHZhciBvcmlnaW5hbCA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IG9yaWdpbmFsLl93cmFwcGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cbiAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgLy8gZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgaGFuZGxlciBhdHRhY2htZW50XG4gICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wIHx8XG4gICAgICAgIC8vIGJhaWwgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYnVnZ3kgZXZlbnQudGltZVN0YW1wIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICBlLnRpbWVTdGFtcCA8PSAwIHx8XG4gICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAvLyBzdGFydGluZyByZWZlcmVuY2VcbiAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgdGFyZ2V0JDEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDIgKFxuICBuYW1lLFxuICBoYW5kbGVyLFxuICBjYXB0dXJlLFxuICBfdGFyZ2V0XG4pIHtcbiAgKF90YXJnZXQgfHwgdGFyZ2V0JDEpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsXG4gICAgY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdGFyZ2V0JDEgPSB2bm9kZS5lbG07XG4gIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm5vZGUuY29udGV4dCk7XG4gIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuXG52YXIgZXZlbnRzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTUxpc3RlbmVycyxcbiAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnNcbn07XG5cbi8qICAqL1xuXG52YXIgc3ZnQ29udGFpbmVyO1xuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIga2V5LCBjdXI7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSkge1xuICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICBlbG1ba2V5XSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoa2V5IGluIHByb3BzKSB7XG4gICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAvLyBpZ25vcmUgY2hpbGRyZW4gaWYgdGhlIG5vZGUgaGFzIHRleHRDb250ZW50IG9yIGlubmVySFRNTCxcbiAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgaWYgKGtleSA9PT0gJ3RleHRDb250ZW50JyB8fCBrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBpZiAodm5vZGUuY2hpbGRyZW4pIHsgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDsgfVxuICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgICAvLyAjNjYwMSB3b3JrIGFyb3VuZCBDaHJvbWUgdmVyc2lvbiA8PSA1NSBidWcgd2hlcmUgc2luZ2xlIHRleHROb2RlXG4gICAgICAvLyByZXBsYWNlZCBieSBpbm5lckhUTUwvdGV4dENvbnRlbnQgcmV0YWlucyBpdHMgcGFyZW50Tm9kZSBwcm9wZXJ0eVxuICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd2YWx1ZScgJiYgZWxtLnRhZ05hbWUgIT09ICdQUk9HUkVTUycpIHtcbiAgICAgIC8vIHN0b3JlIHZhbHVlIGFzIF92YWx1ZSBhcyB3ZWxsIHNpbmNlXG4gICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICBlbG0uX3ZhbHVlID0gY3VyO1xuICAgICAgLy8gYXZvaWQgcmVzZXR0aW5nIGN1cnNvciBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIHRoZSBzYW1lXG4gICAgICB2YXIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVWYWx1ZShlbG0sIHN0ckN1cikpIHtcbiAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyAmJiBpc1NWRyhlbG0udGFnTmFtZSkgJiYgaXNVbmRlZihlbG0uaW5uZXJIVE1MKSkge1xuICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzdmdDb250YWluZXIuaW5uZXJIVE1MID0gXCI8c3ZnPlwiICsgY3VyICsgXCI8L3N2Zz5cIjtcbiAgICAgIHZhciBzdmcgPSBzdmdDb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICBlbG0ucmVtb3ZlQ2hpbGQoZWxtLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5hcHBlbmRDaGlsZChzdmcuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgLy8gYHZhbHVlYCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSB0aGUgRE9NIHZhbHVlIG1heSBiZSB0ZW1wb3JhcmlseVxuICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2VzYXJyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgY3VyICE9PSBvbGRQcm9wc1trZXldXG4gICAgKSB7XG4gICAgICAvLyBzb21lIHByb3BlcnR5IHVwZGF0ZXMgY2FuIHRocm93XG4gICAgICAvLyBlLmcuIGB2YWx1ZWAgb24gPHByb2dyZXNzPiB3LyBub24tZmluaXRlIHZhbHVlXG4gICAgICB0cnkge1xuICAgICAgICBlbG1ba2V5XSA9IGN1cjtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlIChlbG0sIGNoZWNrVmFsKSB7XG4gIHJldHVybiAoIWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbClcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkgKGVsbSwgY2hlY2tWYWwpIHtcbiAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAvLyBub3QgZXF1YWwgdG8gdGhlIHVwZGF0ZWQgdmFsdWVcbiAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAvLyAjNjE1N1xuICAvLyB3b3JrIGFyb3VuZCBJRSBidWcgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbiBhbiBpZnJhbWVcbiAgdHJ5IHsgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTsgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxufVxuXG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyAoZWxtLCBuZXdWYWwpIHtcbiAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgaWYgKGlzRGVmKG1vZGlmaWVycykpIHtcbiAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKVxuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWxcbn1cblxudmFyIGRvbVByb3BzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG4vKiAgKi9cblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0KSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRhLnN0eWxlKTtcbiAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gIHJldHVybiBkYXRhLnN0YXRpY1N0eWxlXG4gICAgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpXG4gICAgOiBzdHlsZVxufVxuXG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKVxuICB9XG4gIHJldHVybiBiaW5kaW5nU3R5bGVcbn1cblxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBiZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSAodm5vZGUsIGNoZWNrQ2hpbGQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgc3R5bGVEYXRhO1xuXG4gIGlmIChjaGVja0NoaWxkKSB7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKGNoaWxkTm9kZS5kYXRhKSlcbiAgICAgICkge1xuICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICgoc3R5bGVEYXRhID0gbm9ybWFsaXplU3R5bGVEYXRhKHZub2RlLmRhdGEpKSkge1xuICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gIH1cblxuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBjc3NWYXJSRSA9IC9eLS0vO1xudmFyIGltcG9ydGFudFJFID0gL1xccyohaW1wb3J0YW50JC87XG52YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoY3NzVmFyUkUudGVzdChuYW1lKSkge1xuICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gIH0gZWxzZSBpZiAoaW1wb3J0YW50UkUudGVzdCh2YWwpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoaHlwaGVuYXRlKG5hbWUpLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG5cbnZhciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xuICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICBpZiAocHJvcCAhPT0gJ2ZpbHRlcicgJiYgKHByb3AgaW4gZW1wdHlTdHlsZSkpIHtcbiAgICByZXR1cm4gcHJvcFxuICB9XG4gIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICBpZiAobmFtZSBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG5cbiAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihvbGREYXRhLnN0eWxlKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjdXIsIG5hbWU7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG5cbiAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgdmFyIG9sZFN0eWxlID0gb2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuXG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcblxuICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gIC8vIG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBsaWtlbHkgd2FudHNcbiAgLy8gdG8gbXV0YXRlIGl0LlxuICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICA/IGV4dGVuZCh7fSwgc3R5bGUpXG4gICAgOiBzdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgfVxuICB9XG59XG5cbnZhciBzdHlsZSA9IHtcbiAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxuLyogICovXG5cbnZhciB3aGl0ZXNwYWNlUkUgPSAvXFxzKy87XG5cbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgIH1cbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIpID49IDApIHtcbiAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICB9XG4gICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICBpZiAoY3VyKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24gKGRlZiQkMSkge1xuICBpZiAoIWRlZiQkMSkge1xuICAgIHJldHVyblxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZGVmJCQxID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMS5uYW1lIHx8ICd2JykpO1xuICAgIH1cbiAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmJCQxID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEpXG4gIH1cbn1cblxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXJDbGFzczogKG5hbWUgKyBcIi1lbnRlclwiKSxcbiAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgZW50ZXJBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgbGVhdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZVwiKSxcbiAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgbGVhdmVBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgfVxufSk7XG5cbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYmICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlvbic7XG4gICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICB9XG4gIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICB9XG59XG5cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgOiBzZXRUaW1lb3V0XG4gIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKGZuKSB7IHJldHVybiBmbigpOyB9O1xuXG5mdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgcmFmKGZuKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcbiAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICByZW1vdmUoZWwuX3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICBlbCxcbiAgZXhwZWN0ZWRUeXBlLFxuICBjYlxuKSB7XG4gIHZhciByZWYgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcbiAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgdmFyIHRpbWVvdXQgPSByZWYudGltZW91dDtcbiAgdmFyIHByb3BDb3VudCA9IHJlZi5wcm9wQ291bnQ7XG4gIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgdmFyIGVuZGVkID0gMDtcbiAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG4gICAgY2IoKTtcbiAgfTtcbiAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAgIH1cbiAgfSwgdGltZW91dCArIDEpO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG59XG5cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvIChlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgdmFyIHRyYW5zaXRpb25EZWxheXMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgdmFyIHR5cGU7XG4gIHZhciB0aW1lb3V0ID0gMDtcbiAgdmFyIHByb3BDb3VudCA9IDA7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IFRSQU5TSVRJT047XG4gICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICB0aW1lb3V0ID0gYW5pbWF0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgdHlwZSA9IHRpbWVvdXQgPiAwXG4gICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgOiBBTklNQVRJT05cbiAgICAgIDogbnVsbDtcbiAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgPyB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgIDogMDtcbiAgfVxuICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICB0eXBlID09PSBUUkFOU0lUSU9OICYmXG4gICAgdHJhbnNmb3JtUkUudGVzdChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnUHJvcGVydHknXSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZSxcbiAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGltZW91dCAoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKVxuICB9KSlcbn1cblxuLy8gT2xkIHZlcnNpb25zIG9mIENocm9taXVtIChiZWxvdyA2MS4wLjMxNjMuMTAwKSBmb3JtYXRzIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyc1xuLy8gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxuLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3Rpbmdcbi8vIGFzIGEgZmxvb3IgZnVuY3Rpb24pIGNhdXNpbmcgdW5leHBlY3RlZCBiZWhhdmlvcnNcbmZ1bmN0aW9uIHRvTXMgKHMpIHtcbiAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnRlciAodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuXG4gIC8vIGNhbGwgbGVhdmUgY2FsbGJhY2sgbm93XG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICBlbC5fbGVhdmVDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGVsLl9sZWF2ZUNiKCk7XG4gIH1cblxuICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGVudGVyQ2xhc3MgPSBkYXRhLmVudGVyQ2xhc3M7XG4gIHZhciBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcztcbiAgdmFyIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3M7XG4gIHZhciBhcHBlYXJDbGFzcyA9IGRhdGEuYXBwZWFyQ2xhc3M7XG4gIHZhciBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzO1xuICB2YXIgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlRW50ZXIgPSBkYXRhLmJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXIgPSBkYXRhLmVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkID0gZGF0YS5lbnRlckNhbmNlbGxlZDtcbiAgdmFyIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyO1xuICB2YXIgYXBwZWFyID0gZGF0YS5hcHBlYXI7XG4gIHZhciBhZnRlckFwcGVhciA9IGRhdGEuYWZ0ZXJBcHBlYXI7XG4gIHZhciBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZDtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAvLyBhcyB0aGUgcm9vdCBub2RlIG9mIGEgY2hpbGQgY29tcG9uZW50LiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjaGVja1xuICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgdmFyIHRyYW5zaXRpb25Ob2RlID0gYWN0aXZlSW5zdGFuY2UuJHZub2RlO1xuICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgdHJhbnNpdGlvbk5vZGUgPSB0cmFuc2l0aW9uTm9kZS5wYXJlbnQ7XG4gIH1cblxuICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG5cbiAgaWYgKGlzQXBwZWFyICYmICFhcHBlYXIgJiYgYXBwZWFyICE9PSAnJykge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIHN0YXJ0Q2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJDbGFzc1xuICAgID8gYXBwZWFyQ2xhc3NcbiAgICA6IGVudGVyQ2xhc3M7XG4gIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgPyBhcHBlYXJBY3RpdmVDbGFzc1xuICAgIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIHRvQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJUb0NsYXNzXG4gICAgPyBhcHBlYXJUb0NsYXNzXG4gICAgOiBlbnRlclRvQ2xhc3M7XG5cbiAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyKVxuICAgIDogYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKHR5cGVvZiBhcHBlYXIgPT09ICdmdW5jdGlvbicgPyBhcHBlYXIgOiBlbnRlcilcbiAgICA6IGVudGVyO1xuICB2YXIgYWZ0ZXJFbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFmdGVyQXBwZWFyIHx8IGFmdGVyRW50ZXIpXG4gICAgOiBhZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWRIb29rID0gaXNBcHBlYXJcbiAgICA/IChhcHBlYXJDYW5jZWxsZWQgfHwgZW50ZXJDYW5jZWxsZWQpXG4gICAgOiBlbnRlckNhbmNlbGxlZDtcblxuICB2YXIgZXhwbGljaXRFbnRlckR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmVudGVyXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZXhwbGljaXRFbnRlckR1cmF0aW9uICE9IG51bGwpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgdmFyIGNiID0gZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICB9XG4gICAgZWwuX2VudGVyQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoIXZub2RlLmRhdGEuc2hvdykge1xuICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiXG4gICAgICApIHtcbiAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICB9XG4gICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gIGJlZm9yZUVudGVySG9vayAmJiBiZWZvcmVFbnRlckhvb2soZWwpO1xuICBpZiAoZXhwZWN0c0NTUykge1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgIHRvZ2dsZURpc3BsYXkgJiYgdG9nZ2xlRGlzcGxheSgpO1xuICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgfVxuXG4gIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgIGNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2VudGVyQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gcm0oKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBsZWF2ZUNsYXNzID0gZGF0YS5sZWF2ZUNsYXNzO1xuICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gIHZhciBsZWF2ZUFjdGl2ZUNsYXNzID0gZGF0YS5sZWF2ZUFjdGl2ZUNsYXNzO1xuICB2YXIgYmVmb3JlTGVhdmUgPSBkYXRhLmJlZm9yZUxlYXZlO1xuICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICB2YXIgYWZ0ZXJMZWF2ZSA9IGRhdGEuYWZ0ZXJMZWF2ZTtcbiAgdmFyIGxlYXZlQ2FuY2VsbGVkID0gZGF0YS5sZWF2ZUNhbmNlbGxlZDtcbiAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgdmFyIGV4cGVjdHNDU1MgPSBjc3MgIT09IGZhbHNlICYmICFpc0lFOTtcbiAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICB2YXIgZXhwbGljaXRMZWF2ZUR1cmF0aW9uID0gdG9OdW1iZXIoXG4gICAgaXNPYmplY3QoZHVyYXRpb24pXG4gICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICA6IGR1cmF0aW9uXG4gICk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgY2IgPSBlbC5fbGVhdmVDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgIGVsLnBhcmVudE5vZGUuX3BlbmRpbmdbdm5vZGUua2V5XSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgfVxuICAgICAgbGVhdmVDYW5jZWxsZWQgJiYgbGVhdmVDYW5jZWxsZWQoZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKGVsKTtcbiAgICB9XG4gICAgZWwuX2xlYXZlQ2IgPSBudWxsO1xuICB9KTtcblxuICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgIGRlbGF5TGVhdmUocGVyZm9ybUxlYXZlKTtcbiAgfSBlbHNlIHtcbiAgICBwZXJmb3JtTGVhdmUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcmZvcm1MZWF2ZSAoKSB7XG4gICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyByZWNvcmQgbGVhdmluZyBlbGVtZW50XG4gICAgaWYgKCF2bm9kZS5kYXRhLnNob3cgJiYgZWwucGFyZW50Tm9kZSkge1xuICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgIH1cbiAgICBiZWZvcmVMZWF2ZSAmJiBiZWZvcmVMZWF2ZShlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgaWYgKCFjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICBjYigpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgIFwiZ290IFwiICsgKEpTT04uc3RyaW5naWZ5KHZhbCkpICsgXCIuXCIsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgd2FybihcbiAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICd0aGUgZHVyYXRpb24gZXhwcmVzc2lvbiBtaWdodCBiZSBpbmNvcnJlY3QuJyxcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XG4gIGlmIChpc0RlZihpbnZva2VyRm5zKSkge1xuICAgIC8vIGludm9rZXJcbiAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChcbiAgICAgIEFycmF5LmlzQXJyYXkoaW52b2tlckZucylcbiAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgIDogaW52b2tlckZuc1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDFcbiAgfVxufVxuXG5mdW5jdGlvbiBfZW50ZXIgKF8sIHZub2RlKSB7XG4gIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICBlbnRlcih2bm9kZSk7XG4gIH1cbn1cblxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gIGNyZWF0ZTogX2VudGVyLFxuICBhY3RpdmF0ZTogX2VudGVyLFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBybSgpO1xuICAgIH1cbiAgfVxufSA6IHt9O1xuXG52YXIgcGxhdGZvcm1Nb2R1bGVzID0gW1xuICBhdHRycyxcbiAga2xhc3MsXG4gIGV2ZW50cyxcbiAgZG9tUHJvcHMsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uXG5dO1xuXG4vKiAgKi9cblxuLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4vLyBidWlsdC1pbiBtb2R1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLlxudmFyIG1vZHVsZXMgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcblxudmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMgfSk7XG5cbi8qKlxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKGlzSUU5KSB7XG4gIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhwbG9yZXItOS1vbmlucHV0L1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQnKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgZGlyZWN0aXZlID0ge1xuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgLy8gIzY5MDNcbiAgICAgIGlmIChvbGRWbm9kZS5lbG0gJiYgIW9sZFZub2RlLmVsbS5fdk9wdGlvbnMpIHtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICB9XG4gICAgICBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICBlbC5fdk1vZGlmaWVycyA9IGJpbmRpbmcubW9kaWZpZXJzO1xuICAgICAgaWYgKCFiaW5kaW5nLm1vZGlmaWVycy5sYXp5KSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAvLyBTYWZhcmkgPCAxMC4yICYgVUlXZWJWaWV3IGRvZXNuJ3QgZmlyZSBjb21wb3NpdGlvbmVuZCB3aGVuXG4gICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxuICAgICAgICAvLyBmaXJlcyBcImNoYW5nZVwiIGluc3RlYWQgb2YgXCJpbnB1dFwiIG9uIGF1dG9jb21wbGV0ZS5cbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRTkpIHtcbiAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICB2YXIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICB2YXIgY3VyT3B0aW9ucyA9IGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICAgIGlmIChjdXJPcHRpb25zLnNvbWUoZnVuY3Rpb24gKG8sIGkpIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHByZXZPcHRpb25zW2ldKTsgfSkpIHtcbiAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgdmFyIG5lZWRSZXNldCA9IGVsLm11bHRpcGxlXG4gICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIiArIChiaW5kaW5nLmV4cHJlc3Npb24pICsgXCJcXFwiPiBcIiArXG4gICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBidXQgZ290IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShvcHRpb24pKSA+IC0xO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xuICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZXZlcnkoZnVuY3Rpb24gKG8pIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHZhbHVlKTsgfSlcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUgKG9wdGlvbikge1xuICByZXR1cm4gJ192YWx1ZScgaW4gb3B0aW9uXG4gICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgOiBvcHRpb24udmFsdWVcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgaWYgKCFlLnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vKiAgKi9cblxuLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuZnVuY3Rpb24gbG9jYXRlTm9kZSAodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgOiB2bm9kZVxufVxuXG52YXIgc2hvdyA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZCAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG5cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgdmFyIG9yaWdpbmFsRGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHZhbHVlICYmIHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IG9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdmFsdWUgPT09ICFvbGRWYWx1ZSkgeyByZXR1cm4gfVxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICBpZiAodHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZCAoXG4gICAgZWwsXG4gICAgYmluZGluZyxcbiAgICB2bm9kZSxcbiAgICBvbGRWbm9kZSxcbiAgICBpc0Rlc3Ryb3lcbiAgKSB7XG4gICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICBtb2RlbDogZGlyZWN0aXZlLFxuICBzaG93OiBzaG93XG59O1xuXG4vKiAgKi9cblxudmFyIHRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgbmFtZTogU3RyaW5nLFxuICBhcHBlYXI6IEJvb2xlYW4sXG4gIGNzczogQm9vbGVhbixcbiAgbW9kZTogU3RyaW5nLFxuICB0eXBlOiBTdHJpbmcsXG4gIGVudGVyQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVDbGFzczogU3RyaW5nLFxuICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVUb0NsYXNzOiBTdHJpbmcsXG4gIGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJDbGFzczogU3RyaW5nLFxuICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gIGR1cmF0aW9uOiBbTnVtYmVyLCBTdHJpbmcsIE9iamVjdF1cbn07XG5cbi8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuLy8gd2Ugd2FudCB0byByZWN1cnNpdmVseSByZXRyaWV2ZSB0aGUgcmVhbCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWRcbmZ1bmN0aW9uIGdldFJlYWxDaGlsZCAodm5vZGUpIHtcbiAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGNvbXBPcHRpb25zICYmIGNvbXBPcHRpb25zLkN0b3Iub3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjb21wT3B0aW9ucy5jaGlsZHJlbikpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhIChjb21wKSB7XG4gIHZhciBkYXRhID0ge307XG4gIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgLy8gcHJvcHNcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMucHJvcHNEYXRhKSB7XG4gICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICB9XG4gIC8vIGV2ZW50cy5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gIHZhciBsaXN0ZW5lcnMgPSBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gIGZvciAodmFyIGtleSQxIGluIGxpc3RlbmVycykge1xuICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gcGxhY2Vob2xkZXIgKGgsIHJhd0NoaWxkKSB7XG4gIGlmICgvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHJhd0NoaWxkLnRhZykpIHtcbiAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgIHByb3BzOiByYXdDaGlsZC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50VHJhbnNpdGlvbiAodm5vZGUpIHtcbiAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZ1xufVxuXG52YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XG5cbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xuXG52YXIgVHJhbnNpdGlvbiA9IHtcbiAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICBwcm9wczogdHJhbnNpdGlvblByb3BzLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGlzTm90VGV4dE5vZGUpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgd2FybihcbiAgICAgICAgJzx0cmFuc2l0aW9uPiBjYW4gb25seSBiZSB1c2VkIG9uIGEgc2luZ2xlIGVsZW1lbnQuIFVzZSAnICtcbiAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgdGhpcy4kcGFyZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBtb2RlID0gdGhpcy5tb2RlO1xuXG4gICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICkge1xuICAgICAgd2FybihcbiAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHJhd0NoaWxkID0gY2hpbGRyZW5bMF07XG5cbiAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0cmFuc2l0aW9uIGRhdGEgdG8gY2hpbGRcbiAgICAvLyB1c2UgZ2V0UmVhbENoaWxkKCkgdG8gaWdub3JlIGFic3RyYWN0IGNvbXBvbmVudHMgZS5nLiBrZWVwLWFsaXZlXG4gICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgIH1cblxuICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICB2YXIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIiArICh0aGlzLl91aWQpICsgXCItXCI7XG4gICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgID8gaWQgKyAnY29tbWVudCdcbiAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgOiBpc1ByaW1pdGl2ZShjaGlsZC5rZXkpXG4gICAgICAgID8gKFN0cmluZyhjaGlsZC5rZXkpLmluZGV4T2YoaWQpID09PSAwID8gY2hpbGQua2V5IDogaWQgKyBjaGlsZC5rZXkpXG4gICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgdmFyIGRhdGEgPSAoY2hpbGQuZGF0YSB8fCAoY2hpbGQuZGF0YSA9IHt9KSkudHJhbnNpdGlvbiA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcbiAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgLy8gbWFyayB2LXNob3dcbiAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9sZENoaWxkICYmXG4gICAgICBvbGRDaGlsZC5kYXRhICYmXG4gICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgIWlzQXN5bmNQbGFjZWhvbGRlcihvbGRDaGlsZCkgJiZcbiAgICAgIC8vICM2Njg3IGNvbXBvbmVudCByb290IGlzIGEgY29tbWVudCBub2RlXG4gICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciB1cGRhdGUgPSB0aGlzLl91cGRhdGU7XG4gICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh0aGlzJDEpO1xuICAgICAgLy8gZm9yY2UgcmVtb3ZpbmcgcGFzc1xuICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgdGhpcyQxLl92bm9kZSxcbiAgICAgICAgdGhpcyQxLmtlcHQsXG4gICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICApO1xuICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICB1cGRhdGUuY2FsbCh0aGlzJDEsIHZub2RlLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgIHZhciBuYW1lID0gb3B0cyA/IChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnIHx8ICcnKSA6IGMudGFnO1xuICAgICAgICAgIHdhcm4oKFwiPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuIG11c3QgYmUga2V5ZWQ6IDxcIiArIG5hbWUgKyBcIj5cIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgYyQxID0gcHJldkNoaWxkcmVuW2kkMV07XG4gICAgICAgIGMkMS5kYXRhLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKG1hcFtjJDEua2V5XSkge1xuICAgICAgICAgIGtlcHQucHVzaChjJDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZWQucHVzaChjJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgIH1cblxuICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pXG4gIH0sXG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgdmFyIG1vdmVDbGFzcyA9IHRoaXMubW92ZUNsYXNzIHx8ICgodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnKTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgLy8gaW4gZWFjaCBpdGVyYXRpb24gLSB3aGljaCBoZWxwcyBwcmV2ZW50IGxheW91dCB0aHJhc2hpbmcuXG4gICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChhcHBseVRyYW5zbGF0aW9uKTtcblxuICAgIC8vIGZvcmNlIHJlZmxvdyB0byBwdXQgZXZlcnl0aGluZyBpbiBwb3NpdGlvblxuICAgIC8vIGFzc2lnbiB0byB0aGlzIHRvIGF2b2lkIGJlaW5nIHJlbW92ZWQgaW4gdHJlZS1zaGFraW5nXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdGhpcy5fcmVmbG93ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgIHZhciBlbCA9IGMuZWxtO1xuICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFlIHx8IC90cmFuc2Zvcm0kLy50ZXN0KGUucHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcih0cmFuc2l0aW9uRW5kRXZlbnQsIGNiKTtcbiAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc01vdmU6IGZ1bmN0aW9uIGhhc01vdmUgKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFoYXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5faGFzTW92ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgfVxuICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXG4gICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgIC8vIHRyYW5zaXRpb24gYXQgdGhpcyB2ZXJ5IG1vbWVudCwgd2UgbWFrZSBhIGNsb25lIG9mIGl0IGFuZCByZW1vdmVcbiAgICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xuICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgIHZhciBjbG9uZSA9IGVsLmNsb25lTm9kZSgpO1xuICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtcbiAgICAgIH1cbiAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pXG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjYWxsUGVuZGluZ0NicyAoYykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9tb3ZlQ2IpIHtcbiAgICBjLmVsbS5fbW92ZUNiKCk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgYy5kYXRhLm5ld1BvcyA9IGMuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gIHZhciBvbGRQb3MgPSBjLmRhdGEucG9zO1xuICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgdmFyIGR5ID0gb2xkUG9zLnRvcCAtIG5ld1Bvcy50b3A7XG4gIGlmIChkeCB8fCBkeSkge1xuICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgdmFyIHMgPSBjLmVsbS5zdHlsZTtcbiAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIgKyBkeCArIFwicHgsXCIgKyBkeSArIFwicHgpXCI7XG4gICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICB9XG59XG5cbnZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gIFRyYW5zaXRpb25Hcm91cDogVHJhbnNpdGlvbkdyb3VwXG59O1xuXG4vKiAgKi9cblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBzcGVjaWZpYyB1dGlsc1xuVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZS5jb25maWcuaXNSZXNlcnZlZEF0dHIgPSBpc1Jlc2VydmVkQXR0cjtcblZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuVnVlLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBydW50aW1lIGRpcmVjdGl2ZXMgJiBjb21wb25lbnRzXG5leHRlbmQoVnVlLm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbmV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBwbGF0Zm9ybUNvbXBvbmVudHMpO1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG1vdW50Q29tcG9uZW50KHRoaXMsIGVsLCBoeWRyYXRpbmcpXG59O1xuXG4vLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpbkJyb3dzZXIpIHtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgICAgJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWRldnRvb2xzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICApIHtcbiAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiXG4gICAgICApO1xuICAgIH1cbiAgfSwgMCk7XG59XG5cbi8qICAqL1xuXG5leHBvcnQgZGVmYXVsdCBWdWU7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\n");
/***/ }),
/***/ "./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js":
/*!********************************************************!*\
!*** ./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js ***!
\********************************************************/
/*! exports provided: default, Store, install, mapState, mapMutations, mapGetters, mapActions, createNamespacedHelpers */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Store\", function() { return Store; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"install\", function() { return install; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapState\", function() { return mapState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapMutations\", function() { return mapMutations; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapGetters\", function() { return mapGetters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapActions\", function() { return mapActions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createNamespacedHelpers\", function() { return createNamespacedHelpers; });\n/**\n * vuex v3.1.1\n * (c) 2019 Evan You\n * @license MIT\n */\nfunction applyMixin (Vue) {\n var version = Number(Vue.version.split('.')[0]);\n\n if (version >= 2) {\n Vue.mixin({ beforeCreate: vuexInit });\n } else {\n // override init and inject vuex init procedure\n // for 1.x backwards compatibility.\n var _init = Vue.prototype._init;\n Vue.prototype._init = function (options) {\n if ( options === void 0 ) options = {};\n\n options.init = options.init\n ? [vuexInit].concat(options.init)\n : vuexInit;\n _init.call(this, options);\n };\n }\n\n /**\n * Vuex init hook, injected into each instances init hooks list.\n */\n\n function vuexInit () {\n var options = this.$options;\n // store injection\n if (options.store) {\n this.$store = typeof options.store === 'function'\n ? options.store()\n : options.store;\n } else if (options.parent && options.parent.$store) {\n this.$store = options.parent.$store;\n }\n }\n}\n\nvar target = typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\nvar devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\nfunction devtoolPlugin (store) {\n if (!devtoolHook) { return }\n\n store._devtoolHook = devtoolHook;\n\n devtoolHook.emit('vuex:init', store);\n\n devtoolHook.on('vuex:travel-to-state', function (targetState) {\n store.replaceState(targetState);\n });\n\n store.subscribe(function (mutation, state) {\n devtoolHook.emit('vuex:mutation', mutation, state);\n });\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\n\n/**\n * forEach for object\n */\nfunction forEachValue (obj, fn) {\n Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n}\n\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\nfunction isPromise (val) {\n return val && typeof val.then === 'function'\n}\n\nfunction assert (condition, msg) {\n if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n}\n\nfunction partial (fn, arg) {\n return function () {\n return fn(arg)\n }\n}\n\n// Base data struct for store's module, package with some attribute and method\nvar Module = function Module (rawModule, runtime) {\n this.runtime = runtime;\n // Store some children item\n this._children = Object.create(null);\n // Store the origin module object which passed by programmer\n this._rawModule = rawModule;\n var rawState = rawModule.state;\n\n // Store the origin module's state\n this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n};\n\nvar prototypeAccessors = { namespaced: { configurable: true } };\n\nprototypeAccessors.namespaced.get = function () {\n return !!this._rawModule.namespaced\n};\n\nModule.prototype.addChild = function addChild (key, module) {\n this._children[key] = module;\n};\n\nModule.prototype.removeChild = function removeChild (key) {\n delete this._children[key];\n};\n\nModule.prototype.getChild = function getChild (key) {\n return this._children[key]\n};\n\nModule.prototype.update = function update (rawModule) {\n this._rawModule.namespaced = rawModule.namespaced;\n if (rawModule.actions) {\n this._rawModule.actions = rawModule.actions;\n }\n if (rawModule.mutations) {\n this._rawModule.mutations = rawModule.mutations;\n }\n if (rawModule.getters) {\n this._rawModule.getters = rawModule.getters;\n }\n};\n\nModule.prototype.forEachChild = function forEachChild (fn) {\n forEachValue(this._children, fn);\n};\n\nModule.prototype.forEachGetter = function forEachGetter (fn) {\n if (this._rawModule.getters) {\n forEachValue(this._rawModule.getters, fn);\n }\n};\n\nModule.prototype.forEachAction = function forEachAction (fn) {\n if (this._rawModule.actions) {\n forEachValue(this._rawModule.actions, fn);\n }\n};\n\nModule.prototype.forEachMutation = function forEachMutation (fn) {\n if (this._rawModule.mutations) {\n forEachValue(this._rawModule.mutations, fn);\n }\n};\n\nObject.defineProperties( Module.prototype, prototypeAccessors );\n\nvar ModuleCollection = function ModuleCollection (rawRootModule) {\n // register root module (Vuex.Store options)\n this.register([], rawRootModule, false);\n};\n\nModuleCollection.prototype.get = function get (path) {\n return path.reduce(function (module, key) {\n return module.getChild(key)\n }, this.root)\n};\n\nModuleCollection.prototype.getNamespace = function getNamespace (path) {\n var module = this.root;\n return path.reduce(function (namespace, key) {\n module = module.getChild(key);\n return namespace + (module.namespaced ? key + '/' : '')\n }, '')\n};\n\nModuleCollection.prototype.update = function update$1 (rawRootModule) {\n update([], this.root, rawRootModule);\n};\n\nModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n var this$1 = this;\n if ( runtime === void 0 ) runtime = true;\n\n if (true) {\n assertRawModule(path, rawModule);\n }\n\n var newModule = new Module(rawModule, runtime);\n if (path.length === 0) {\n this.root = newModule;\n } else {\n var parent = this.get(path.slice(0, -1));\n parent.addChild(path[path.length - 1], newModule);\n }\n\n // register nested modules\n if (rawModule.modules) {\n forEachValue(rawModule.modules, function (rawChildModule, key) {\n this$1.register(path.concat(key), rawChildModule, runtime);\n });\n }\n};\n\nModuleCollection.prototype.unregister = function unregister (path) {\n var parent = this.get(path.slice(0, -1));\n var key = path[path.length - 1];\n if (!parent.getChild(key).runtime) { return }\n\n parent.removeChild(key);\n};\n\nfunction update (path, targetModule, newModule) {\n if (true) {\n assertRawModule(path, newModule);\n }\n\n // update target module\n targetModule.update(newModule);\n\n // update nested modules\n if (newModule.modules) {\n for (var key in newModule.modules) {\n if (!targetModule.getChild(key)) {\n if (true) {\n console.warn(\n \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n 'manual reload is needed'\n );\n }\n return\n }\n update(\n path.concat(key),\n targetModule.getChild(key),\n newModule.modules[key]\n );\n }\n }\n}\n\nvar functionAssert = {\n assert: function (value) { return typeof value === 'function'; },\n expected: 'function'\n};\n\nvar objectAssert = {\n assert: function (value) { return typeof value === 'function' ||\n (typeof value === 'object' && typeof value.handler === 'function'); },\n expected: 'function or object with \"handler\" function'\n};\n\nvar assertTypes = {\n getters: functionAssert,\n mutations: functionAssert,\n actions: objectAssert\n};\n\nfunction assertRawModule (path, rawModule) {\n Object.keys(assertTypes).forEach(function (key) {\n if (!rawModule[key]) { return }\n\n var assertOptions = assertTypes[key];\n\n forEachValue(rawModule[key], function (value, type) {\n assert(\n assertOptions.assert(value),\n makeAssertionMessage(path, key, type, value, assertOptions.expected)\n );\n });\n });\n}\n\nfunction makeAssertionMessage (path, key, type, value, expected) {\n var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n if (path.length > 0) {\n buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n }\n buf += \" is \" + (JSON.stringify(value)) + \".\";\n return buf\n}\n\nvar Vue; // bind on install\n\nvar Store = function Store (options) {\n var this$1 = this;\n if ( options === void 0 ) options = {};\n\n // Auto install if it is not done yet and `window` has `Vue`.\n // To allow users to avoid auto-installation in some cases,\n // this code should be placed here. See #731\n if (!Vue && typeof window !== 'undefined' && window.Vue) {\n install(window.Vue);\n }\n\n if (true) {\n assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\n assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n assert(this instanceof Store, \"store must be called with the new operator.\");\n }\n\n var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n var strict = options.strict; if ( strict === void 0 ) strict = false;\n\n // store internal state\n this._committing = false;\n this._actions = Object.create(null);\n this._actionSubscribers = [];\n this._mutations = Object.create(null);\n this._wrappedGetters = Object.create(null);\n this._modules = new ModuleCollection(options);\n this._modulesNamespaceMap = Object.create(null);\n this._subscribers = [];\n this._watcherVM = new Vue();\n\n // bind commit and dispatch to self\n var store = this;\n var ref = this;\n var dispatch = ref.dispatch;\n var commit = ref.commit;\n this.dispatch = function boundDispatch (type, payload) {\n return dispatch.call(store, type, payload)\n };\n this.commit = function boundCommit (type, payload, options) {\n return commit.call(store, type, payload, options)\n };\n\n // strict mode\n this.strict = strict;\n\n var state = this._modules.root.state;\n\n // init root module.\n // this also recursively registers all sub-modules\n // and collects all module getters inside this._wrappedGetters\n installModule(this, state, [], this._modules.root);\n\n // initialize the store vm, which is responsible for the reactivity\n // (also registers _wrappedGetters as computed properties)\n resetStoreVM(this, state);\n\n // apply plugins\n plugins.forEach(function (plugin) { return plugin(this$1); });\n\n var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\n if (useDevtools) {\n devtoolPlugin(this);\n }\n};\n\nvar prototypeAccessors$1 = { state: { configurable: true } };\n\nprototypeAccessors$1.state.get = function () {\n return this._vm._data.$$state\n};\n\nprototypeAccessors$1.state.set = function (v) {\n if (true) {\n assert(false, \"use store.replaceState() to explicit replace store state.\");\n }\n};\n\nStore.prototype.commit = function commit (_type, _payload, _options) {\n var this$1 = this;\n\n // check object-style commit\n var ref = unifyObjectStyle(_type, _payload, _options);\n var type = ref.type;\n var payload = ref.payload;\n var options = ref.options;\n\n var mutation = { type: type, payload: payload };\n var entry = this._mutations[type];\n if (!entry) {\n if (true) {\n console.error((\"[vuex] unknown mutation type: \" + type));\n }\n return\n }\n this._withCommit(function () {\n entry.forEach(function commitIterator (handler) {\n handler(payload);\n });\n });\n this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\n\n if (\n true &&\n options && options.silent\n ) {\n console.warn(\n \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n 'Use the filter functionality in the vue-devtools'\n );\n }\n};\n\nStore.prototype.dispatch = function dispatch (_type, _payload) {\n var this$1 = this;\n\n // check object-style dispatch\n var ref = unifyObjectStyle(_type, _payload);\n var type = ref.type;\n var payload = ref.payload;\n\n var action = { type: type, payload: payload };\n var entry = this._actions[type];\n if (!entry) {\n if (true) {\n console.error((\"[vuex] unknown action type: \" + type));\n }\n return\n }\n\n try {\n this._actionSubscribers\n .filter(function (sub) { return sub.before; })\n .forEach(function (sub) { return sub.before(action, this$1.state); });\n } catch (e) {\n if (true) {\n console.warn(\"[vuex] error in before action subscribers: \");\n console.error(e);\n }\n }\n\n var result = entry.length > 1\n ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n : entry[0](payload);\n\n return result.then(function (res) {\n try {\n this$1._actionSubscribers\n .filter(function (sub) { return sub.after; })\n .forEach(function (sub) { return sub.after(action, this$1.state); });\n } catch (e) {\n if (true) {\n console.warn(\"[vuex] error in after action subscribers: \");\n console.error(e);\n }\n }\n return res\n })\n};\n\nStore.prototype.subscribe = function subscribe (fn) {\n return genericSubscribe(fn, this._subscribers)\n};\n\nStore.prototype.subscribeAction = function subscribeAction (fn) {\n var subs = typeof fn === 'function' ? { before: fn } : fn;\n return genericSubscribe(subs, this._actionSubscribers)\n};\n\nStore.prototype.watch = function watch (getter, cb, options) {\n var this$1 = this;\n\n if (true) {\n assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n }\n return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\n};\n\nStore.prototype.replaceState = function replaceState (state) {\n var this$1 = this;\n\n this._withCommit(function () {\n this$1._vm._data.$$state = state;\n });\n};\n\nStore.prototype.registerModule = function registerModule (path, rawModule, options) {\n if ( options === void 0 ) options = {};\n\n if (typeof path === 'string') { path = [path]; }\n\n if (true) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n assert(path.length > 0, 'cannot register the root module by using registerModule.');\n }\n\n this._modules.register(path, rawModule);\n installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n // reset store to update getters...\n resetStoreVM(this, this.state);\n};\n\nStore.prototype.unregisterModule = function unregisterModule (path) {\n var this$1 = this;\n\n if (typeof path === 'string') { path = [path]; }\n\n if (true) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n }\n\n this._modules.unregister(path);\n this._withCommit(function () {\n var parentState = getNestedState(this$1.state, path.slice(0, -1));\n Vue.delete(parentState, path[path.length - 1]);\n });\n resetStore(this);\n};\n\nStore.prototype.hotUpdate = function hotUpdate (newOptions) {\n this._modules.update(newOptions);\n resetStore(this, true);\n};\n\nStore.prototype._withCommit = function _withCommit (fn) {\n var committing = this._committing;\n this._committing = true;\n fn();\n this._committing = committing;\n};\n\nObject.defineProperties( Store.prototype, prototypeAccessors$1 );\n\nfunction genericSubscribe (fn, subs) {\n if (subs.indexOf(fn) < 0) {\n subs.push(fn);\n }\n return function () {\n var i = subs.indexOf(fn);\n if (i > -1) {\n subs.splice(i, 1);\n }\n }\n}\n\nfunction resetStore (store, hot) {\n store._actions = Object.create(null);\n store._mutations = Object.create(null);\n store._wrappedGetters = Object.create(null);\n store._modulesNamespaceMap = Object.create(null);\n var state = store.state;\n // init all modules\n installModule(store, state, [], store._modules.root, true);\n // reset vm\n resetStoreVM(store, state, hot);\n}\n\nfunction resetStoreVM (store, state, hot) {\n var oldVm = store._vm;\n\n // bind store public getters\n store.getters = {};\n var wrappedGetters = store._wrappedGetters;\n var computed = {};\n forEachValue(wrappedGetters, function (fn, key) {\n // use computed to leverage its lazy-caching mechanism\n // direct inline function use will lead to closure preserving oldVm.\n // using partial to return function with only arguments preserved in closure enviroment.\n computed[key] = partial(fn, store);\n Object.defineProperty(store.getters, key, {\n get: function () { return store._vm[key]; },\n enumerable: true // for local getters\n });\n });\n\n // use a Vue instance to store the state tree\n // suppress warnings just in case the user has added\n // some funky global mixins\n var silent = Vue.config.silent;\n Vue.config.silent = true;\n store._vm = new Vue({\n data: {\n $$state: state\n },\n computed: computed\n });\n Vue.config.silent = silent;\n\n // enable strict mode for new vm\n if (store.strict) {\n enableStrictMode(store);\n }\n\n if (oldVm) {\n if (hot) {\n // dispatch changes in all subscribed watchers\n // to force getter re-evaluation for hot reloading.\n store._withCommit(function () {\n oldVm._data.$$state = null;\n });\n }\n Vue.nextTick(function () { return oldVm.$destroy(); });\n }\n}\n\nfunction installModule (store, rootState, path, module, hot) {\n var isRoot = !path.length;\n var namespace = store._modules.getNamespace(path);\n\n // register in namespace map\n if (module.namespaced) {\n store._modulesNamespaceMap[namespace] = module;\n }\n\n // set state\n if (!isRoot && !hot) {\n var parentState = getNestedState(rootState, path.slice(0, -1));\n var moduleName = path[path.length - 1];\n store._withCommit(function () {\n Vue.set(parentState, moduleName, module.state);\n });\n }\n\n var local = module.context = makeLocalContext(store, namespace, path);\n\n module.forEachMutation(function (mutation, key) {\n var namespacedType = namespace + key;\n registerMutation(store, namespacedType, mutation, local);\n });\n\n module.forEachAction(function (action, key) {\n var type = action.root ? key : namespace + key;\n var handler = action.handler || action;\n registerAction(store, type, handler, local);\n });\n\n module.forEachGetter(function (getter, key) {\n var namespacedType = namespace + key;\n registerGetter(store, namespacedType, getter, local);\n });\n\n module.forEachChild(function (child, key) {\n installModule(store, rootState, path.concat(key), child, hot);\n });\n}\n\n/**\n * make localized dispatch, commit, getters and state\n * if there is no namespace, just use root ones\n */\nfunction makeLocalContext (store, namespace, path) {\n var noNamespace = namespace === '';\n\n var local = {\n dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ( true && !store._actions[type]) {\n console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n return store.dispatch(type, payload)\n },\n\n commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ( true && !store._mutations[type]) {\n console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n store.commit(type, payload, options);\n }\n };\n\n // getters and state object must be gotten lazily\n // because they will be changed by vm update\n Object.defineProperties(local, {\n getters: {\n get: noNamespace\n ? function () { return store.getters; }\n : function () { return makeLocalGetters(store, namespace); }\n },\n state: {\n get: function () { return getNestedState(store.state, path); }\n }\n });\n\n return local\n}\n\nfunction makeLocalGetters (store, namespace) {\n var gettersProxy = {};\n\n var splitPos = namespace.length;\n Object.keys(store.getters).forEach(function (type) {\n // skip if the target getter is not match this namespace\n if (type.slice(0, splitPos) !== namespace) { return }\n\n // extract local getter type\n var localType = type.slice(splitPos);\n\n // Add a port to the getters proxy.\n // Define as getter property because\n // we do not want to evaluate the getters in this time.\n Object.defineProperty(gettersProxy, localType, {\n get: function () { return store.getters[type]; },\n enumerable: true\n });\n });\n\n return gettersProxy\n}\n\nfunction registerMutation (store, type, handler, local) {\n var entry = store._mutations[type] || (store._mutations[type] = []);\n entry.push(function wrappedMutationHandler (payload) {\n handler.call(store, local.state, payload);\n });\n}\n\nfunction registerAction (store, type, handler, local) {\n var entry = store._actions[type] || (store._actions[type] = []);\n entry.push(function wrappedActionHandler (payload, cb) {\n var res = handler.call(store, {\n dispatch: local.dispatch,\n commit: local.commit,\n getters: local.getters,\n state: local.state,\n rootGetters: store.getters,\n rootState: store.state\n }, payload, cb);\n if (!isPromise(res)) {\n res = Promise.resolve(res);\n }\n if (store._devtoolHook) {\n return res.catch(function (err) {\n store._devtoolHook.emit('vuex:error', err);\n throw err\n })\n } else {\n return res\n }\n });\n}\n\nfunction registerGetter (store, type, rawGetter, local) {\n if (store._wrappedGetters[type]) {\n if (true) {\n console.error((\"[vuex] duplicate getter key: \" + type));\n }\n return\n }\n store._wrappedGetters[type] = function wrappedGetter (store) {\n return rawGetter(\n local.state, // local state\n local.getters, // local getters\n store.state, // root state\n store.getters // root getters\n )\n };\n}\n\nfunction enableStrictMode (store) {\n store._vm.$watch(function () { return this._data.$$state }, function () {\n if (true) {\n assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n }\n }, { deep: true, sync: true });\n}\n\nfunction getNestedState (state, path) {\n return path.length\n ? path.reduce(function (state, key) { return state[key]; }, state)\n : state\n}\n\nfunction unifyObjectStyle (type, payload, options) {\n if (isObject(type) && type.type) {\n options = payload;\n payload = type;\n type = type.type;\n }\n\n if (true) {\n assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n }\n\n return { type: type, payload: payload, options: options }\n}\n\nfunction install (_Vue) {\n if (Vue && _Vue === Vue) {\n if (true) {\n console.error(\n '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n );\n }\n return\n }\n Vue = _Vue;\n applyMixin(Vue);\n}\n\n/**\n * Reduce the code which written in Vue.js for getting the state.\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n * @param {Object}\n */\nvar mapState = normalizeNamespace(function (namespace, states) {\n var res = {};\n normalizeMap(states).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedState () {\n var state = this.$store.state;\n var getters = this.$store.getters;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n if (!module) {\n return\n }\n state = module.context.state;\n getters = module.context.getters;\n }\n return typeof val === 'function'\n ? val.call(this, state, getters)\n : state[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for committing the mutation\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapMutations = normalizeNamespace(function (namespace, mutations) {\n var res = {};\n normalizeMap(mutations).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedMutation () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // Get the commit method from store\n var commit = this.$store.commit;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n if (!module) {\n return\n }\n commit = module.context.commit;\n }\n return typeof val === 'function'\n ? val.apply(this, [commit].concat(args))\n : commit.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for getting the getters\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} getters\n * @return {Object}\n */\nvar mapGetters = normalizeNamespace(function (namespace, getters) {\n var res = {};\n normalizeMap(getters).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n // The namespace has been mutated by normalizeNamespace\n val = namespace + val;\n res[key] = function mappedGetter () {\n if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n return\n }\n if ( true && !(val in this.$store.getters)) {\n console.error((\"[vuex] unknown getter: \" + val));\n return\n }\n return this.$store.getters[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for dispatch the action\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapActions = normalizeNamespace(function (namespace, actions) {\n var res = {};\n normalizeMap(actions).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedAction () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // get dispatch function from store\n var dispatch = this.$store.dispatch;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n if (!module) {\n return\n }\n dispatch = module.context.dispatch;\n }\n return typeof val === 'function'\n ? val.apply(this, [dispatch].concat(args))\n : dispatch.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\n/**\n * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n * @param {String} namespace\n * @return {Object}\n */\nvar createNamespacedHelpers = function (namespace) { return ({\n mapState: mapState.bind(null, namespace),\n mapGetters: mapGetters.bind(null, namespace),\n mapMutations: mapMutations.bind(null, namespace),\n mapActions: mapActions.bind(null, namespace)\n}); };\n\n/**\n * Normalize the map\n * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n * @param {Array|Object} map\n * @return {Object}\n */\nfunction normalizeMap (map) {\n return Array.isArray(map)\n ? map.map(function (key) { return ({ key: key, val: key }); })\n : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n}\n\n/**\n * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n * @param {Function} fn\n * @return {Function}\n */\nfunction normalizeNamespace (fn) {\n return function (namespace, map) {\n if (typeof namespace !== 'string') {\n map = namespace;\n namespace = '';\n } else if (namespace.charAt(namespace.length - 1) !== '/') {\n namespace += '/';\n }\n return fn(namespace, map)\n }\n}\n\n/**\n * Search a special module from store by namespace. if module not exist, print error message.\n * @param {Object} store\n * @param {String} helper\n * @param {String} namespace\n * @return {Object}\n */\nfunction getModuleByNamespace (store, helper, namespace) {\n var module = store._modulesNamespaceMap[namespace];\n if ( true && !module) {\n console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n }\n return module\n}\n\nvar index_esm = {\n Store: Store,\n install: install,\n version: '3.1.1',\n mapState: mapState,\n mapMutations: mapMutations,\n mapGetters: mapGetters,\n mapActions: mapActions,\n createNamespacedHelpers: createNamespacedHelpers\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (index_esm);\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../_webpack@4.41.2@webpack/buildin/global.js */ \"./node_modules/_webpack@4.41.2@webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3Z1ZXhAMy4xLjFAdnVleC9kaXN0L3Z1ZXguZXNtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL192dWV4QDMuMS4xQHZ1ZXgvZGlzdC92dWV4LmVzbS5qcz81OTFhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdnVleCB2My4xLjFcbiAqIChjKSAyMDE5IEV2YW4gWW91XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuZnVuY3Rpb24gYXBwbHlNaXhpbiAoVnVlKSB7XG4gIHZhciB2ZXJzaW9uID0gTnVtYmVyKFZ1ZS52ZXJzaW9uLnNwbGl0KCcuJylbMF0pO1xuXG4gIGlmICh2ZXJzaW9uID49IDIpIHtcbiAgICBWdWUubWl4aW4oeyBiZWZvcmVDcmVhdGU6IHZ1ZXhJbml0IH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG92ZXJyaWRlIGluaXQgYW5kIGluamVjdCB2dWV4IGluaXQgcHJvY2VkdXJlXG4gICAgLy8gZm9yIDEueCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICB2YXIgX2luaXQgPSBWdWUucHJvdG90eXBlLl9pbml0O1xuICAgIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgICAgIG9wdGlvbnMuaW5pdCA9IG9wdGlvbnMuaW5pdFxuICAgICAgICA/IFt2dWV4SW5pdF0uY29uY2F0KG9wdGlvbnMuaW5pdClcbiAgICAgICAgOiB2dWV4SW5pdDtcbiAgICAgIF9pbml0LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWdWV4IGluaXQgaG9vaywgaW5qZWN0ZWQgaW50byBlYWNoIGluc3RhbmNlcyBpbml0IGhvb2tzIGxpc3QuXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHZ1ZXhJbml0ICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gICAgLy8gc3RvcmUgaW5qZWN0aW9uXG4gICAgaWYgKG9wdGlvbnMuc3RvcmUpIHtcbiAgICAgIHRoaXMuJHN0b3JlID0gdHlwZW9mIG9wdGlvbnMuc3RvcmUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBvcHRpb25zLnN0b3JlKClcbiAgICAgICAgOiBvcHRpb25zLnN0b3JlO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wYXJlbnQgJiYgb3B0aW9ucy5wYXJlbnQuJHN0b3JlKSB7XG4gICAgICB0aGlzLiRzdG9yZSA9IG9wdGlvbnMucGFyZW50LiRzdG9yZTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHRhcmdldCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gID8gd2luZG93XG4gIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IGdsb2JhbFxuICAgIDoge307XG52YXIgZGV2dG9vbEhvb2sgPSB0YXJnZXQuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuZnVuY3Rpb24gZGV2dG9vbFBsdWdpbiAoc3RvcmUpIHtcbiAgaWYgKCFkZXZ0b29sSG9vaykgeyByZXR1cm4gfVxuXG4gIHN0b3JlLl9kZXZ0b29sSG9vayA9IGRldnRvb2xIb29rO1xuXG4gIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6aW5pdCcsIHN0b3JlKTtcblxuICBkZXZ0b29sSG9vay5vbigndnVleDp0cmF2ZWwtdG8tc3RhdGUnLCBmdW5jdGlvbiAodGFyZ2V0U3RhdGUpIHtcbiAgICBzdG9yZS5yZXBsYWNlU3RhdGUodGFyZ2V0U3RhdGUpO1xuICB9KTtcblxuICBzdG9yZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG11dGF0aW9uLCBzdGF0ZSkge1xuICAgIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6bXV0YXRpb24nLCBtdXRhdGlvbiwgc3RhdGUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IGl0ZW0gdGhhdCBwYXNzIHRoZSB0ZXN0XG4gKiBieSBzZWNvbmQgYXJndW1lbnQgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHsqfVxuICovXG5cbi8qKlxuICogZm9yRWFjaCBmb3Igb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hWYWx1ZSAob2JqLCBmbikge1xuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZm4ob2JqW2tleV0sIGtleSk7IH0pO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gYXNzZXJ0IChjb25kaXRpb24sIG1zZykge1xuICBpZiAoIWNvbmRpdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoKFwiW3Z1ZXhdIFwiICsgbXNnKSkgfVxufVxuXG5mdW5jdGlvbiBwYXJ0aWFsIChmbiwgYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZuKGFyZylcbiAgfVxufVxuXG4vLyBCYXNlIGRhdGEgc3RydWN0IGZvciBzdG9yZSdzIG1vZHVsZSwgcGFja2FnZSB3aXRoIHNvbWUgYXR0cmlidXRlIGFuZCBtZXRob2RcbnZhciBNb2R1bGUgPSBmdW5jdGlvbiBNb2R1bGUgKHJhd01vZHVsZSwgcnVudGltZSkge1xuICB0aGlzLnJ1bnRpbWUgPSBydW50aW1lO1xuICAvLyBTdG9yZSBzb21lIGNoaWxkcmVuIGl0ZW1cbiAgdGhpcy5fY2hpbGRyZW4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBTdG9yZSB0aGUgb3JpZ2luIG1vZHVsZSBvYmplY3Qgd2hpY2ggcGFzc2VkIGJ5IHByb2dyYW1tZXJcbiAgdGhpcy5fcmF3TW9kdWxlID0gcmF3TW9kdWxlO1xuICB2YXIgcmF3U3RhdGUgPSByYXdNb2R1bGUuc3RhdGU7XG5cbiAgLy8gU3RvcmUgdGhlIG9yaWdpbiBtb2R1bGUncyBzdGF0ZVxuICB0aGlzLnN0YXRlID0gKHR5cGVvZiByYXdTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHJhd1N0YXRlKCkgOiByYXdTdGF0ZSkgfHwge307XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBuYW1lc3BhY2VkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5uYW1lc3BhY2VkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEhdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWRcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiBhZGRDaGlsZCAoa2V5LCBtb2R1bGUpIHtcbiAgdGhpcy5fY2hpbGRyZW5ba2V5XSA9IG1vZHVsZTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiByZW1vdmVDaGlsZCAoa2V5KSB7XG4gIGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltrZXldO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uIGdldENoaWxkIChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2tleV1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChyYXdNb2R1bGUpIHtcbiAgdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWQgPSByYXdNb2R1bGUubmFtZXNwYWNlZDtcbiAgaWYgKHJhd01vZHVsZS5hY3Rpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMgPSByYXdNb2R1bGUuYWN0aW9ucztcbiAgfVxuICBpZiAocmF3TW9kdWxlLm11dGF0aW9ucykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMgPSByYXdNb2R1bGUubXV0YXRpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzID0gcmF3TW9kdWxlLmdldHRlcnM7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaENoaWxkID0gZnVuY3Rpb24gZm9yRWFjaENoaWxkIChmbikge1xuICBmb3JFYWNoVmFsdWUodGhpcy5fY2hpbGRyZW4sIGZuKTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEdldHRlciA9IGZ1bmN0aW9uIGZvckVhY2hHZXR0ZXIgKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hBY3Rpb24gPSBmdW5jdGlvbiBmb3JFYWNoQWN0aW9uIChmbikge1xuICBpZiAodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoTXV0YXRpb24gPSBmdW5jdGlvbiBmb3JFYWNoTXV0YXRpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIE1vZHVsZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgTW9kdWxlQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIE1vZHVsZUNvbGxlY3Rpb24gKHJhd1Jvb3RNb2R1bGUpIHtcbiAgLy8gcmVnaXN0ZXIgcm9vdCBtb2R1bGUgKFZ1ZXguU3RvcmUgb3B0aW9ucylcbiAgdGhpcy5yZWdpc3RlcihbXSwgcmF3Um9vdE1vZHVsZSwgZmFsc2UpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobW9kdWxlLCBrZXkpIHtcbiAgICByZXR1cm4gbW9kdWxlLmdldENoaWxkKGtleSlcbiAgfSwgdGhpcy5yb290KVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlID0gZnVuY3Rpb24gZ2V0TmFtZXNwYWNlIChwYXRoKSB7XG4gIHZhciBtb2R1bGUgPSB0aGlzLnJvb3Q7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBrZXkpIHtcbiAgICBtb2R1bGUgPSBtb2R1bGUuZ2V0Q2hpbGQoa2V5KTtcbiAgICByZXR1cm4gbmFtZXNwYWNlICsgKG1vZHVsZS5uYW1lc3BhY2VkID8ga2V5ICsgJy8nIDogJycpXG4gIH0sICcnKVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlJDEgKHJhd1Jvb3RNb2R1bGUpIHtcbiAgdXBkYXRlKFtdLCB0aGlzLnJvb3QsIHJhd1Jvb3RNb2R1bGUpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlciAocGF0aCwgcmF3TW9kdWxlLCBydW50aW1lKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgaWYgKCBydW50aW1lID09PSB2b2lkIDAgKSBydW50aW1lID0gdHJ1ZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydFJhd01vZHVsZShwYXRoLCByYXdNb2R1bGUpO1xuICB9XG5cbiAgdmFyIG5ld01vZHVsZSA9IG5ldyBNb2R1bGUocmF3TW9kdWxlLCBydW50aW1lKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5yb290ID0gbmV3TW9kdWxlO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLmdldChwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgcGFyZW50LmFkZENoaWxkKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgbmV3TW9kdWxlKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIG5lc3RlZCBtb2R1bGVzXG4gIGlmIChyYXdNb2R1bGUubW9kdWxlcykge1xuICAgIGZvckVhY2hWYWx1ZShyYXdNb2R1bGUubW9kdWxlcywgZnVuY3Rpb24gKHJhd0NoaWxkTW9kdWxlLCBrZXkpIHtcbiAgICAgIHRoaXMkMS5yZWdpc3RlcihwYXRoLmNvbmNhdChrZXkpLCByYXdDaGlsZE1vZHVsZSwgcnVudGltZSk7XG4gICAgfSk7XG4gIH1cbn07XG5cbk1vZHVsZUNvbGxlY3Rpb24ucHJvdG90eXBlLnVucmVnaXN0ZXIgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyIChwYXRoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLmdldChwYXRoLnNsaWNlKDAsIC0xKSk7XG4gIHZhciBrZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIGlmICghcGFyZW50LmdldENoaWxkKGtleSkucnVudGltZSkgeyByZXR1cm4gfVxuXG4gIHBhcmVudC5yZW1vdmVDaGlsZChrZXkpO1xufTtcblxuZnVuY3Rpb24gdXBkYXRlIChwYXRoLCB0YXJnZXRNb2R1bGUsIG5ld01vZHVsZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydFJhd01vZHVsZShwYXRoLCBuZXdNb2R1bGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHRhcmdldCBtb2R1bGVcbiAgdGFyZ2V0TW9kdWxlLnVwZGF0ZShuZXdNb2R1bGUpO1xuXG4gIC8vIHVwZGF0ZSBuZXN0ZWQgbW9kdWxlc1xuICBpZiAobmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICAgIGlmICghdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlt2dWV4XSB0cnlpbmcgdG8gYWRkIGEgbmV3IG1vZHVsZSAnXCIgKyBrZXkgKyBcIicgb24gaG90IHJlbG9hZGluZywgXCIgK1xuICAgICAgICAgICAgJ21hbnVhbCByZWxvYWQgaXMgbmVlZGVkJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGUoXG4gICAgICAgIHBhdGguY29uY2F0KGtleSksXG4gICAgICAgIHRhcmdldE1vZHVsZS5nZXRDaGlsZChrZXkpLFxuICAgICAgICBuZXdNb2R1bGUubW9kdWxlc1trZXldXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZnVuY3Rpb25Bc3NlcnQgPSB7XG4gIGFzc2VydDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7IH0sXG4gIGV4cGVjdGVkOiAnZnVuY3Rpb24nXG59O1xuXG52YXIgb2JqZWN0QXNzZXJ0ID0ge1xuICBhc3NlcnQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLmhhbmRsZXIgPT09ICdmdW5jdGlvbicpOyB9LFxuICBleHBlY3RlZDogJ2Z1bmN0aW9uIG9yIG9iamVjdCB3aXRoIFwiaGFuZGxlclwiIGZ1bmN0aW9uJ1xufTtcblxudmFyIGFzc2VydFR5cGVzID0ge1xuICBnZXR0ZXJzOiBmdW5jdGlvbkFzc2VydCxcbiAgbXV0YXRpb25zOiBmdW5jdGlvbkFzc2VydCxcbiAgYWN0aW9uczogb2JqZWN0QXNzZXJ0XG59O1xuXG5mdW5jdGlvbiBhc3NlcnRSYXdNb2R1bGUgKHBhdGgsIHJhd01vZHVsZSkge1xuICBPYmplY3Qua2V5cyhhc3NlcnRUeXBlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFyYXdNb2R1bGVba2V5XSkgeyByZXR1cm4gfVxuXG4gICAgdmFyIGFzc2VydE9wdGlvbnMgPSBhc3NlcnRUeXBlc1trZXldO1xuXG4gICAgZm9yRWFjaFZhbHVlKHJhd01vZHVsZVtrZXldLCBmdW5jdGlvbiAodmFsdWUsIHR5cGUpIHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgYXNzZXJ0T3B0aW9ucy5hc3NlcnQodmFsdWUpLFxuICAgICAgICBtYWtlQXNzZXJ0aW9uTWVzc2FnZShwYXRoLCBrZXksIHR5cGUsIHZhbHVlLCBhc3NlcnRPcHRpb25zLmV4cGVjdGVkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VBc3NlcnRpb25NZXNzYWdlIChwYXRoLCBrZXksIHR5cGUsIHZhbHVlLCBleHBlY3RlZCkge1xuICB2YXIgYnVmID0ga2V5ICsgXCIgc2hvdWxkIGJlIFwiICsgZXhwZWN0ZWQgKyBcIiBidXQgXFxcIlwiICsga2V5ICsgXCIuXCIgKyB0eXBlICsgXCJcXFwiXCI7XG4gIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICBidWYgKz0gXCIgaW4gbW9kdWxlIFxcXCJcIiArIChwYXRoLmpvaW4oJy4nKSkgKyBcIlxcXCJcIjtcbiAgfVxuICBidWYgKz0gXCIgaXMgXCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsdWUpKSArIFwiLlwiO1xuICByZXR1cm4gYnVmXG59XG5cbnZhciBWdWU7IC8vIGJpbmQgb24gaW5zdGFsbFxuXG52YXIgU3RvcmUgPSBmdW5jdGlvbiBTdG9yZSAob3B0aW9ucykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcbiAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgLy8gQXV0byBpbnN0YWxsIGlmIGl0IGlzIG5vdCBkb25lIHlldCBhbmQgYHdpbmRvd2AgaGFzIGBWdWVgLlxuICAvLyBUbyBhbGxvdyB1c2VycyB0byBhdm9pZCBhdXRvLWluc3RhbGxhdGlvbiBpbiBzb21lIGNhc2VzLFxuICAvLyB0aGlzIGNvZGUgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLiBTZWUgIzczMVxuICBpZiAoIVZ1ZSAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gICAgaW5zdGFsbCh3aW5kb3cuVnVlKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KFZ1ZSwgXCJtdXN0IGNhbGwgVnVlLnVzZShWdWV4KSBiZWZvcmUgY3JlYXRpbmcgYSBzdG9yZSBpbnN0YW5jZS5cIik7XG4gICAgYXNzZXJ0KHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJywgXCJ2dWV4IHJlcXVpcmVzIGEgUHJvbWlzZSBwb2x5ZmlsbCBpbiB0aGlzIGJyb3dzZXIuXCIpO1xuICAgIGFzc2VydCh0aGlzIGluc3RhbmNlb2YgU3RvcmUsIFwic3RvcmUgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yLlwiKTtcbiAgfVxuXG4gIHZhciBwbHVnaW5zID0gb3B0aW9ucy5wbHVnaW5zOyBpZiAoIHBsdWdpbnMgPT09IHZvaWQgMCApIHBsdWdpbnMgPSBbXTtcbiAgdmFyIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0OyBpZiAoIHN0cmljdCA9PT0gdm9pZCAwICkgc3RyaWN0ID0gZmFsc2U7XG5cbiAgLy8gc3RvcmUgaW50ZXJuYWwgc3RhdGVcbiAgdGhpcy5fY29tbWl0dGluZyA9IGZhbHNlO1xuICB0aGlzLl9hY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnMgPSBbXTtcbiAgdGhpcy5fbXV0YXRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fd3JhcHBlZEdldHRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9tb2R1bGVzID0gbmV3IE1vZHVsZUNvbGxlY3Rpb24ob3B0aW9ucyk7XG4gIHRoaXMuX21vZHVsZXNOYW1lc3BhY2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9zdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl93YXRjaGVyVk0gPSBuZXcgVnVlKCk7XG5cbiAgLy8gYmluZCBjb21taXQgYW5kIGRpc3BhdGNoIHRvIHNlbGZcbiAgdmFyIHN0b3JlID0gdGhpcztcbiAgdmFyIHJlZiA9IHRoaXM7XG4gIHZhciBkaXNwYXRjaCA9IHJlZi5kaXNwYXRjaDtcbiAgdmFyIGNvbW1pdCA9IHJlZi5jb21taXQ7XG4gIHRoaXMuZGlzcGF0Y2ggPSBmdW5jdGlvbiBib3VuZERpc3BhdGNoICh0eXBlLCBwYXlsb2FkKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoLmNhbGwoc3RvcmUsIHR5cGUsIHBheWxvYWQpXG4gIH07XG4gIHRoaXMuY29tbWl0ID0gZnVuY3Rpb24gYm91bmRDb21taXQgKHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY29tbWl0LmNhbGwoc3RvcmUsIHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpXG4gIH07XG5cbiAgLy8gc3RyaWN0IG1vZGVcbiAgdGhpcy5zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fbW9kdWxlcy5yb290LnN0YXRlO1xuXG4gIC8vIGluaXQgcm9vdCBtb2R1bGUuXG4gIC8vIHRoaXMgYWxzbyByZWN1cnNpdmVseSByZWdpc3RlcnMgYWxsIHN1Yi1tb2R1bGVzXG4gIC8vIGFuZCBjb2xsZWN0cyBhbGwgbW9kdWxlIGdldHRlcnMgaW5zaWRlIHRoaXMuX3dyYXBwZWRHZXR0ZXJzXG4gIGluc3RhbGxNb2R1bGUodGhpcywgc3RhdGUsIFtdLCB0aGlzLl9tb2R1bGVzLnJvb3QpO1xuXG4gIC8vIGluaXRpYWxpemUgdGhlIHN0b3JlIHZtLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHJlYWN0aXZpdHlcbiAgLy8gKGFsc28gcmVnaXN0ZXJzIF93cmFwcGVkR2V0dGVycyBhcyBjb21wdXRlZCBwcm9wZXJ0aWVzKVxuICByZXNldFN0b3JlVk0odGhpcywgc3RhdGUpO1xuXG4gIC8vIGFwcGx5IHBsdWdpbnNcbiAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHsgcmV0dXJuIHBsdWdpbih0aGlzJDEpOyB9KTtcblxuICB2YXIgdXNlRGV2dG9vbHMgPSBvcHRpb25zLmRldnRvb2xzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRldnRvb2xzIDogVnVlLmNvbmZpZy5kZXZ0b29scztcbiAgaWYgKHVzZURldnRvb2xzKSB7XG4gICAgZGV2dG9vbFBsdWdpbih0aGlzKTtcbiAgfVxufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyQxID0geyBzdGF0ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMkMS5zdGF0ZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl92bS5fZGF0YS4kJHN0YXRlXG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMkMS5zdGF0ZS5zZXQgPSBmdW5jdGlvbiAodikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChmYWxzZSwgXCJ1c2Ugc3RvcmUucmVwbGFjZVN0YXRlKCkgdG8gZXhwbGljaXQgcmVwbGFjZSBzdG9yZSBzdGF0ZS5cIik7XG4gIH1cbn07XG5cblN0b3JlLnByb3RvdHlwZS5jb21taXQgPSBmdW5jdGlvbiBjb21taXQgKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgY29tbWl0XG4gIHZhciByZWYgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gICAgdmFyIHBheWxvYWQgPSByZWYucGF5bG9hZDtcbiAgICB2YXIgb3B0aW9ucyA9IHJlZi5vcHRpb25zO1xuXG4gIHZhciBtdXRhdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9tdXRhdGlvbnNbdHlwZV07XG4gIGlmICghZW50cnkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBtdXRhdGlvbiB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgZW50cnkuZm9yRWFjaChmdW5jdGlvbiBjb21taXRJdGVyYXRvciAoaGFuZGxlcikge1xuICAgICAgaGFuZGxlcihwYXlsb2FkKTtcbiAgICB9KTtcbiAgfSk7XG4gIHRoaXMuX3N1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViKG11dGF0aW9uLCB0aGlzJDEuc3RhdGUpOyB9KTtcblxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5zaWxlbnRcbiAgKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbdnVleF0gbXV0YXRpb24gdHlwZTogXCIgKyB0eXBlICsgXCIuIFNpbGVudCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gXCIgK1xuICAgICAgJ1VzZSB0aGUgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIHZ1ZS1kZXZ0b29scydcbiAgICApO1xuICB9XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCAoX3R5cGUsIF9wYXlsb2FkKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgLy8gY2hlY2sgb2JqZWN0LXN0eWxlIGRpc3BhdGNoXG4gIHZhciByZWYgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgcGF5bG9hZCA9IHJlZi5wYXlsb2FkO1xuXG4gIHZhciBhY3Rpb24gPSB7IHR5cGU6IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQgfTtcbiAgdmFyIGVudHJ5ID0gdGhpcy5fYWN0aW9uc1t0eXBlXTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGFjdGlvbiB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5iZWZvcmU7IH0pXG4gICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYmVmb3JlKGFjdGlvbiwgdGhpcyQxLnN0YXRlKTsgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKFwiW3Z1ZXhdIGVycm9yIGluIGJlZm9yZSBhY3Rpb24gc3Vic2NyaWJlcnM6IFwiKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGVudHJ5Lmxlbmd0aCA+IDFcbiAgICA/IFByb21pc2UuYWxsKGVudHJ5Lm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gaGFuZGxlcihwYXlsb2FkKTsgfSkpXG4gICAgOiBlbnRyeVswXShwYXlsb2FkKTtcblxuICByZXR1cm4gcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzJDEuX2FjdGlvblN1YnNjcmliZXJzXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmFmdGVyOyB9KVxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYWZ0ZXIoYWN0aW9uLCB0aGlzJDEuc3RhdGUpOyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gYWZ0ZXIgYWN0aW9uIHN1YnNjcmliZXJzOiBcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSlcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUgKGZuKSB7XG4gIHJldHVybiBnZW5lcmljU3Vic2NyaWJlKGZuLCB0aGlzLl9zdWJzY3JpYmVycylcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmVBY3Rpb24gPSBmdW5jdGlvbiBzdWJzY3JpYmVBY3Rpb24gKGZuKSB7XG4gIHZhciBzdWJzID0gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8geyBiZWZvcmU6IGZuIH0gOiBmbjtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoc3VicywgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnMpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUud2F0Y2ggPSBmdW5jdGlvbiB3YXRjaCAoZ2V0dGVyLCBjYiwgb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBnZXR0ZXIgPT09ICdmdW5jdGlvbicsIFwic3RvcmUud2F0Y2ggb25seSBhY2NlcHRzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzLl93YXRjaGVyVk0uJHdhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldHRlcih0aGlzJDEuc3RhdGUsIHRoaXMkMS5nZXR0ZXJzKTsgfSwgY2IsIG9wdGlvbnMpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gcmVwbGFjZVN0YXRlIChzdGF0ZSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHRoaXMuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgIHRoaXMkMS5fdm0uX2RhdGEuJCRzdGF0ZSA9IHN0YXRlO1xuICB9KTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZWdpc3Rlck1vZHVsZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlIChwYXRoLCByYXdNb2R1bGUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7IHBhdGggPSBbcGF0aF07IH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICAgIGFzc2VydChwYXRoLmxlbmd0aCA+IDAsICdjYW5ub3QgcmVnaXN0ZXIgdGhlIHJvb3QgbW9kdWxlIGJ5IHVzaW5nIHJlZ2lzdGVyTW9kdWxlLicpO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlcy5yZWdpc3RlcihwYXRoLCByYXdNb2R1bGUpO1xuICBpbnN0YWxsTW9kdWxlKHRoaXMsIHRoaXMuc3RhdGUsIHBhdGgsIHRoaXMuX21vZHVsZXMuZ2V0KHBhdGgpLCBvcHRpb25zLnByZXNlcnZlU3RhdGUpO1xuICAvLyByZXNldCBzdG9yZSB0byB1cGRhdGUgZ2V0dGVycy4uLlxuICByZXNldFN0b3JlVk0odGhpcywgdGhpcy5zdGF0ZSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUudW5yZWdpc3Rlck1vZHVsZSA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJNb2R1bGUgKHBhdGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7IHBhdGggPSBbcGF0aF07IH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlcy51bnJlZ2lzdGVyKHBhdGgpO1xuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50U3RhdGUgPSBnZXROZXN0ZWRTdGF0ZSh0aGlzJDEuc3RhdGUsIHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICBWdWUuZGVsZXRlKHBhcmVudFN0YXRlLCBwYXRoW3BhdGgubGVuZ3RoIC0gMV0pO1xuICB9KTtcbiAgcmVzZXRTdG9yZSh0aGlzKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5ob3RVcGRhdGUgPSBmdW5jdGlvbiBob3RVcGRhdGUgKG5ld09wdGlvbnMpIHtcbiAgdGhpcy5fbW9kdWxlcy51cGRhdGUobmV3T3B0aW9ucyk7XG4gIHJlc2V0U3RvcmUodGhpcywgdHJ1ZSk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuX3dpdGhDb21taXQgPSBmdW5jdGlvbiBfd2l0aENvbW1pdCAoZm4pIHtcbiAgdmFyIGNvbW1pdHRpbmcgPSB0aGlzLl9jb21taXR0aW5nO1xuICB0aGlzLl9jb21taXR0aW5nID0gdHJ1ZTtcbiAgZm4oKTtcbiAgdGhpcy5fY29tbWl0dGluZyA9IGNvbW1pdHRpbmc7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggU3RvcmUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMkMSApO1xuXG5mdW5jdGlvbiBnZW5lcmljU3Vic2NyaWJlIChmbiwgc3Vicykge1xuICBpZiAoc3Vicy5pbmRleE9mKGZuKSA8IDApIHtcbiAgICBzdWJzLnB1c2goZm4pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSBzdWJzLmluZGV4T2YoZm4pO1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHN1YnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlIChzdG9yZSwgaG90KSB7XG4gIHN0b3JlLl9hY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX211dGF0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHN0YXRlID0gc3RvcmUuc3RhdGU7XG4gIC8vIGluaXQgYWxsIG1vZHVsZXNcbiAgaW5zdGFsbE1vZHVsZShzdG9yZSwgc3RhdGUsIFtdLCBzdG9yZS5fbW9kdWxlcy5yb290LCB0cnVlKTtcbiAgLy8gcmVzZXQgdm1cbiAgcmVzZXRTdG9yZVZNKHN0b3JlLCBzdGF0ZSwgaG90KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRTdG9yZVZNIChzdG9yZSwgc3RhdGUsIGhvdCkge1xuICB2YXIgb2xkVm0gPSBzdG9yZS5fdm07XG5cbiAgLy8gYmluZCBzdG9yZSBwdWJsaWMgZ2V0dGVyc1xuICBzdG9yZS5nZXR0ZXJzID0ge307XG4gIHZhciB3cmFwcGVkR2V0dGVycyA9IHN0b3JlLl93cmFwcGVkR2V0dGVycztcbiAgdmFyIGNvbXB1dGVkID0ge307XG4gIGZvckVhY2hWYWx1ZSh3cmFwcGVkR2V0dGVycywgZnVuY3Rpb24gKGZuLCBrZXkpIHtcbiAgICAvLyB1c2UgY29tcHV0ZWQgdG8gbGV2ZXJhZ2UgaXRzIGxhenktY2FjaGluZyBtZWNoYW5pc21cbiAgICAvLyBkaXJlY3QgaW5saW5lIGZ1bmN0aW9uIHVzZSB3aWxsIGxlYWQgdG8gY2xvc3VyZSBwcmVzZXJ2aW5nIG9sZFZtLlxuICAgIC8vIHVzaW5nIHBhcnRpYWwgdG8gcmV0dXJuIGZ1bmN0aW9uIHdpdGggb25seSBhcmd1bWVudHMgcHJlc2VydmVkIGluIGNsb3N1cmUgZW52aXJvbWVudC5cbiAgICBjb21wdXRlZFtrZXldID0gcGFydGlhbChmbiwgc3RvcmUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdG9yZS5nZXR0ZXJzLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuX3ZtW2tleV07IH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlIC8vIGZvciBsb2NhbCBnZXR0ZXJzXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIHVzZSBhIFZ1ZSBpbnN0YW5jZSB0byBzdG9yZSB0aGUgc3RhdGUgdHJlZVxuICAvLyBzdXBwcmVzcyB3YXJuaW5ncyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgaGFzIGFkZGVkXG4gIC8vIHNvbWUgZnVua3kgZ2xvYmFsIG1peGluc1xuICB2YXIgc2lsZW50ID0gVnVlLmNvbmZpZy5zaWxlbnQ7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gdHJ1ZTtcbiAgc3RvcmUuX3ZtID0gbmV3IFZ1ZSh7XG4gICAgZGF0YToge1xuICAgICAgJCRzdGF0ZTogc3RhdGVcbiAgICB9LFxuICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICB9KTtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSBzaWxlbnQ7XG5cbiAgLy8gZW5hYmxlIHN0cmljdCBtb2RlIGZvciBuZXcgdm1cbiAgaWYgKHN0b3JlLnN0cmljdCkge1xuICAgIGVuYWJsZVN0cmljdE1vZGUoc3RvcmUpO1xuICB9XG5cbiAgaWYgKG9sZFZtKSB7XG4gICAgaWYgKGhvdCkge1xuICAgICAgLy8gZGlzcGF0Y2ggY2hhbmdlcyBpbiBhbGwgc3Vic2NyaWJlZCB3YXRjaGVyc1xuICAgICAgLy8gdG8gZm9yY2UgZ2V0dGVyIHJlLWV2YWx1YXRpb24gZm9yIGhvdCByZWxvYWRpbmcuXG4gICAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9sZFZtLl9kYXRhLiQkc3RhdGUgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFZ1ZS5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJldHVybiBvbGRWbS4kZGVzdHJveSgpOyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsTW9kdWxlIChzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLCBtb2R1bGUsIGhvdCkge1xuICB2YXIgaXNSb290ID0gIXBhdGgubGVuZ3RoO1xuICB2YXIgbmFtZXNwYWNlID0gc3RvcmUuX21vZHVsZXMuZ2V0TmFtZXNwYWNlKHBhdGgpO1xuXG4gIC8vIHJlZ2lzdGVyIGluIG5hbWVzcGFjZSBtYXBcbiAgaWYgKG1vZHVsZS5uYW1lc3BhY2VkKSB7XG4gICAgc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSA9IG1vZHVsZTtcbiAgfVxuXG4gIC8vIHNldCBzdGF0ZVxuICBpZiAoIWlzUm9vdCAmJiAhaG90KSB7XG4gICAgdmFyIHBhcmVudFN0YXRlID0gZ2V0TmVzdGVkU3RhdGUocm9vdFN0YXRlLCBwYXRoLnNsaWNlKDAsIC0xKSk7XG4gICAgdmFyIG1vZHVsZU5hbWUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgc3RvcmUuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgICAgVnVlLnNldChwYXJlbnRTdGF0ZSwgbW9kdWxlTmFtZSwgbW9kdWxlLnN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBsb2NhbCA9IG1vZHVsZS5jb250ZXh0ID0gbWFrZUxvY2FsQ29udGV4dChzdG9yZSwgbmFtZXNwYWNlLCBwYXRoKTtcblxuICBtb2R1bGUuZm9yRWFjaE11dGF0aW9uKGZ1bmN0aW9uIChtdXRhdGlvbiwga2V5KSB7XG4gICAgdmFyIG5hbWVzcGFjZWRUeXBlID0gbmFtZXNwYWNlICsga2V5O1xuICAgIHJlZ2lzdGVyTXV0YXRpb24oc3RvcmUsIG5hbWVzcGFjZWRUeXBlLCBtdXRhdGlvbiwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaEFjdGlvbihmdW5jdGlvbiAoYWN0aW9uLCBrZXkpIHtcbiAgICB2YXIgdHlwZSA9IGFjdGlvbi5yb290ID8ga2V5IDogbmFtZXNwYWNlICsga2V5O1xuICAgIHZhciBoYW5kbGVyID0gYWN0aW9uLmhhbmRsZXIgfHwgYWN0aW9uO1xuICAgIHJlZ2lzdGVyQWN0aW9uKHN0b3JlLCB0eXBlLCBoYW5kbGVyLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoR2V0dGVyKGZ1bmN0aW9uIChnZXR0ZXIsIGtleSkge1xuICAgIHZhciBuYW1lc3BhY2VkVHlwZSA9IG5hbWVzcGFjZSArIGtleTtcbiAgICByZWdpc3RlckdldHRlcihzdG9yZSwgbmFtZXNwYWNlZFR5cGUsIGdldHRlciwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaENoaWxkKGZ1bmN0aW9uIChjaGlsZCwga2V5KSB7XG4gICAgaW5zdGFsbE1vZHVsZShzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLmNvbmNhdChrZXkpLCBjaGlsZCwgaG90KTtcbiAgfSk7XG59XG5cbi8qKlxuICogbWFrZSBsb2NhbGl6ZWQgZGlzcGF0Y2gsIGNvbW1pdCwgZ2V0dGVycyBhbmQgc3RhdGVcbiAqIGlmIHRoZXJlIGlzIG5vIG5hbWVzcGFjZSwganVzdCB1c2Ugcm9vdCBvbmVzXG4gKi9cbmZ1bmN0aW9uIG1ha2VMb2NhbENvbnRleHQgKHN0b3JlLCBuYW1lc3BhY2UsIHBhdGgpIHtcbiAgdmFyIG5vTmFtZXNwYWNlID0gbmFtZXNwYWNlID09PSAnJztcblxuICB2YXIgbG9jYWwgPSB7XG4gICAgZGlzcGF0Y2g6IG5vTmFtZXNwYWNlID8gc3RvcmUuZGlzcGF0Y2ggOiBmdW5jdGlvbiAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgICAgdmFyIHBheWxvYWQgPSBhcmdzLnBheWxvYWQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3Mub3B0aW9ucztcbiAgICAgIHZhciB0eXBlID0gYXJncy50eXBlO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucm9vdCkge1xuICAgICAgICB0eXBlID0gbmFtZXNwYWNlICsgdHlwZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXN0b3JlLl9hY3Rpb25zW3R5cGVdKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBsb2NhbCBhY3Rpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKHR5cGUsIHBheWxvYWQpXG4gICAgfSxcblxuICAgIGNvbW1pdDogbm9OYW1lc3BhY2UgPyBzdG9yZS5jb21taXQgOiBmdW5jdGlvbiAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgICAgdmFyIHBheWxvYWQgPSBhcmdzLnBheWxvYWQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3Mub3B0aW9ucztcbiAgICAgIHZhciB0eXBlID0gYXJncy50eXBlO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucm9vdCkge1xuICAgICAgICB0eXBlID0gbmFtZXNwYWNlICsgdHlwZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXN0b3JlLl9tdXRhdGlvbnNbdHlwZV0pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGxvY2FsIG11dGF0aW9uIHR5cGU6IFwiICsgKGFyZ3MudHlwZSkgKyBcIiwgZ2xvYmFsIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0b3JlLmNvbW1pdCh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gZ2V0dGVycyBhbmQgc3RhdGUgb2JqZWN0IG11c3QgYmUgZ290dGVuIGxhemlseVxuICAvLyBiZWNhdXNlIHRoZXkgd2lsbCBiZSBjaGFuZ2VkIGJ5IHZtIHVwZGF0ZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsb2NhbCwge1xuICAgIGdldHRlcnM6IHtcbiAgICAgIGdldDogbm9OYW1lc3BhY2VcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBzdG9yZS5nZXR0ZXJzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFrZUxvY2FsR2V0dGVycyhzdG9yZSwgbmFtZXNwYWNlKTsgfVxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0TmVzdGVkU3RhdGUoc3RvcmUuc3RhdGUsIHBhdGgpOyB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbG9jYWxcbn1cblxuZnVuY3Rpb24gbWFrZUxvY2FsR2V0dGVycyAoc3RvcmUsIG5hbWVzcGFjZSkge1xuICB2YXIgZ2V0dGVyc1Byb3h5ID0ge307XG5cbiAgdmFyIHNwbGl0UG9zID0gbmFtZXNwYWNlLmxlbmd0aDtcbiAgT2JqZWN0LmtleXMoc3RvcmUuZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIC8vIHNraXAgaWYgdGhlIHRhcmdldCBnZXR0ZXIgaXMgbm90IG1hdGNoIHRoaXMgbmFtZXNwYWNlXG4gICAgaWYgKHR5cGUuc2xpY2UoMCwgc3BsaXRQb3MpICE9PSBuYW1lc3BhY2UpIHsgcmV0dXJuIH1cblxuICAgIC8vIGV4dHJhY3QgbG9jYWwgZ2V0dGVyIHR5cGVcbiAgICB2YXIgbG9jYWxUeXBlID0gdHlwZS5zbGljZShzcGxpdFBvcyk7XG5cbiAgICAvLyBBZGQgYSBwb3J0IHRvIHRoZSBnZXR0ZXJzIHByb3h5LlxuICAgIC8vIERlZmluZSBhcyBnZXR0ZXIgcHJvcGVydHkgYmVjYXVzZVxuICAgIC8vIHdlIGRvIG5vdCB3YW50IHRvIGV2YWx1YXRlIHRoZSBnZXR0ZXJzIGluIHRoaXMgdGltZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2V0dGVyc1Byb3h5LCBsb2NhbFR5cGUsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuZ2V0dGVyc1t0eXBlXTsgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGdldHRlcnNQcm94eVxufVxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGF0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX211dGF0aW9uc1t0eXBlXSB8fCAoc3RvcmUuX211dGF0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkTXV0YXRpb25IYW5kbGVyIChwYXlsb2FkKSB7XG4gICAgaGFuZGxlci5jYWxsKHN0b3JlLCBsb2NhbC5zdGF0ZSwgcGF5bG9hZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckFjdGlvbiAoc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKSB7XG4gIHZhciBlbnRyeSA9IHN0b3JlLl9hY3Rpb25zW3R5cGVdIHx8IChzdG9yZS5fYWN0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkQWN0aW9uSGFuZGxlciAocGF5bG9hZCwgY2IpIHtcbiAgICB2YXIgcmVzID0gaGFuZGxlci5jYWxsKHN0b3JlLCB7XG4gICAgICBkaXNwYXRjaDogbG9jYWwuZGlzcGF0Y2gsXG4gICAgICBjb21taXQ6IGxvY2FsLmNvbW1pdCxcbiAgICAgIGdldHRlcnM6IGxvY2FsLmdldHRlcnMsXG4gICAgICBzdGF0ZTogbG9jYWwuc3RhdGUsXG4gICAgICByb290R2V0dGVyczogc3RvcmUuZ2V0dGVycyxcbiAgICAgIHJvb3RTdGF0ZTogc3RvcmUuc3RhdGVcbiAgICB9LCBwYXlsb2FkLCBjYik7XG4gICAgaWYgKCFpc1Byb21pc2UocmVzKSkge1xuICAgICAgcmVzID0gUHJvbWlzZS5yZXNvbHZlKHJlcyk7XG4gICAgfVxuICAgIGlmIChzdG9yZS5fZGV2dG9vbEhvb2spIHtcbiAgICAgIHJldHVybiByZXMuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICBzdG9yZS5fZGV2dG9vbEhvb2suZW1pdCgndnVleDplcnJvcicsIGVycik7XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyR2V0dGVyIChzdG9yZSwgdHlwZSwgcmF3R2V0dGVyLCBsb2NhbCkge1xuICBpZiAoc3RvcmUuX3dyYXBwZWRHZXR0ZXJzW3R5cGVdKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIGR1cGxpY2F0ZSBnZXR0ZXIga2V5OiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzW3R5cGVdID0gZnVuY3Rpb24gd3JhcHBlZEdldHRlciAoc3RvcmUpIHtcbiAgICByZXR1cm4gcmF3R2V0dGVyKFxuICAgICAgbG9jYWwuc3RhdGUsIC8vIGxvY2FsIHN0YXRlXG4gICAgICBsb2NhbC5nZXR0ZXJzLCAvLyBsb2NhbCBnZXR0ZXJzXG4gICAgICBzdG9yZS5zdGF0ZSwgLy8gcm9vdCBzdGF0ZVxuICAgICAgc3RvcmUuZ2V0dGVycyAvLyByb290IGdldHRlcnNcbiAgICApXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuYWJsZVN0cmljdE1vZGUgKHN0b3JlKSB7XG4gIHN0b3JlLl92bS4kd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZGF0YS4kJHN0YXRlIH0sIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgYXNzZXJ0KHN0b3JlLl9jb21taXR0aW5nLCBcImRvIG5vdCBtdXRhdGUgdnVleCBzdG9yZSBzdGF0ZSBvdXRzaWRlIG11dGF0aW9uIGhhbmRsZXJzLlwiKTtcbiAgICB9XG4gIH0sIHsgZGVlcDogdHJ1ZSwgc3luYzogdHJ1ZSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TmVzdGVkU3RhdGUgKHN0YXRlLCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aFxuICAgID8gcGF0aC5yZWR1Y2UoZnVuY3Rpb24gKHN0YXRlLCBrZXkpIHsgcmV0dXJuIHN0YXRlW2tleV07IH0sIHN0YXRlKVxuICAgIDogc3RhdGVcbn1cblxuZnVuY3Rpb24gdW5pZnlPYmplY3RTdHlsZSAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3QodHlwZSkgJiYgdHlwZS50eXBlKSB7XG4gICAgb3B0aW9ucyA9IHBheWxvYWQ7XG4gICAgcGF5bG9hZCA9IHR5cGU7XG4gICAgdHlwZSA9IHR5cGUudHlwZTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJywgKFwiZXhwZWN0cyBzdHJpbmcgYXMgdGhlIHR5cGUsIGJ1dCBmb3VuZCBcIiArICh0eXBlb2YgdHlwZSkgKyBcIi5cIikpO1xuICB9XG5cbiAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCwgb3B0aW9uczogb3B0aW9ucyB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGwgKF9WdWUpIHtcbiAgaWYgKFZ1ZSAmJiBfVnVlID09PSBWdWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1t2dWV4XSBhbHJlYWR5IGluc3RhbGxlZC4gVnVlLnVzZShWdWV4KSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZS4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBWdWUgPSBfVnVlO1xuICBhcHBseU1peGluKFZ1ZSk7XG59XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBnZXR0aW5nIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHN0YXRlcyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IHN0YXRlIGFuZCBnZXR0ZXJzIGZvciBwYXJhbSwgeW91IGNhbiBkbyBzb21ldGhpbmcgZm9yIHN0YXRlIGFuZCBnZXR0ZXJzIGluIGl0LlxuICogQHBhcmFtIHtPYmplY3R9XG4gKi9cbnZhciBtYXBTdGF0ZSA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBzdGF0ZXMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBub3JtYWxpemVNYXAoc3RhdGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkU3RhdGUgKCkge1xuICAgICAgdmFyIHN0YXRlID0gdGhpcy4kc3RvcmUuc3RhdGU7XG4gICAgICB2YXIgZ2V0dGVycyA9IHRoaXMuJHN0b3JlLmdldHRlcnM7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcFN0YXRlJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IG1vZHVsZS5jb250ZXh0LnN0YXRlO1xuICAgICAgICBnZXR0ZXJzID0gbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmNhbGwodGhpcywgc3RhdGUsIGdldHRlcnMpXG4gICAgICAgIDogc3RhdGVbdmFsXVxuICAgIH07XG4gICAgLy8gbWFyayB2dWV4IGdldHRlciBmb3IgZGV2dG9vbHNcbiAgICByZXNba2V5XS52dWV4ID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgY29tbWl0dGluZyB0aGUgbXV0YXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG11dGF0aW9ucyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IGBjb21taXRgIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbSwgaXQgY2FuIGFjY2VwdCBhbnRob3IgcGFyYW1zLiBZb3UgY2FuIGNvbW1pdCBtdXRhdGlvbiBhbmQgZG8gYW55IG90aGVyIHRoaW5ncyBpbiB0aGlzIGZ1bmN0aW9uLiBzcGVjaWFsbHksIFlvdSBuZWVkIHRvIHBhc3MgYW50aG9yIHBhcmFtcyBmcm9tIHRoZSBtYXBwZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBNdXRhdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbXV0YXRpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgbm9ybWFsaXplTWFwKG11dGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZE11dGF0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAvLyBHZXQgdGhlIGNvbW1pdCBtZXRob2QgZnJvbSBzdG9yZVxuICAgICAgdmFyIGNvbW1pdCA9IHRoaXMuJHN0b3JlLmNvbW1pdDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwTXV0YXRpb25zJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb21taXQgPSBtb2R1bGUuY29udGV4dC5jb21taXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5hcHBseSh0aGlzLCBbY29tbWl0XS5jb25jYXQoYXJncykpXG4gICAgICAgIDogY29tbWl0LmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgZ2V0dGVyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZ2V0dGVyc1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgbWFwR2V0dGVycyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBnZXR0ZXJzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgbm9ybWFsaXplTWFwKGdldHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgLy8gVGhlIG5hbWVzcGFjZSBoYXMgYmVlbiBtdXRhdGVkIGJ5IG5vcm1hbGl6ZU5hbWVzcGFjZVxuICAgIHZhbCA9IG5hbWVzcGFjZSArIHZhbDtcbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZEdldHRlciAoKSB7XG4gICAgICBpZiAobmFtZXNwYWNlICYmICFnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcEdldHRlcnMnLCBuYW1lc3BhY2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgISh2YWwgaW4gdGhpcy4kc3RvcmUuZ2V0dGVycykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBnZXR0ZXI6IFwiICsgdmFsKSk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnNbdmFsXVxuICAgIH07XG4gICAgLy8gbWFyayB2dWV4IGdldHRlciBmb3IgZGV2dG9vbHNcbiAgICByZXNba2V5XS52dWV4ID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZGlzcGF0Y2ggdGhlIGFjdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gYWN0aW9ucyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IGBkaXNwYXRjaGAgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtLCBpdCBjYW4gYWNjZXB0IGFudGhvciBwYXJhbXMuIFlvdSBjYW4gZGlzcGF0Y2ggYWN0aW9uIGFuZCBkbyBhbnkgb3RoZXIgdGhpbmdzIGluIHRoaXMgZnVuY3Rpb24uIHNwZWNpYWxseSwgWW91IG5lZWQgdG8gcGFzcyBhbnRob3IgcGFyYW1zIGZyb20gdGhlIG1hcHBlZCBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIG1hcEFjdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgYWN0aW9ucykge1xuICB2YXIgcmVzID0ge307XG4gIG5vcm1hbGl6ZU1hcChhY3Rpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkQWN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAvLyBnZXQgZGlzcGF0Y2ggZnVuY3Rpb24gZnJvbSBzdG9yZVxuICAgICAgdmFyIGRpc3BhdGNoID0gdGhpcy4kc3RvcmUuZGlzcGF0Y2g7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcEFjdGlvbnMnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoID0gbW9kdWxlLmNvbnRleHQuZGlzcGF0Y2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5hcHBseSh0aGlzLCBbZGlzcGF0Y2hdLmNvbmNhdChhcmdzKSlcbiAgICAgICAgOiBkaXNwYXRjaC5hcHBseSh0aGlzLiRzdG9yZSwgW3ZhbF0uY29uY2F0KGFyZ3MpKVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWJpbmRpbmcgbmFtZXNwYWNlIHBhcmFtIGZvciBtYXBYWFggZnVuY3Rpb24gaW4gc3BlY2lhbCBzY29wZWQsIGFuZCByZXR1cm4gdGhlbSBieSBzaW1wbGUgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBjcmVhdGVOYW1lc3BhY2VkSGVscGVycyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHsgcmV0dXJuICh7XG4gIG1hcFN0YXRlOiBtYXBTdGF0ZS5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBNdXRhdGlvbnM6IG1hcE11dGF0aW9ucy5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMuYmluZChudWxsLCBuYW1lc3BhY2UpXG59KTsgfTtcblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIG1hcFxuICogbm9ybWFsaXplTWFwKFsxLCAyLCAzXSkgPT4gWyB7IGtleTogMSwgdmFsOiAxIH0sIHsga2V5OiAyLCB2YWw6IDIgfSwgeyBrZXk6IDMsIHZhbDogMyB9IF1cbiAqIG5vcm1hbGl6ZU1hcCh7YTogMSwgYjogMiwgYzogM30pID0+IFsgeyBrZXk6ICdhJywgdmFsOiAxIH0sIHsga2V5OiAnYicsIHZhbDogMiB9LCB7IGtleTogJ2MnLCB2YWw6IDMgfSBdXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gbWFwXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1hcCAobWFwKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcClcbiAgICA/IG1hcC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDoga2V5IH0pOyB9KVxuICAgIDogT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDogbWFwW2tleV0gfSk7IH0pXG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnVuY3Rpb24gZXhwZWN0IHR3byBwYXJhbSBjb250YWlucyBuYW1lc3BhY2UgYW5kIG1hcC4gaXQgd2lsbCBub3JtYWxpemUgdGhlIG5hbWVzcGFjZSBhbmQgdGhlbiB0aGUgcGFyYW0ncyBmdW5jdGlvbiB3aWxsIGhhbmRsZSB0aGUgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIG1hcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTmFtZXNwYWNlIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWFwKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICBtYXAgPSBuYW1lc3BhY2U7XG4gICAgICBuYW1lc3BhY2UgPSAnJztcbiAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZS5jaGFyQXQobmFtZXNwYWNlLmxlbmd0aCAtIDEpICE9PSAnLycpIHtcbiAgICAgIG5hbWVzcGFjZSArPSAnLyc7XG4gICAgfVxuICAgIHJldHVybiBmbihuYW1lc3BhY2UsIG1hcClcbiAgfVxufVxuXG4vKipcbiAqIFNlYXJjaCBhIHNwZWNpYWwgbW9kdWxlIGZyb20gc3RvcmUgYnkgbmFtZXNwYWNlLiBpZiBtb2R1bGUgbm90IGV4aXN0LCBwcmludCBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IHN0b3JlXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVscGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE1vZHVsZUJ5TmFtZXNwYWNlIChzdG9yZSwgaGVscGVyLCBuYW1lc3BhY2UpIHtcbiAgdmFyIG1vZHVsZSA9IHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFtb2R1bGUpIHtcbiAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSBtb2R1bGUgbmFtZXNwYWNlIG5vdCBmb3VuZCBpbiBcIiArIGhlbHBlciArIFwiKCk6IFwiICsgbmFtZXNwYWNlKSk7XG4gIH1cbiAgcmV0dXJuIG1vZHVsZVxufVxuXG52YXIgaW5kZXhfZXNtID0ge1xuICBTdG9yZTogU3RvcmUsXG4gIGluc3RhbGw6IGluc3RhbGwsXG4gIHZlcnNpb246ICczLjEuMScsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMsXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMsXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMsXG4gIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzOiBjcmVhdGVOYW1lc3BhY2VkSGVscGVyc1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXhfZXNtO1xuZXhwb3J0IHsgU3RvcmUsIGluc3RhbGwsIG1hcFN0YXRlLCBtYXBNdXRhdGlvbnMsIG1hcEdldHRlcnMsIG1hcEFjdGlvbnMsIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzIH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\n");
/***/ }),
/***/ "./node_modules/_webpack@4.41.2@webpack/buildin/global.js":
/*!***********************************!*\
!*** (webpack)/buildin/global.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvX3dlYnBhY2tANC40MS4yQHdlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzP2NkMDAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/_webpack@4.41.2@webpack/buildin/global.js\n");
/***/ }),
/***/ "./src/App.vue":
/*!*********************!*\
!*** ./src/App.vue ***!
\*********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=7ba5bd90& */ \"./src/App.vue?vue&type=template&id=7ba5bd90&\");\n/* harmony import */ var _App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.vue?vue&type=script&lang=js& */ \"./src/App.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./App.vue?vue&type=style&index=0&lang=scss& */ \"./src/App.vue?vue&type=style&index=0&lang=scss&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (true) {\n var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7ba5bd90')) {\n api.createRecord('7ba5bd90', component.options)\n } else {\n api.reload('7ba5bd90', component.options)\n }\n module.hot.accept(/*! ./App.vue?vue&type=template&id=7ba5bd90& */ \"./src/App.vue?vue&type=template&id=7ba5bd90&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=7ba5bd90& */ \"./src/App.vue?vue&type=template&id=7ba5bd90&\");\n(function () {\n api.rerender('7ba5bd90', {\n render: _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n staticRenderFns: _App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n })\n })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n }\n}\ncomponent.options.__file = \"src/App.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9BcHAudnVlPzVkYzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiYTViZDkwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9qb2UvRG9jdW1lbnRzL2dpdC9waW5nYW4vaGtsaWZlL3Bpbmdhbi1saWZlLWluZGV4LXByby9ub2RlX21vZHVsZXMvX3Z1ZS1ob3QtcmVsb2FkLWFwaUAyLjMuNEB2dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzdiYTViZDkwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzdiYTViZDkwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzdiYTViZDkwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdiYTViZDkwJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzdiYTViZDkwJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvQXBwLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/App.vue\n");
/***/ }),
/***/ "./src/App.vue?vue&type=script&lang=js&":
/*!**********************************************!*\
!*** ./src/App.vue?vue&type=script&lang=js& ***!
\**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../node_modules/_babel-loader@8.0.6@babel-loader/lib!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT8wYzc2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/App.vue?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./src/App.vue?vue&type=style&index=0&lang=scss&":
/*!*******************************************************!*\
!*** ./src/App.vue?vue&type=style&index=0&lang=scss& ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=style&index=0&lang=scss&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT84ZjU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMCEuLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/App.vue?vue&type=style&index=0&lang=scss&\n");
/***/ }),
/***/ "./src/App.vue?vue&type=template&id=7ba5bd90&":
/*!****************************************************!*\
!*** ./src/App.vue?vue&type=template&id=7ba5bd90& ***!
\****************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./App.vue?vue&type=template&id=7ba5bd90& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/App.vue?vue&type=template&id=7ba5bd90&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_7ba5bd90___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvQXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YmE1YmQ5MCYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT9hNGQzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCItIWNhY2hlLWxvYWRlcj97XFxcImNhY2hlRGlyZWN0b3J5XFxcIjpcXFwibm9kZV9tb2R1bGVzLy5jYWNoZS92dWUtbG9hZGVyXFxcIixcXFwiY2FjaGVJZGVudGlmaWVyXFxcIjpcXFwiNGNmMDIzMTQtdnVlLWxvYWRlci10ZW1wbGF0ZVxcXCJ9IS4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YmE1YmQ5MCZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/App.vue?vue&type=template&id=7ba5bd90&\n");
/***/ }),
/***/ "./src/api/api.js":
/*!************************!*\
!*** ./src/api/api.js ***!
\************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = {\n load: \"/pingan_hklife_webapi/user/load\",\n logout: \"/pingan_hklife_webapi/user/logout\",\n // 是否显示图形验证码接口\n stdIsShowImageVcode: \"/pingan_hklife_webapi/auth/stdIsShowImageVcode\",\n // 刷新图形验证码接口\n stdRefreshVcode: \"/pingan_hklife_webapi/auth/stdRefreshVcode\",\n // OTP发送接口\n stdSendOTP: \"/pingan_hklife_webapi/auth/stdSendOTP\",\n // OTP验证与验重接口\n stdValidateOTPandRepeat: \"/pingan_hklife_webapi/auth/stdValidateOTPandRepeat\",\n // 注册手机号验重接口\n gsRegCheck: \"/pingan_hklife_webapi/auth/gsRegCheck\",\n // 账户整合登录接口\n gsLogin: \"/pingan_hklife_webapi/auth/gsLogin\",\n // 注册接口\n stdRegister: \"/pingan_hklife_webapi/auth/stdRegister\",\n // 修改密码\n changePassword: \"/pingan_hklife_webapi/user/password/change\",\n // 短信验证码登录\n otpLogin: \"/pingan_hklife_webapi/user/otpLogin\",\n // 短信验证码登录\n otpRegisterAndLogin: \"/pingan_hklife_webapi/user/otpRegisterAndLogin\",\n // 找回密码:定位用户信息\n locateUserInfo: \"/pingan_hklife_webapi/reset/locateUserInfo\",\n // 找回密码:发送验证码\n sendOtp: \"/pingan_hklife_webapi/reset/sendOtp\",\n // 找回密码:校验验证码\n checkOtp: \"/pingan_hklife_webapi/reset/checkOtp\",\n // 找回密码:重置密码\n resetPwd: \"/pingan_hklife_webapi/reset/resetPwd\",\n // 找回密码:重置密码\n updateInformation: \"/pingan_hklife_webapi/user/updateInformation\",\n // 读取联系方式\n getContacts: \"/pingan_hklife_webapi/customService/contacts/get\",\n // 更新联系方式\n updateContacts: \"/pingan_hklife_webapi/customService/contacts/update\",\n // 保存預約服務\n saveReservation: \"/pingan_hklife_webapi/customService/reservation/save\",\n // 保存投訴建議\n saveComplain: \"/pingan_hklife_webapi/customService/complain/save\"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXBpL2FwaS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hcGkvYXBpLmpzPzRlYzMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvYWQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3VzZXIvbG9hZFwiLFxuICBsb2dvdXQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3VzZXIvbG9nb3V0XCIsXG4gIC8vIOaYr+WQpuaYvuekuuWbvuW9oumqjOivgeeggeaOpeWPo1xuICBzdGRJc1Nob3dJbWFnZVZjb2RlOiBcIi9waW5nYW5faGtsaWZlX3dlYmFwaS9hdXRoL3N0ZElzU2hvd0ltYWdlVmNvZGVcIixcbiAgLy8g5Yi35paw5Zu+5b2i6aqM6K+B56CB5o6l5Y+jXG4gIHN0ZFJlZnJlc2hWY29kZTogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvYXV0aC9zdGRSZWZyZXNoVmNvZGVcIixcbiAgLy8gT1RQ5Y+R6YCB5o6l5Y+jXG4gIHN0ZFNlbmRPVFA6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2F1dGgvc3RkU2VuZE9UUFwiLFxuICAvLyBPVFDpqozor4HkuI7pqozph43mjqXlj6NcbiAgc3RkVmFsaWRhdGVPVFBhbmRSZXBlYXQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2F1dGgvc3RkVmFsaWRhdGVPVFBhbmRSZXBlYXRcIixcbiAgLy8g5rOo5YaM5omL5py65Y+36aqM6YeN5o6l5Y+jXG4gIGdzUmVnQ2hlY2s6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2F1dGgvZ3NSZWdDaGVja1wiLFxuICAvLyDotKbmiLfmlbTlkIjnmbvlvZXmjqXlj6NcbiAgZ3NMb2dpbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvYXV0aC9nc0xvZ2luXCIsXG4gIC8vIOazqOWGjOaOpeWPo1xuICBzdGRSZWdpc3RlcjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvYXV0aC9zdGRSZWdpc3RlclwiLFxuICAvLyDkv67mlLnlr4bnoIFcbiAgY2hhbmdlUGFzc3dvcmQ6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3VzZXIvcGFzc3dvcmQvY2hhbmdlXCIsXG4gIC8vIOefreS/oemqjOivgeeggeeZu+W9lVxuICBvdHBMb2dpbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvdXNlci9vdHBMb2dpblwiLFxuICAvLyDnn63kv6Hpqozor4HnoIHnmbvlvZVcbiAgb3RwUmVnaXN0ZXJBbmRMb2dpbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvdXNlci9vdHBSZWdpc3RlckFuZExvZ2luXCIsXG4gIC8vIOaJvuWbnuWvhuegge+8muWumuS9jeeUqOaIt+S/oeaBr1xuICBsb2NhdGVVc2VySW5mbzogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvcmVzZXQvbG9jYXRlVXNlckluZm9cIixcbiAgLy8g5om+5Zue5a+G56CB77ya5Y+R6YCB6aqM6K+B56CBXG4gIHNlbmRPdHA6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3Jlc2V0L3NlbmRPdHBcIixcbiAgLy8g5om+5Zue5a+G56CB77ya5qCh6aqM6aqM6K+B56CBXG4gIGNoZWNrT3RwOiBcIi9waW5nYW5faGtsaWZlX3dlYmFwaS9yZXNldC9jaGVja090cFwiLFxuICAvLyDmib7lm57lr4bnoIHvvJrph43nva7lr4bnoIFcbiAgcmVzZXRQd2Q6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL3Jlc2V0L3Jlc2V0UHdkXCIsXG4gIC8vIOaJvuWbnuWvhuegge+8mumHjee9ruWvhueggVxuICB1cGRhdGVJbmZvcm1hdGlvbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvdXNlci91cGRhdGVJbmZvcm1hdGlvblwiLFxuICAvLyDor7vlj5bogZTns7vmlrnlvI9cbiAgZ2V0Q29udGFjdHM6IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2N1c3RvbVNlcnZpY2UvY29udGFjdHMvZ2V0XCIsXG4gIC8vIOabtOaWsOiBlOezu+aWueW8j1xuICB1cGRhdGVDb250YWN0czogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvY3VzdG9tU2VydmljZS9jb250YWN0cy91cGRhdGVcIixcbiAgLy8g5L+d5a2Y6aCQ57SE5pyN5YuZXG4gIHNhdmVSZXNlcnZhdGlvbjogXCIvcGluZ2FuX2hrbGlmZV93ZWJhcGkvY3VzdG9tU2VydmljZS9yZXNlcnZhdGlvbi9zYXZlXCIsXG4gIC8vIOS/neWtmOaKleiotOW7uuitsFxuICBzYXZlQ29tcGxhaW46IFwiL3Bpbmdhbl9oa2xpZmVfd2ViYXBpL2N1c3RvbVNlcnZpY2UvY29tcGxhaW4vc2F2ZVwiXG5cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4Q0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/api/api.js\n");
/***/ }),
/***/ "./src/api/fetch-api.js":
/*!******************************!*\
!*** ./src/api/fetch-api.js ***!
\******************************/
/*! exports provided: httpGet, httpPost, formdata */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"httpGet\", function() { return httpGet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"httpPost\", function() { return httpPost; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formdata\", function() { return formdata; });\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.regexp.replace */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios */ \"./node_modules/_axios@0.19.0@axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _store_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/store/state.js */ \"./src/store/state.js\");\n\n\n // import {\n// Toast\n// } from 'vant';\n\nfunction Toast(msg) {\n console.log(\"msg:\", msg);\n} // axios的默认url\n// axios.defaults.baseURL = \"\"\n// 服务器地址\n// let base = process.env.REQUEST_DOMAIN || \"http://localhost:9101\";\n// let base = COM.baseUrl;\n\n\nconsole.log(Object({\"NODE_ENV\":\"sandbox\",\"VUE_APP_TITLE\":\"sandbox\",\"VUE_APP_BASE_URL\":\"https://ow.go.qudone.com\",\"VUE_APP_RSA_PUBLIC_KEY\":\"B5FE03847F02046C47292AF0FF2DE88977241483DD40C123046EB39CBE4C48167B120096CFF12CD16559322884A3C56FA92B07B89AB51FC8C91A75127622151DDD730DFF1F993D5A290CEAC0BBA7FC88285D8994ACBAFF50101EDE9A0925AD5DFFAFE96D53C370E9C5B37DF2F871F81C4D7CA6B7EC37FF459C07975AD9A74A95\",\"VUE_APP_RSA_KEY_INDEX\":\"10001\",\"BASE_URL\":\"\"}));\nvar base = \"\";\nvar axios = axios__WEBPACK_IMPORTED_MODULE_1___default.a.create({\n baseURL: \"https://ow.go.qudone.com\",\n timeout: 5000\n}); // 请求拦截器\n// axios.interceptors.request.use(\n// config => {\n// // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了\n// // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断\n// const token = \"token\"; //这里写入token\n// token && (config.headers.Authorization = token);\n// return config;\n// },\n// error => {\n// return Promise.error(error);\n// })\n// 响应拦截器\n\naxios.interceptors.response.use(function (response) {\n if (response.status === 200) {\n if (response.data.code === 200) {\n return Promise.resolve(response);\n } else {\n // Toast(response.data.bizMsg);\n return Promise.reject(response.data);\n }\n } else {\n return Promise.reject(response.data);\n }\n}, // 服务器状态码不是200的情况\nfunction (error) {\n if (error.response.status) {\n switch (error.response.status) {\n // 401: 未登录\n // 未登录则跳转登录页面,并携带当前页面的路径\n // 在登录成功后返回当前页面,这一步需要在登录页操作。\n case 401:\n router.replace({\n path: '/login',\n query: {\n redirect: router.currentRoute.fullPath\n }\n });\n break;\n // 403 token过期\n // 登录过期对用户进行提示\n // 清除本地token和清空vuex中token对象\n // 跳转登录页面\n\n case 403:\n Toast({\n message: '登录过期,请重新登录',\n duration: 1000,\n forbidClick: true\n }); // 清除token\n\n localStorage.removeItem('token');\n store.commit('loginSuccess', null); // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面\n\n setTimeout(function () {\n router.replace({\n path: '/login',\n query: {\n redirect: router.currentRoute.fullPath\n }\n });\n }, 1000);\n break;\n // 404请求不存在\n\n case 404:\n Toast({\n message: '网络请求不存在',\n duration: 1500,\n forbidClick: true\n });\n break;\n // 其他错误,直接抛出错误提示\n\n default:\n Toast({\n message: error.response.data.message,\n duration: 1500,\n forbidClick: true\n });\n }\n\n return Promise.reject(error.response);\n }\n}); //formDataHeaders设置\n\nvar formDataHeaders = {\n headers: {\n \"Content-Type\": \"multipart/form-data\"\n }\n};\n/**\n * 封装get方法\n * @param {*} params\n */\n\nvar httpGet = function httpGet(params) {\n var url = params.url,\n data = params.data,\n sid = params.sid;\n var headers = {};\n\n if (sid) {\n var sessionId = _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo && _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid ? _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid : \"\";\n headers = {\n headers: {\n sid: sessionId\n }\n };\n }\n\n return axios.get(\"\".concat(base).concat(url), {\n params: data\n }, headers).then(function (res) {\n return res.data.content;\n });\n};\n/**\n * 封装post方法\n * @param {*} params\n */\n\nvar httpPost = function httpPost(params) {\n var url = params.url,\n data = params.data,\n sid = params.sid;\n var headers = {};\n\n if (sid) {\n var sessionId = _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo && _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid ? _store_state_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].userInfo.sid : \"\";\n headers = {\n headers: {\n sid: sessionId\n }\n };\n }\n\n return axios.post(\"\".concat(base).concat(url), data, headers).then(function (res) {\n return res.data.content;\n });\n};\n/**\n * 封装post方法\n * @param {*} params\n * data数据是 formdata格式\n * 例如:\n * this.file = file\n let data = new FormData() //使用formData对象\n data.append('path', '/pro/mzczcradmin/')\n data.append('file', file.file)\n */\n\nvar formdata = function formdata(params) {\n var url = params.url,\n data = params.data;\n return axios.post(\"\".concat(base).concat(url), data, formDataHeaders).then(function (res) {\n return res.data;\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXBpL2ZldGNoLWFwaS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hcGkvZmV0Y2gtYXBpLmpzP2VkMGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zSW5zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBzdGF0ZSBmcm9tICdAL3N0b3JlL3N0YXRlLmpzJztcbi8vIGltcG9ydCB7XG4vLyAgIFRvYXN0XG4vLyB9IGZyb20gJ3ZhbnQnO1xuXG5mdW5jdGlvbiBUb2FzdChtc2cpIHtcblx0Y29uc29sZS5sb2coXCJtc2c6XCIsIG1zZyk7XG59XG5cbi8vIGF4aW9z55qE6buY6K6kdXJsXG4vLyBheGlvcy5kZWZhdWx0cy5iYXNlVVJMID0gXCJcIlxuXG4vLyDmnI3liqHlmajlnLDlnYBcbi8vIGxldCBiYXNlID0gcHJvY2Vzcy5lbnYuUkVRVUVTVF9ET01BSU4gfHwgXCJodHRwOi8vbG9jYWxob3N0OjkxMDFcIjtcbi8vIGxldCBiYXNlID0gQ09NLmJhc2VVcmw7XG5jb25zb2xlLmxvZyhwcm9jZXNzLmVudik7XG5sZXQgYmFzZSA9IFwiXCI7XG5jb25zdCBheGlvcyA9IGF4aW9zSW5zLmNyZWF0ZSh7XG5cdGJhc2VVUkw6IHByb2Nlc3MuZW52LlZVRV9BUFBfQkFTRV9VUkwsXG5cdHRpbWVvdXQ6IDUwMDBcbn0pXG5cbi8vIOivt+axguaLpuaIquWZqFxuLy8gYXhpb3MuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuLy8gICBjb25maWcgPT4ge1xuLy8gICAgIC8vIOavj+asoeWPkemAgeivt+axguS5i+WJjeWIpOaWreaYr+WQpuWtmOWcqHRva2Vu77yM5aaC5p6c5a2Y5Zyo77yM5YiZ57uf5LiA5ZyoaHR0cOivt+axgueahGhlYWRlcumDveWKoOS4inRva2Vu77yM5LiN55So5q+P5qyh6K+35rGC6YO95omL5Yqo5re75Yqg5LqGXG4vLyAgICAgLy8g5Y2z5L2/5pys5Zyw5a2Y5ZyodG9rZW7vvIzkuZ/mnInlj6/og710b2tlbuaYr+i/h+acn+eahO+8jOaJgOS7peWcqOWTjeW6lOaLpuaIquWZqOS4reimgeWvuei/lOWbnueKtuaAgei/m+ihjOWIpOaWrVxuLy8gICAgIGNvbnN0IHRva2VuID0gXCJ0b2tlblwiOyAvL+i/memHjOWGmeWFpXRva2VuXG4vLyAgICAgdG9rZW4gJiYgKGNvbmZpZy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSB0b2tlbik7XG4vLyAgICAgcmV0dXJuIGNvbmZpZztcbi8vICAgfSxcbi8vICAgZXJyb3IgPT4ge1xuLy8gICAgIHJldHVybiBQcm9taXNlLmVycm9yKGVycm9yKTtcbi8vICAgfSlcblxuLy8g5ZON5bqU5oum5oiq5ZmoXG5heGlvcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuXHRyZXNwb25zZSA9PiB7XG5cdFx0aWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG5cdFx0XHRpZiAocmVzcG9uc2UuZGF0YS5jb2RlID09PSAyMDApIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBUb2FzdChyZXNwb25zZS5kYXRhLmJpek1zZyk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZS5kYXRhKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlLmRhdGEpO1xuXHRcdH1cblx0fSxcblx0Ly8g5pyN5Yqh5Zmo54q25oCB56CB5LiN5pivMjAw55qE5oOF5Ya1XG5cdGVycm9yID0+IHtcblx0XHRpZiAoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKSB7XG5cdFx0XHRzd2l0Y2ggKGVycm9yLnJlc3BvbnNlLnN0YXR1cykge1xuXHRcdFx0XHQvLyA0MDE6IOacqueZu+W9lVxuXHRcdFx0XHQvLyDmnKrnmbvlvZXliJnot7PovaznmbvlvZXpobXpnaLvvIzlubbmkLrluKblvZPliY3pobXpnaLnmoTot6/lvoRcblx0XHRcdFx0Ly8g5Zyo55m75b2V5oiQ5Yqf5ZCO6L+U5Zue5b2T5YmN6aG16Z2i77yM6L+Z5LiA5q2l6ZyA6KaB5Zyo55m75b2V6aG15pON5L2c44CCXG5cdFx0XHRcdGNhc2UgNDAxOlxuXHRcdFx0XHRcdHJvdXRlci5yZXBsYWNlKHtcblx0XHRcdFx0XHRcdHBhdGg6ICcvbG9naW4nLFxuXHRcdFx0XHRcdFx0cXVlcnk6IHtcblx0XHRcdFx0XHRcdFx0cmVkaXJlY3Q6IHJvdXRlci5jdXJyZW50Um91dGUuZnVsbFBhdGhcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Ly8gNDAzIHRva2Vu6L+H5pyfXG5cdFx0XHRcdC8vIOeZu+W9lei/h+acn+WvueeUqOaIt+i/m+ihjOaPkOekulxuXHRcdFx0XHQvLyDmuIXpmaTmnKzlnLB0b2tlbuWSjOa4heepunZ1ZXjkuK10b2tlbuWvueixoVxuXHRcdFx0XHQvLyDot7PovaznmbvlvZXpobXpnaJcblx0XHRcdFx0Y2FzZSA0MDM6XG5cdFx0XHRcdFx0VG9hc3Qoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogJ+eZu+W9lei/h+acn++8jOivt+mHjeaWsOeZu+W9lScsXG5cdFx0XHRcdFx0XHRkdXJhdGlvbjogMTAwMCxcblx0XHRcdFx0XHRcdGZvcmJpZENsaWNrOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8g5riF6ZmkdG9rZW5cblx0XHRcdFx0XHRsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndG9rZW4nKTtcblx0XHRcdFx0XHRzdG9yZS5jb21taXQoJ2xvZ2luU3VjY2VzcycsIG51bGwpO1xuXHRcdFx0XHRcdC8vIOi3s+i9rOeZu+W9lemhtemdou+8jOW5tuWwhuimgea1j+iniOeahOmhtemdomZ1bGxQYXRo5Lyg6L+H5Y6777yM55m75b2V5oiQ5Yqf5ZCO6Lez6L2s6ZyA6KaB6K6/6Zeu55qE6aG16Z2iXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRyb3V0ZXIucmVwbGFjZSh7XG5cdFx0XHRcdFx0XHRcdHBhdGg6ICcvbG9naW4nLFxuXHRcdFx0XHRcdFx0XHRxdWVyeToge1xuXHRcdFx0XHRcdFx0XHRcdHJlZGlyZWN0OiByb3V0ZXIuY3VycmVudFJvdXRlLmZ1bGxQYXRoXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sIDEwMDApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyA0MDTor7fmsYLkuI3lrZjlnKhcblx0XHRcdFx0Y2FzZSA0MDQ6XG5cdFx0XHRcdFx0VG9hc3Qoe1xuXHRcdFx0XHRcdFx0bWVzc2FnZTogJ+e9kee7nOivt+axguS4jeWtmOWcqCcsXG5cdFx0XHRcdFx0XHRkdXJhdGlvbjogMTUwMCxcblx0XHRcdFx0XHRcdGZvcmJpZENsaWNrOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIOWFtuS7lumUmeivr++8jOebtOaOpeaKm+WHuumUmeivr+aPkOekulxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFRvYXN0KHtcblx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSxcblx0XHRcdFx0XHRcdGR1cmF0aW9uOiAxNTAwLFxuXHRcdFx0XHRcdFx0Zm9yYmlkQ2xpY2s6IHRydWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5yZXNwb25zZSk7XG5cdFx0fVxuXHR9XG4pO1xuXG4vL2Zvcm1EYXRhSGVhZGVyc+iuvue9rlxubGV0IGZvcm1EYXRhSGVhZGVycyA9IHtcblx0aGVhZGVyczoge1xuXHRcdFwiQ29udGVudC1UeXBlXCI6IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiXG5cdH1cbn1cblxuLyoqXG4gKiDlsIHoo4VnZXTmlrnms5VcbiAqIEBwYXJhbSB7Kn0gcGFyYW1zXG4gKi9cbmV4cG9ydCBjb25zdCBodHRwR2V0ID0gcGFyYW1zID0+IHtcblx0bGV0IHtcblx0XHR1cmwsXG5cdFx0ZGF0YSxcblx0XHRzaWRcblx0fSA9IHBhcmFtcztcblx0bGV0IGhlYWRlcnMgPSB7fTtcblx0aWYgKHNpZCkge1xuXHRcdGxldCBzZXNzaW9uSWQgPSBzdGF0ZS51c2VySW5mbyAmJiBzdGF0ZS51c2VySW5mby5zaWQgPyBzdGF0ZS51c2VySW5mby5zaWQgOiBcIlwiO1xuXHRcdGhlYWRlcnMgPSB7XG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdHNpZDogc2Vzc2lvbklkXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBheGlvcy5nZXQoYCR7YmFzZX0ke3VybH1gLCB7XG5cdFx0cGFyYW1zOiBkYXRhXG5cdH0sIGhlYWRlcnMpLnRoZW4ocmVzID0+IHJlcy5kYXRhLmNvbnRlbnQpO1xufVxuXG4vKipcbiAqIOWwgeijhXBvc3Tmlrnms5VcbiAqIEBwYXJhbSB7Kn0gcGFyYW1zXG4gKi9cbmV4cG9ydCBjb25zdCBodHRwUG9zdCA9IHBhcmFtcyA9PiB7XG5cdGxldCB7XG5cdFx0dXJsLFxuXHRcdGRhdGEsXG5cdFx0c2lkXG5cdH0gPSBwYXJhbXM7XG5cdGxldCBoZWFkZXJzID0ge307XG5cdGlmIChzaWQpIHtcblx0XHRsZXQgc2Vzc2lvbklkID0gc3RhdGUudXNlckluZm8gJiYgc3RhdGUudXNlckluZm8uc2lkID8gc3RhdGUudXNlckluZm8uc2lkIDogXCJcIjtcblx0XHRoZWFkZXJzID0ge1xuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRzaWQ6IHNlc3Npb25JZFxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYXhpb3MucG9zdChgJHtiYXNlfSR7dXJsfWAsIGRhdGEsIGhlYWRlcnMpLnRoZW4ocmVzID0+IHJlcy5kYXRhLmNvbnRlbnQpO1xufVxuXG4vKipcbiAqIOWwgeijhXBvc3Tmlrnms5VcbiAqIEBwYXJhbSB7Kn0gcGFyYW1zXG4gKiBkYXRh5pWw5o2u5pivIGZvcm1kYXRh5qC85byPXG4gKiDkvovlpoLvvJpcbiAqICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGVcbiAgICAgICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKCkgLy/kvb/nlKhmb3JtRGF0YeWvueixoVxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ3BhdGgnLCAnL3Byby9temN6Y3JhZG1pbi8nKVxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLmZpbGUpXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtZGF0YSA9IHBhcmFtcyA9PiB7XG5cdGxldCB7XG5cdFx0dXJsLFxuXHRcdGRhdGFcblx0fSA9IHBhcmFtcztcblx0cmV0dXJuIGF4aW9zLnBvc3QoYCR7YmFzZX0ke3VybH1gLCBkYXRhLCBmb3JtRGF0YUhlYWRlcnMpLnRoZW4ocmVzID0+IHJlcy5kYXRhKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBN0NBO0FBQ0E7QUFrREE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFEQTtBQURBO0FBTUE7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBREE7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7Ozs7Ozs7QUFVQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/api/fetch-api.js\n");
/***/ }),
/***/ "./src/assets/images/common/button-next.png":
/*!**************************************************!*\
!*** ./src/assets/images/common/button-next.png ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAuCAMAAAAFiil6AAAAPFBMVEUAAAD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQC43r6mAAAAE3RSTlMAKcry1foyDBPhGjsjwT/rsXp75PzLkAAAAGRJREFUOMut1EsOgCAMAFHQivhF7f3v6gVGDC0s5yUkhLThljXgES0se9HlQ0abZJRokUmln6SqzCxakaGfbDY5WE6bXL/AV3Hnh/h7MnX+9NaeoUdP5zHgzkPo7wV6dWU8wv0Fq/cJL8kFDSkAAAAASUVORK5CYII=\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9jb21tb24vYnV0dG9uLW5leHQucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvY29tbW9uL2J1dHRvbi1uZXh0LnBuZz9iZmNkIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQXVDQU1BQUFBRmlpbDZBQUFBUEZCTVZFVUFBQUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FDNDNyNm1BQUFBRTNSU1RsTUFLY3J5MWZveURCUGhHanNqd1QvcnNYcDc1UHpMa0FBQUFHUkpSRUZVT011dDFFc09nQ0FNQUZIUWl2aEY3ZjN2NmdWR0RDMHM1eVVraExUaGxqWGdFUzBzZTlIbFEwYWJaSlJva1VtbG42U3F6Q3hha2FHZmJEWTVXRTZiWEwvQVYzSG5oL2g3TW5YKzlOYWVvVWRQNXpIZ3prUG83d1Y2ZFdVOHd2MEZxL2NKTDhrRkRTa0FBQUFBU1VWT1JLNUNZSUk9XCIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/common/button-next.png\n");
/***/ }),
/***/ "./src/assets/images/common/button-prev.png":
/*!**************************************************!*\
!*** ./src/assets/images/common/button-prev.png ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAuCAMAAAAFiil6AAAAM1BMVEUAAAD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQD/SQADIOb6AAAAEHRSTlMAJBM8LPgaDNXH8eQz3bF3c64jtAAAAFZJREFUOMvF1MEVgCAQA1FAkICg9F+tFpAc5K24xz/njaO34+J+DAiv/kMPXXqKbxw2nh9v3Af1YufbD+5O4Trksq40u4KpkiItwbb0qVK9eOVlBXJkbrftCFHy0aPQAAAAAElFTkSuQmCC\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9jb21tb24vYnV0dG9uLXByZXYucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvY29tbW9uL2J1dHRvbi1wcmV2LnBuZz9lYjZlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJnQUFBQXVDQU1BQUFBRmlpbDZBQUFBTTFCTVZFVUFBQUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FEL1NRRC9TUUQvU1FBRElPYjZBQUFBRUhSU1RsTUFKQk04TFBnYUROWEg4ZVF6M2JGM2M2NGp0QUFBQUZaSlJFRlVPTXZGMU1FVmdDQVFBMUZBa0lDZzlGK3RGcEFjNUsyNHh6L25qYU8zNCtKK0RBaXYva01QWFhxS2J4dzJuaDl2M0FmMVl1ZmJEKzVPNFRya3NxNDB1NEtwa2lJdHdiYjBxVks5ZU9WbEJYSmticmZ0Q0ZIeTBhUFFBQUFBQUVsRlRrU3VRbUNDXCIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/common/button-prev.png\n");
/***/ }),
/***/ "./src/assets/images/home/footer-logo.png":
/*!************************************************!*\
!*** ./src/assets/images/home/footer-logo.png ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/footer-logo.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2Zvb3Rlci1sb2dvLnBuZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hc3NldHMvaW1hZ2VzL2hvbWUvZm9vdGVyLWxvZ28ucG5nP2I2ZWYiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiYXNzZXRzL2ltZy9mb290ZXItbG9nby5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/footer-logo.png\n");
/***/ }),
/***/ "./src/assets/images/home/header-logo.png":
/*!************************************************!*\
!*** ./src/assets/images/home/header-logo.png ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/header-logo.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2hlYWRlci1sb2dvLnBuZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9hc3NldHMvaW1hZ2VzL2hvbWUvaGVhZGVyLWxvZ28ucG5nPzI0ZWIiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiYXNzZXRzL2ltZy9oZWFkZXItbG9nby5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/header-logo.png\n");
/***/ }),
/***/ "./src/assets/images/home/icon-user.png":
/*!**********************************************!*\
!*** ./src/assets/images/home/icon-user.png ***!
\**********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAA40lEQVQokYWRPUpDQRRGjyEP3UAIaGkqUbIDQXQHkk2Ji1AQUwiKhBRaPLSQBxYuwiZNoiABUYLHwjtxjA+98MGd755vfhhUMnXVK/VdfYt+K2dyeFOdBjxQh9G/qBt1gXP1Q93OvJ3wzuoCI/V+4YqoD+pjWjf4rgmwCjQzrwjvORl5oA+sAUfAOtABjoE2cDqnsqML9cbfVcbsxxua6qE6qwnM1INgQF1S+zG8U3fVZXVF3VOrmJ2kQC+Mi7TLggr1Mph91Fv1VW3VwEltv36+JODrP+CkUp02gDFQ8X9VwNMn4rqc0xVlVWkAAAAASUVORK5CYII=\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2ljb24tdXNlci5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL2ljb24tdXNlci5wbmc/Nzg1MSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFOQ0FZQUFBQ2RLWTlDQUFBQTQwbEVRVlFva1lXUlBVcERRUlJHanlFUDNVQUlhR2txVWJJRFFYUUhrazJKaTFBUVV3aUtoQlJhUExTUUJ4WXV3aVpOb2lBQlVZTEh3anR4akErOThNR2Q3NTV2ZmhoVU1uWFZLL1ZkZll0K0syZHllRk9kQmp4UWg5Ry9xQnQxZ1hQMVE5M092SjN3enVvQ0kvVis0WXFvRCtwaldqZjRyZ213Q2pRenJ3anZPUmw1b0Erc0FVZkFPdEFCam9FMmNEcW5zcU1MOWNiZlZjYnN4eHVhNnFFNnF3bk0xSU5nUUYxUyt6RzhVM2ZWWlhWRjNWT3JtSjJrUUMrTWk3VExnZ3IxTXBoOTFGdjFWVzNWd0VsdHYzNitKT0RyUCtDa1VwMDJnREZROFg5VndOTW40cnFjMHhWbFZXa0FBQUFBU1VWT1JLNUNZSUk9XCIiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/icon-user.png\n");
/***/ }),
/***/ "./src/assets/images/home/qrcode-focus.png":
/*!*************************************************!*\
!*** ./src/assets/images/home/qrcode-focus.png ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/qrcode-focus.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL3FyY29kZS1mb2N1cy5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9ob21lL3FyY29kZS1mb2N1cy5wbmc/MDNkNCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3FyY29kZS1mb2N1cy5wbmdcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/assets/images/home/qrcode-focus.png\n");
/***/ }),
/***/ "./src/assets/images/index sync recursive ^\\.\\/more\\-1\\-.*\\.png$":
/*!*************************************************************!*\
!*** ./src/assets/images/index sync ^\.\/more\-1\-.*\.png$ ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("var map = {\n\t\"./more-1-en.png\": \"./src/assets/images/index/more-1-en.png\",\n\t\"./more-1-tc.png\": \"./src/assets/images/index/more-1-tc.png\",\n\t\"./more-1-zh.png\": \"./src/assets/images/index/more-1-zh.png\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/assets/images/index sync recursive ^\\\\.\\\\/more\\\\-1\\\\-.*\\\\.png$\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleCBzeW5jIHJlY3Vyc2l2ZSBeXFwuXFwvbW9yZVxcLTFcXC0uKlxcLnBuZyQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleCBzeW5jIF5cXC5cXC9tb3JlXFwtMVxcLS4qXFwucG5nJD9hYzA0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBtYXAgPSB7XG5cdFwiLi9tb3JlLTEtZW4ucG5nXCI6IFwiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtZW4ucG5nXCIsXG5cdFwiLi9tb3JlLTEtdGMucG5nXCI6IFwiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtdGMucG5nXCIsXG5cdFwiLi9tb3JlLTEtemgucG5nXCI6IFwiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtemgucG5nXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXggc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC9tb3JlXFxcXC0xXFxcXC0uKlxcXFwucG5nJFwiOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index sync recursive ^\\.\\/more\\-1\\-.*\\.png$\n");
/***/ }),
/***/ "./src/assets/images/index/banner.png":
/*!********************************************!*\
!*** ./src/assets/images/index/banner.png ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/banner.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9iYW5uZXIucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvYmFubmVyLnBuZz8yZDZhIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvYmFubmVyLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/banner.png\n");
/***/ }),
/***/ "./src/assets/images/index/linear.png":
/*!********************************************!*\
!*** ./src/assets/images/index/linear.png ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7YAAAAbBAMAAAC6vg4GAAAAD1BMVEX/MBX/MBX/MBX/MBX/MBVZEpHiAAAABXRSTlMBAwYKDvRkOdAAAALdSURBVGje7NcBroIwDIDh9QarN3jtDdrdAO5/pieDotBtmBfEF7MvikgEpn8mIeDqRs9YvTQOY3c1LRPa+MFVjDGEADHgA20IM+/S6jDen73vVYbM1ZXMpzW5bLiLUK2bD6LOcsre+L3mHzjp3pSEiVppIazQ1zWqJKJFaUw7Y3eCZAZ1eKLUKosxhsmyhFZd4uWIR9IwSSU6bOUt6ZCms9gQ8suWG15h4EeHPlP9ApuzqrTLYq66hU9u5PuqTPRSSbtMMlUqQPO41CLW2yLt2cRl7S5Gy5Qi46esv9TGYGBeuqnriMpMu3cTEWYScTc7PqyZQ8b8MGCvuEE1rGyox34HP1d92HJZCAChDHfoNSqXY4fkWxBb12pZJwTMk7YO/tZWNGPWiSipbZlXjGgdr59heyeNXbmwjbRKHrt50j6ysVHxbgPb+vPefDgk/y1pwe2u3pIU8k1PWXR5qxffNqEz/NPT8ueGhEUAVvYVWHaj7kOwZv0bBmgWzcsIEaC3/W3HDHATiGEg6P3B+Av9/yMrXeLbWFeVFhUKUkYioCS2g70J5F6F/AaW0zZQ3MKTlTf52DyGvAla6qUgfoYtdJjk5qUgsv451cXn13C02rV9GTjqwbzG4iLdx/BkbeyN/B+4FgO5vQ/Vi+goN0+jTt+qLSHFnyFWqSTs2j6UKiOj8a8q8x4Tj4HlKKDt7vnmD8ba0NWf0FCiapgewupielLkqeExWPYQE8BRPJ9lvdmPJ+J6V3SU7kxhOJuxLh0OnJxLZkQmq3WFIPE6D7LFVjwDqCTpq/xR07LS2cAWTSD4K+S0waIwaCmAo2bpwCS9RFfklt4rRpdRF4BX1SSjGa3BqogsgaBFS8gaOSGeByN4KhZqHxm8FZwGZz1VvQROLnbCdAkX1fZQ3SIEChyKqa3UWrm0tM7YSiKy+5SrmFp7oR7epqtjpZaY7CDxqccYndowIjabzWaz2bwZn4kVXoPimRIxAAAAAElFTkSuQmCC\"//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9saW5lYXIucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbGluZWFyLnBuZz9kMTA5Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQTdZQUFBQWJCQU1BQUFDNnZnNEdBQUFBRDFCTVZFWC9NQlgvTUJYL01CWC9NQlgvTUJWWkVwSGlBQUFBQlhSU1RsTUJBd1lLRHZSa09kQUFBQUxkU1VSQlZHamU3TmNCcm9Jd0RJRGg5UWFyTjNqdERkcmRBTzUvcGllRG90QnRtQmZFRjdNdmlrZ0VwbjhtSWVEcVJzOVl2VFFPWTNjMUxSUGErTUZWakRHRUFESGdBMjBJTSsvUzZqRGVuNzN2VlliTTFaWE1welc1YkxpTFVLMmJENkxPY3NyZStMM21IempwM3BTRWlWcHBJYXpRMXpXcUpLSkZhVXc3WTNlQ1pBWjFlS0xVS29zeGhzbXloRlpkNHVXSVI5SXdTU1U2Yk9VdDZaQ21zOWdROHN1V0cxNWg0RWVIUGxQOUFwdXpxclRMWXE2NmhVOXU1UHVxVFBSU1NidE1NbFVxUVBPNDFDTFcyeUx0MmNSbDdTNUd5NVFpNDZlc3Y5VEdZR0JldXFucmlNcE11M2NURVdZU2NUYzdQcXlaUThiOE1HQ3Z1RUUxckd5b3gzNEhQMWQ5MkhKWkNBQ2hESGZvTlNxWFk0ZmtXeEJiMTJwWkp3VE1rN1lPL3RaV05HUFdpU2lwYlpsWGpHZ2RyNTloZXllTlhibXdqYlJLSHJ0NTBqNnlzVkh4YmdQYit2UGVmRGdrL3kxcHdlMnUzcElVOGsxUFdYUjVxeGZmTnFFei9OUFQ4dWVHaEVVQVZ2WVZXSGFqN2tPd1p2MGJCbWdXemNzSUVhQzMvVzNIREhBVGlHRWc2UDNCK0F2OS95TXJYZUxiV0ZlVkZoVUtVa1lpb0NTMmc3MEo1RjZGL0FhVzB6WlEzTUtUbFRmNTJEeUd2QWxhNnFVZ2ZvWXRkSmprNXFVZ3N2NDUxY1huMTNDMDJyVjlHVGpxd2J6RzRpTGR4L0JrYmV5Ti9CKzRGZ081dlEvVmkrZ29OMCtqVHQrcUxTSEZueUZXcVNUczJqNlVLaU9qOGE4cTh4NFRqNEhsS0tEdDd2bm1EOGJhME5XZjBGQ2lhcGdld3VwaWVsTGtxZUV4V1BZUUU4QlJQSjlsdmRtUEorSjZWM1NVN2t4aE9KdXhMaDBPbkp4TFprUW1xM1dGSVBFNkQ3TEZWandEcUNUcHEveFIwN0xTMmNBV1RTRDRLK1Mwd2FJd2FDbUFvMmJwd0NTOVJGZmtsdDRyUnBkUkY0QlgxU1NqR2EzQnFvZ3NnYUJGUzhnYU9TR2VCeU40S2hacUh4bThGWndHWnoxVnZRUk9MbmJDZEFrWDFmWlEzU0lFQ2h5S3FhM1VXcm0wdE03WVNpS3krNVNybUZwN29SN2VwcXRqcFphWTdDRHhxY2NZbmRvd0lqYWJ6V2F6MmJ3Wm40a1ZYb1BpbVJJeEFBQUFBRWxGVGtTdVFtQ0NcIiJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/linear.png\n");
/***/ }),
/***/ "./src/assets/images/index/more-1-en.png":
/*!***********************************************!*\
!*** ./src/assets/images/index/more-1-en.png ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/more-1-en.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtZW4ucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbW9yZS0xLWVuLnBuZz9iNzM4Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvbW9yZS0xLWVuLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/more-1-en.png\n");
/***/ }),
/***/ "./src/assets/images/index/more-1-tc.png":
/*!***********************************************!*\
!*** ./src/assets/images/index/more-1-tc.png ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/more-1-tc.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtdGMucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbW9yZS0xLXRjLnBuZz82NzExIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvbW9yZS0xLXRjLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/more-1-tc.png\n");
/***/ }),
/***/ "./src/assets/images/index/more-1-zh.png":
/*!***********************************************!*\
!*** ./src/assets/images/index/more-1-zh.png ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/more-1-zh.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9tb3JlLTEtemgucG5nLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2Fzc2V0cy9pbWFnZXMvaW5kZXgvbW9yZS0xLXpoLnBuZz8wNzFlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImFzc2V0cy9pbWcvbW9yZS0xLXpoLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/more-1-zh.png\n");
/***/ }),
/***/ "./src/assets/images/index/recommend-1.png":
/*!*************************************************!*\
!*** ./src/assets/images/index/recommend-1.png ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/recommend-1.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMS5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMS5wbmc/M2E2NiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3JlY29tbWVuZC0xLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/recommend-1.png\n");
/***/ }),
/***/ "./src/assets/images/index/recommend-2.png":
/*!*************************************************!*\
!*** ./src/assets/images/index/recommend-2.png ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/recommend-2.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMi5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMi5wbmc/YzM0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3JlY29tbWVuZC0yLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/recommend-2.png\n");
/***/ }),
/***/ "./src/assets/images/index/recommend-3.png":
/*!*************************************************!*\
!*** ./src/assets/images/index/recommend-3.png ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("module.exports = __webpack_require__.p + \"assets/img/recommend-3.png\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMy5wbmcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2ltYWdlcy9pbmRleC9yZWNvbW1lbmQtMy5wbmc/NTIzNSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJhc3NldHMvaW1nL3JlY29tbWVuZC0zLnBuZ1wiOyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/assets/images/index/recommend-3.png\n");
/***/ }),
/***/ "./src/common/lang/en.js":
/*!*******************************!*\
!*** ./src/common/lang/en.js ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = {\n message: {\n login: 'Login',\n Username: 'Username',\n Password: 'Password',\n Captcha: 'Captcha',\n Language: 'Language',\n zh: 'Chinese',\n en: 'English'\n },\n glbalTips: {\n sessionLost: \"为了更好的体验,需要您登录后再进行此操作\"\n },\n nav: {\n loginData: {\n name: \"login\",\n path: \"\",\n list: [{\n name: \"register\",\n path: \"/register\",\n type: \"noAuth\",\n value: \"\"\n }, {\n name: \"login\",\n path: \"/login\",\n type: \"noAuth\",\n value: \"\"\n }, {\n name: \"modify password\",\n path: \"/password/reset\",\n type: \"auth\",\n value: \"\"\n }, {\n name: \"logout\",\n path: \"\",\n type: \"auth\",\n value: \"logout\"\n }]\n },\n navList: [{\n name: \"Product description\",\n path: \"/product\",\n list: []\n }, {\n name: \"Customer service\",\n path: \"/custom/product\",\n list: [{\n name: \"Contact us\",\n path: \"/custom/service?q=m1\"\n }, {\n name: \"Pay premium\",\n path: \"/custom/service?q=m2\"\n }, {\n name: \"Query policy\",\n path: \"/custom/service?q=m3\"\n }, {\n name: \"Change policy\",\n path: \"/custom/service?q=m41\"\n }, {\n name: \"Claim report\",\n path: \"/custom/service?q=m5\"\n }, {\n name: \"Reservation service\",\n path: \"/custom/service?q=m6\"\n }, {\n name: \"Suggestions\",\n path: \"/custom/service?q=m7\"\n }, {\n name: \"Common form\",\n path: \"/custom/service?q=m8\"\n }]\n }, {\n name: \"News\",\n path: \"/news/list\",\n list: []\n }, {\n name: \"About\",\n path: \"\",\n list: [{\n name: \"Company\",\n path: \"/profile\"\n }, {\n name: \"Leaders\",\n path: \"\"\n }]\n }]\n },\n footer: {\n hkPhone: \"HK Tel\",\n cnPhone: \"CN Tel\",\n aboutUs: \"About us\",\n companyIntroduction: \"Company introduction\",\n news: \"News\",\n joinUs: \"Join us\",\n helpCenter: \"Help center\",\n privacy: \"Privacy\",\n terms: \"Terms\",\n map: \"Map\",\n contactUs: \"Contact us\",\n contactInformation: \"Contact Information\",\n service: \"Service\",\n qrcode: \"Official Accounts\",\n copyright: \"版權所有 © 中國平安保險(集團)股份有限公司未經許可不得復制、轉載或摘編,違者必究!\"\n },\n login: {\n title: \"平安一賬通\",\n loginType1: \"账密登录\",\n loginType2: \"動態密碼登录\",\n account: \"賬號\",\n accountPlaceholder: \"請輸入證件號/一账通用户名/手机号\",\n password: \"密碼\",\n passwordPlaceholder: \"輸入登錄密碼\",\n verifyPlaceholder: \"請輸入驗證碼\",\n agree: \"同意\",\n protocol: \"《平安一账通会员服务协议》\",\n login: \"登入\",\n register: \"註冊\",\n forget: \"忘記密碼\",\n mobile: \"手機號\",\n mobilePlaceholder: \"手機號\",\n verifyCode: \"驗證碼\",\n verifyCodePlaceholder: \"驗證碼\",\n verifyCodeGet: \"獲取驗證碼\",\n tips: {\n e1: \"请输入账号信息\",\n e2: \"请输入密码\",\n e3: \"请输入图像验证码\",\n e4: \"请同意《平安一账通会员服务协议》\",\n e5: \"账号/密码不正确\",\n oe0: \"请输入正确的手机号\",\n oe1: \"请先获取短信验证码\",\n oe2: \"请输入图片验证码\",\n oe3: \"请输入短信验证码\",\n oe4: \"短信验证码不正确\"\n }\n },\n session: {\n sidExpire: \"長時間未操作,為了您賬戶的安全,請登錄後再操作\"\n },\n register: {\n mobileOptions: [{\n type: \"hk\",\n name: \"香港手機號\",\n placeHolder: \"請輸入8位手機號碼\",\n areaCode: \"+852\"\n }, {\n type: \"zh\",\n name: \"大陸手機號\",\n placeHolder: \"請輸入11位手機號碼\",\n areaCode: \"+86\"\n }],\n coutTips: \"{second}秒後重新獲取\",\n title: \"歡迎註冊\",\n title2: \"請設置新的密碼\",\n mobilePlaceholder: \"请输入8位手机号码\",\n verifyCodePlaceholder: \"請輸入驗證碼\",\n verifyCodeGet: \"獲取驗證碼\",\n agree: \"同意\",\n protocol: \"《平安一账通会员服务协议》\",\n register: \"點擊註冊\",\n newPassword: \"新密碼\",\n newPasswordPlaceholder: \"輸入登錄密碼\",\n newPasswordSure: \"確認密碼\",\n newPasswordSurePlaceholder: \"輸入登錄密碼\",\n sure: \"確認\",\n tips: {\n e1: \"手機號不正確,請輸入正確的手機號\",\n e2: \"請同意《平安一賬通會員服務協議》\",\n e3: \"短信驗證碼不正確\",\n e4: \"請先獲取短信驗證碼\",\n e5: \"手機號已經被註冊,請使用其他手機號註冊或直接登錄\",\n e6: \"請輸入圖片驗證碼\",\n e7: \"密碼長度不能少於8位\",\n e8: \"密碼中必須包含數字、字符以及特殊號碼\",\n e9: \"兩次密碼不一致,請確認後重新輸入\",\n e10: \"驗證碼過期,請重新申請驗證碼\",\n e11: \"註冊失敗,請聯繫工作人員\",\n e12: \"註冊成功\"\n }\n },\n passwordCheck: {\n error1: \"密碼長度不少於8位\",\n error2: \"密碼中必須包含數字、字符以及特殊號碼\",\n error3: \"两次密码不一致,请确认后重新输入\",\n error4: \"密碼修改失敗,請稍後再試,或拨打客服电话95511解决\",\n error5: \"舊密碼不正確,請重新輸入\",\n success: \"密码修改成功\"\n },\n passwordReset: {\n oldPwd: \"旧密码\",\n oldPwdPlaceholde: \"請輸入舊密碼\",\n cidExpire: \"長時間未操作,為了您賬戶的安全,請重新開始\",\n type1: {\n title: \"密碼找回\",\n t1: \"用戶輸入信息\",\n t1Placeholder: \"手機號/一賬通用戶名\",\n submit: \"確認\",\n error: \"您的手機號或證件號輸入錯誤,請核對后重新輸入\"\n },\n type2: {\n title: \"密碼找回\",\n t1: \"手機短信驗證碼\",\n t1Placeholder: \"請輸入驗證碼\",\n submit: \"確認\",\n error1: \"短信驗證碼輸入錯誤,請核對後重新輸入\",\n error2: \"短信驗證碼已經過期,請重新獲取驗證碼\",\n error3: \"短信验证码发放时间少于1分钟,请稍后再试\"\n },\n type3: {\n title: \"密碼找回\",\n t1: \"核對身份證信息\",\n t1Placeholder: \"\",\n submit: \"確認\"\n },\n type4: {\n title: \"請設置新的密碼\",\n t1: \"新密碼\",\n t1Placeholder: \"請輸入新密碼\",\n t2: \"確認密碼\",\n t2Placeholder: \"請重新輸入新密碼\",\n submit: \"確認\",\n error1: \"密碼長度不少於8位\",\n error2: \"密碼中必須包含數字、字符以及特殊號碼\"\n }\n },\n infomationImprove: {\n title: \"請完善您的信息\",\n t1: \"姓名\",\n t1Placeholder: \"\",\n t2: \"性別\",\n t2Placeholder: \"\",\n t3: \"出生日期\",\n t3Placeholder: \"\",\n t4: \"證件類型\",\n t4Placeholder: \"\",\n t5: \"證件號碼\",\n t5Placeholder: \"\",\n submit: \"確認\",\n cancel: \"跳過\",\n candidates: {\n sex: [{\n name: \"男\",\n value: \"M\"\n }, {\n name: \"女\",\n value: \"F\"\n }],\n idType: [{\n name: \"身份證\",\n value: \"1\"\n }, {\n name: \"護照\",\n value: \"2\"\n }, {\n name: \"軍官證或士兵證\",\n value: \"3\"\n }, {\n name: \"港澳通行證/回鄉證或台胞證\",\n value: \"6\"\n }, {\n name: \"外國人永久居留身份證\",\n value: \"0\"\n }, {\n name: \"港澳台居民居住證\",\n value: \"V\"\n }, {\n name: \"台灣居民居住證\",\n value: \"W\"\n }]\n },\n successMsg: \"更新成功\",\n errorTips: {\n e1: \"請填寫姓名信息\",\n e2: \"請選擇性別\",\n e3: \"請選擇生日\",\n e4: \"請選擇證件類型\",\n e5: \"請填寫證件號碼\",\n e6: \"您填寫的證件號碼有誤\",\n e7: \"您填寫的信息有誤,請核實後重新提交\"\n }\n },\n index: {\n news: \"新聞資訊\",\n newMore: \"查看更多\",\n recommend: {\n item1: {\n btn: \"了解更多產品\",\n t1: \"為自己和家人尋找壹份保障\"\n },\n item2: {\n btn: \"立即預約\",\n t1: \"在線預約 專業服務\"\n },\n item3: {\n btn: \"客户服务\",\n t1: \"專業客服為妳服務\",\n t2: \"想了解更多,可致電\",\n t3: \"95511\",\n t4: \"聯絡我們,或進入\"\n }\n }\n },\n complaintAcceptance: {\n name: \"姓名\",\n namePlaceholder: \"姓名\",\n contactType: \"聯絡方式\",\n email: \"電郵地址\",\n question: \"問題或意見\",\n questionPlaceHolder: \"(字數不超過500字)\",\n orderNo: \"保單編號\",\n orderNoPlaceHolder: \"如您為平安客戶,請提供保單編號\",\n contactTime: \"期望聯絡時間\",\n notice1: \"本表格所收集的個人資料根據「平安人壽香港個人資料收集聲明」處理及只會被用作於聯絡 閣下之用。然而所收集的個人資料未經您明確授權將不會轉移至「平安人壽香港個人資料收集聲明」列明以外之第三者機構。您可選擇不向我們提供所需的個人資料,惟這樣可能導致我們不能聯絡您。您亦可根據「平安人壽香港個人資料收集聲明」之權利查閱及更正個人資料。\",\n notice2: \"本人現確認明白並同意本人的個人資料根據中銀人壽個人資料收集聲明作以上述用途。\",\n contactTypes: ['電話', '電郵'],\n errorTips: {\n e1: \"請填寫該項內容\",\n e2: \"請填寫正確的聯繫方式\"\n }\n },\n reservation: {\n name: \"姓名\",\n namePlaceholder: \"姓名\",\n contactType: \"聯絡方式\",\n contact: \"聯絡电话\",\n contactPlaceholder: \"香港號碼/內地號碼\",\n reservationType: \"預約類型\",\n reservationRemark: \"預約說明\",\n reservationRemarkPlaceholder: \"請簡單說明您想要咨詢的產品或業務\",\n hkClient: \"是否平安香港客戶\",\n yes: \"是\",\n no: \"否\",\n contactTime: \"期望联络时间\",\n notice1: \"本表格所收集的个人资料根据「平安人寿香港个人资料收集声明」处理及只会被用作于联络 阁下之用。然而所收集的个人资料未经您明确授权将不会转移至「平安人寿香港个人资料收集声明」列明以外之第三者机构。您可选择不向我们提供所需的个人资料,惟这样可能导致我们不能联络您。您亦可根据「平安人寿香港个人资料收集声明」之权利查阅及更正个人资料。\",\n notice2: \"本人现确认明白并同意本人的个人资料根据中银人寿个人资料收集声明作以上述用途。\"\n },\n paymentType: {\n menu1: \"親臨客服中心付款\",\n menu2: \"网银付款\",\n menu3: \"电汇付款\",\n menu4: \"柜员机付款\",\n menu5: \"「缴费灵」付款\",\n menu6: \"香港邮政局\"\n },\n product: {\n btnPosition: \"Booking service\",\n iconProblem: \"Common problem\",\n iconProcess: \"Insurance process\",\n iconProduct: \"Product details\"\n },\n customProduct: {\n menu1: \"Contact us\",\n menu2: \"Pay premium\",\n menu3: \"Query policy\",\n menu4: \"Change policy\",\n menu5: \"Claim report\",\n menu6: \"Reservation service\",\n menu7: \"Suggestions\",\n menu8: \"Common form\"\n },\n commonForm: {\n head1: \"表格類型\",\n head2: \"表格名稱\",\n head3: \"使用說明\",\n head4: \"附件\",\n download: \"下載文檔\",\n form: [{\n type: \"繳費類\",\n list: [{\n name: \"「電子入賬服務」及銀行戶口<br>直接付款授權申請\",\n desc: \"申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供\",\n download: \"\"\n }, {\n name: \"信用卡戶口直接付款授權書\",\n desc: \"申請信用卡戶口直接付款授權時須提供\",\n download: \"\"\n }]\n }, {\n type: \"保單變更類\",\n list: [{\n name: \"保險合同解除申請書\",\n desc: \"退保、猶豫期退保業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 保單貸款還款類)\",\n desc: \"保單貸款、還款業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 保險合同計劃變更類)\",\n desc: \"加保、減保、新增附險、復效等業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 客戶信息變更類)\",\n desc: \"基本信息變更業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 客戶權益變更類)\",\n desc: \"交費方式、自墊選擇權變更、補發等業務適用\",\n download: \"\"\n }, {\n name: \"授權委托書\",\n desc: \"委托他人代辦時須提供\",\n download: \"\"\n }, {\n name: \"稅收聲明\",\n desc: \"CRS要求\",\n download: \"\"\n }, {\n name: \"健康告知\",\n desc: \"須二次核保的業務須提供\",\n download: \"\"\n }]\n }, {\n type: \"理賠類\",\n list: [{\n name: \"理賠申請書\",\n desc: \"紙質申請的應備文件\",\n download: \"\"\n }]\n }]\n },\n policyChangeGuide: {\n notice: \"如需做其他保單變更聯繫客服(聯繫客服超鏈接跳轉公司聯繫信息頁)\",\n head1: \"項目\",\n head2: \"具體內容\",\n head3: \"申請資格人\",\n head4: \"受理時間\",\n head5: \"應備材料\",\n download: \"下載文檔\",\n form: [{\n project: \"退保\",\n content: \"在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)\",\n applicant: \"投保人\",\n receptionTime: \"保單效力終止前\",\n materialList: [{\n name: \"保險單\"\n }, {\n name: \"申請書\",\n type: 1\n }, {\n name: \"投保人有效身份證件\"\n }, {\n name: \"存折银行卡相关\"\n }]\n }, {\n project: \"猶豫期退保\",\n content: \"在猶豫期內提出解除合同,公司會無息退還全部保費\",\n applicant: \"投保人\",\n receptionTime: \"猶豫期結束前\",\n materialList: [{\n name: \"保險單\"\n }, {\n name: \"申請書\",\n type: 1\n }, {\n name: \"投保人有效身份證件\"\n }, {\n name: \"存折银行卡相关\"\n }, {\n name: \"首期保費發票\"\n }]\n }, {\n project: \"客戶資料變更\",\n projectType: 1,\n path: \"/custom/service\",\n query: {\n q: \"m42\"\n },\n content: \"投保人、受保人、受益人的個人信息變更\",\n applicant: \"投保人\",\n receptionTime: \"不限\",\n materialList: [{\n name: \"申請書\",\n type: 1\n }, {\n name: \"必要的證明材料\"\n }]\n }, {\n project: \"聯系方式變更\",\n projectType: 1,\n path: \"/custom/service\",\n query: {\n q: \"m43\"\n },\n content: \"地址、電話等信息的變更\",\n applicant: \"投保人\",\n receptionTime: \"不限\",\n materialList: [{\n name: \"申請書\",\n type: 1\n }, {\n name: \"投保人有效身份證件\"\n }]\n }, {\n project: \"交費方式變更\",\n content: \"更改保單的續期交費方式或交費賬號\",\n applicant: \"投保人\",\n receptionTime: \"保單交費期滿前\",\n materialList: [{\n name: \"申請書\",\n type: 1\n }, {\n name: \"保險單\"\n }]\n }]\n },\n policyChangeContact: {\n phone: \"聯繫電話\",\n address: \"聯繫地址\",\n email: \"E-Mail\",\n checkTips: \"本人不同意接收宣傳信息\",\n submit: \"確認修改\",\n errorTips: {\n e1: \"請填寫正確的聯繫電話\",\n e2: \"請填寫聯繫地址\",\n e3: \"請填寫正確的E-Mail地址\"\n }\n },\n policyChangeInformation: {\n hkClient: \"是否平安香港客戶\",\n yes: \"是\",\n no: \"否\",\n obj: \"變更對象\",\n name: \"姓名\",\n sex: \"性别\",\n birth: \"出生日期\",\n type: \"證件類型\",\n NO: \"證件號碼\",\n validityPeriod: \"證件有效期\",\n nationality: \"國籍\",\n employer: \"工作單位\",\n maritalStatus: \"婚姻狀況\",\n submit: \"確認修改\",\n upload: \"附件上傳\",\n modifyTips1: \"如需修改請\",\n modifyTips2: \"聯繫客服\"\n },\n contactUs: {\n service: {\n center: {\n title: \"客戶服務中心\",\n address: \"地址:香港尖沙嘴港威永金融大樓\",\n time: \"服務時間:星期壹至五9:00-18:00\"\n },\n hotline: {\n title: \"客戶服務熱線\",\n hk: \"香港號碼:(852)2983 8866\",\n cn: \"內地號碼:(86)40078 95511\",\n time: \"服務時間:星期壹至五9:00-18:00\"\n },\n mail: {\n title: \"客戶服務電郵\",\n mail: \"cs@pingan.com.hk\"\n }\n },\n pulbic: {\n title: \"微信公眾號\",\n m1: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「添加朋友」,選擇「公眾號」 輸入並搜索「平安人壽香港」\",\n m2: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「掃壹掃」掃描下方二維碼(放置二維碼)\"\n },\n qrcode: {\n title: \"官方公眾號\"\n }\n },\n customService: {\n name: \"Customer service\",\n menu1: \"Contact us\",\n menu2: \"Pay premium\",\n menu3: \"Query policy\",\n menu4: \"Change policy\",\n menu41: \"保單變更指引\",\n menu42: \"聯系方式變更\",\n menu43: \"客戶資料變更\",\n menu5: \"Claim report\",\n menu6: \"Reservation service\",\n menu7: \"Suggestions\",\n menu8: \"Common form\",\n insuranceQuery: {\n InsurantNumber: \"Insurant number\",\n Insurant: \"Insurant\",\n InsurantName: \"Insurant name\",\n InsurantAmount: \"Insurant amount\",\n effectiveDate: \"Effective date\",\n period: \"Guarantee period\",\n t2Title: \"Guarantee information\",\n t2InsurantClassify: \"Name of insurance\",\n t2InsurantAmount: \"Insured amount\",\n t3Title: \"Customer information\",\n t3InsurantNameCn: \"Name of applicant (Cn)\",\n t3InsurantNameEn: \"Name of applicant (En)\",\n t3InsurantIdNumber: \"ID Number\",\n t3InsurantContactAddress: \"Contact address\",\n t3InsurantAddress: \"Address\",\n t3InsurantMobile: \"mobile\",\n t3InsurantEmail: \"email\",\n t3InsuredNameCn: \"Name of insured (Cn)\",\n t3InsuredNameEn: \"Name of insured (En)\",\n t3InsuredBirthday: \"Birthday\",\n t3InsuredIdNumber: \"ID Number\",\n t4Title: \"Beneficiary information\",\n t4NameCn: \"Name (Cn)\",\n t4NameEn: \"Name (En)\",\n t4Relation: \"與受保人關係\",\n t4Allocation: \"Distribution ratio\",\n t5Title: \"Payment information\",\n t5PaymentPeriod: \"Payment period\",\n t5PaymentMethod: \"Payment method\",\n t5PaymentCurrency: \"Payment currency\",\n t5CurrentPremium: \"Current premium\",\n t5PaymentBank: \"Payment bank\",\n t5PaymentAccount: \"Payment account\",\n t6Title: \"Payment record\",\n t6PaymentPeriod: \"Payment period\",\n t6PaymentMethod: \"Payment method\",\n t6ClosingDate: \"Closing date\",\n t6PaymentAmount: \"Payment amount\"\n },\n reservation: {\n submitBtn: '確認',\n contactTypes: ['電話'],\n reservationTypes: ['投保咨詢', '代辦保單變更'],\n errorTips: {\n e1: \"請填寫該項內容\",\n e2: \"請填寫正確的聯繫方式\"\n }\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tbW9uL2xhbmcvZW4uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tbW9uL2xhbmcvZW4uanM/MWUwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcblx0bWVzc2FnZToge1xuXHRcdGxvZ2luOiAnTG9naW4nLFxuXHRcdFVzZXJuYW1lOiAnVXNlcm5hbWUnLFxuXHRcdFBhc3N3b3JkOiAnUGFzc3dvcmQnLFxuXHRcdENhcHRjaGE6ICdDYXB0Y2hhJyxcblx0XHRMYW5ndWFnZTogJ0xhbmd1YWdlJyxcblx0XHR6aDogJ0NoaW5lc2UnLFxuXHRcdGVuOiAnRW5nbGlzaCdcblx0fSxcblx0Z2xiYWxUaXBzIDoge1xuXHRcdHNlc3Npb25Mb3N0IDogXCLkuLrkuobmm7Tlpb3nmoTkvZPpqozvvIzpnIDopoHmgqjnmbvlvZXlkI7lho3ov5vooYzmraTmk43kvZxcIlxuXHR9LFxuXHRuYXY6IHtcblx0XHRsb2dpbkRhdGE6IHtcblx0XHRcdG5hbWU6IFwibG9naW5cIixcblx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcInJlZ2lzdGVyXCIsXG5cdFx0XHRcdHBhdGg6IFwiL3JlZ2lzdGVyXCIsXG5cdFx0XHRcdHR5cGU6IFwibm9BdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcIlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwibG9naW5cIixcblx0XHRcdFx0cGF0aDogXCIvbG9naW5cIixcblx0XHRcdFx0dHlwZTogXCJub0F1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwiXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwibW9kaWZ5IHBhc3N3b3JkXCIsXG5cdFx0XHRcdHBhdGg6IFwiL3Bhc3N3b3JkL3Jlc2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiYXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCJsb2dvdXRcIixcblx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0dHlwZTogXCJhdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcImxvZ291dFwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0bmF2TGlzdDogW3tcblx0XHRcdG5hbWU6IFwiUHJvZHVjdCBkZXNjcmlwdGlvblwiLFxuXHRcdFx0cGF0aDogXCIvcHJvZHVjdFwiLFxuXHRcdFx0bGlzdDogW11cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwiQ3VzdG9tZXIgc2VydmljZVwiLFxuXHRcdFx0cGF0aDogXCIvY3VzdG9tL3Byb2R1Y3RcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwiQ29udGFjdCB1c1wiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0xXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiUGF5IHByZW1pdW1cIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tMlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIlF1ZXJ5IHBvbGljeVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0zXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiQ2hhbmdlIHBvbGljeVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW00MVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkNsYWltIHJlcG9ydFwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW01XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiUmVzZXJ2YXRpb24gc2VydmljZVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW02XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiU3VnZ2VzdGlvbnNcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tN1wiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIkNvbW1vbiBmb3JtXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bThcIlxuXHRcdFx0fSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwiTmV3c1wiLFxuXHRcdFx0cGF0aDogXCIvbmV3cy9saXN0XCIsXG5cdFx0XHRsaXN0OiBbXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCJBYm91dFwiLFxuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwiQ29tcGFueVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9wcm9maWxlXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwiTGVhZGVyc1wiLFxuXHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRmb290ZXI6IHtcblx0XHRoa1Bob25lOiBcIkhLIFRlbFwiLFxuXHRcdGNuUGhvbmU6IFwiQ04gVGVsXCIsXG5cdFx0YWJvdXRVczogXCJBYm91dCB1c1wiLFxuXHRcdGNvbXBhbnlJbnRyb2R1Y3Rpb246IFwiQ29tcGFueSBpbnRyb2R1Y3Rpb25cIixcblx0XHRuZXdzOiBcIk5ld3NcIixcblx0XHRqb2luVXM6IFwiSm9pbiB1c1wiLFxuXHRcdGhlbHBDZW50ZXI6IFwiSGVscCBjZW50ZXJcIixcblx0XHRwcml2YWN5OiBcIlByaXZhY3lcIixcblx0XHR0ZXJtczogXCJUZXJtc1wiLFxuXHRcdG1hcDogXCJNYXBcIixcblx0XHRjb250YWN0VXM6IFwiQ29udGFjdCB1c1wiLFxuXHRcdGNvbnRhY3RJbmZvcm1hdGlvbjogXCJDb250YWN0IEluZm9ybWF0aW9uXCIsXG5cdFx0c2VydmljZTogXCJTZXJ2aWNlXCIsXG5cdFx0cXJjb2RlOiBcIk9mZmljaWFsIEFjY291bnRzXCIsXG5cdFx0Y29weXJpZ2h0OiBcIueJiOasiuaJgOaciSDCqSDkuK3lnIvlubPlronkv53pmqrvvIjpm4blnJjvvInogqHku73mnInpmZDlhazlj7jmnKrntpPoqLHlj6/kuI3lvpflvqnliLbjgIHovYnovInmiJbmkZjnt6jvvIzpgZXogIXlv4XnqbYhXCJcblx0fSxcblx0bG9naW46IHtcblx0XHR0aXRsZTogXCLlubPlronkuIDos6zpgJpcIixcblx0XHRsb2dpblR5cGUxOiBcIui0puWvhueZu+W9lVwiLFxuXHRcdGxvZ2luVHlwZTI6IFwi5YuV5oWL5a+G56K855m75b2VXCIsXG5cdFx0YWNjb3VudDogXCLos6zomZ9cIixcblx0XHRhY2NvdW50UGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6K2J5Lu26JmfL+S4gOi0pumAmueUqOaIt+WQjS/miYvmnLrlj7dcIixcblx0XHRwYXNzd29yZDogXCLlr4bnorxcIixcblx0XHRwYXNzd29yZFBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHZlcmlmeVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpempl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOi0pumAmuS8muWRmOacjeWKoeWNj+iuruOAi1wiLFxuXHRcdGxvZ2luOiBcIueZu+WFpVwiLFxuXHRcdHJlZ2lzdGVyOiBcIuiou+WGilwiLFxuXHRcdGZvcmdldDogXCLlv5joqJjlr4bnorxcIixcblx0XHRtb2JpbGU6IFwi5omL5qmf6JmfXCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfXCIsXG5cdFx0dmVyaWZ5Q29kZTogXCLpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlUGxhY2Vob2xkZXI6IFwi6amX6K2J56K8XCIsXG5cdFx0dmVyaWZ5Q29kZUdldDogXCLnjbLlj5bpqZforYnnorxcIixcblx0XHR0aXBzOiB7XG5cdFx0XHRlMTogXCLor7fovpPlhaXotKblj7fkv6Hmga9cIixcblx0XHRcdGUyOiBcIuivt+i+k+WFpeWvhueggVwiLFxuXHRcdFx0ZTM6IFwi6K+36L6T5YWl5Zu+5YOP6aqM6K+B56CBXCIsXG5cdFx0XHRlNDogXCLor7flkIzmhI/jgIrlubPlronkuIDotKbpgJrkvJrlkZjmnI3liqHljY/orq7jgItcIixcblx0XHRcdGU1OiBcIui0puWPty/lr4bnoIHkuI3mraPnoa5cIixcblx0XHRcdG9lMDogXCLor7fovpPlhaXmraPnoa7nmoTmiYvmnLrlj7dcIixcblx0XHRcdG9lMTogXCLor7flhYjojrflj5bnn63kv6Hpqozor4HnoIFcIixcblx0XHRcdG9lMjogXCLor7fovpPlhaXlm77niYfpqozor4HnoIFcIixcblx0XHRcdG9lMzogXCLor7fovpPlhaXnn63kv6Hpqozor4HnoIFcIixcblx0XHRcdG9lNDogXCLnn63kv6Hpqozor4HnoIHkuI3mraPnoa5cIixcblx0XHR9XG5cdH0sXG5cdHNlc3Npb246IHtcblx0XHRzaWRFeHBpcmU6IFwi6ZW35pmC6ZaT5pyq5pON5L2c77yM54K65LqG5oKo6LOs5oi255qE5a6J5YWo77yM6KuL55m76YyE5b6M5YaN5pON5L2cXCIsXG5cdH0sXG5cdHJlZ2lzdGVyOiB7XG5cdFx0bW9iaWxlT3B0aW9uczogW3tcblx0XHRcdHR5cGU6IFwiaGtcIixcblx0XHRcdG5hbWU6IFwi6aaZ5riv5omL5qmf6JmfXCIsXG5cdFx0XHRwbGFjZUhvbGRlcjogXCLoq4vovLjlhaU45L2N5omL5qmf6Jmf56K8XCIsXG5cdFx0XHRhcmVhQ29kZTogXCIrODUyXCJcblx0XHR9LCB7XG5cdFx0XHR0eXBlOiBcInpoXCIsXG5cdFx0XHRuYW1lOiBcIuWkp+mZuOaJi+apn+iZn1wiLFxuXHRcdFx0cGxhY2VIb2xkZXI6IFwi6KuL6Ly45YWlMTHkvY3miYvmqZ/omZ/norxcIixcblx0XHRcdGFyZWFDb2RlOiBcIis4NlwiXG5cdFx0fV0sXG5cdFx0Y291dFRpcHM6IFwie3NlY29uZH3np5Llvozph43mlrDnjbLlj5ZcIixcblx0XHR0aXRsZTogXCLmraHov47oqLvlhopcIixcblx0XHR0aXRsZTI6IFwi6KuL6Kit572u5paw55qE5a+G56K8XCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi6K+36L6T5YWlOOS9jeaJi+acuuWPt+eggVwiLFxuXHRcdHZlcmlmeUNvZGVQbGFjZWhvbGRlcjogXCLoq4vovLjlhaXpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlR2V0OiBcIueNsuWPlumpl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOi0pumAmuS8muWRmOacjeWKoeWNj+iuruOAi1wiLFxuXHRcdHJlZ2lzdGVyOiBcIum7nuaTiuiou+WGilwiLFxuXHRcdG5ld1Bhc3N3b3JkOiBcIuaWsOWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkUGxhY2Vob2xkZXI6IFwi6Ly45YWl55m76YyE5a+G56K8XCIsXG5cdFx0bmV3UGFzc3dvcmRTdXJlOiBcIueiuuiqjeWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkU3VyZVBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHN1cmU6IFwi56K66KqNXCIsXG5cdFx0dGlwczoge1xuXHRcdFx0ZTE6IFwi5omL5qmf6Jmf5LiN5q2j56K677yM6KuL6Ly45YWl5q2j56K655qE5omL5qmf6JmfXCIsXG5cdFx0XHRlMjogXCLoq4vlkIzmhI/jgIrlubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbDjgItcIixcblx0XHRcdGUzOiBcIuefreS/oempl+itieeivOS4jeato+eiulwiLFxuXHRcdFx0ZTQ6IFwi6KuL5YWI542y5Y+W55+t5L+h6amX6K2J56K8XCIsXG5cdFx0XHRlNTogXCLmiYvmqZ/omZ/lt7LntpPooqvoqLvlhorvvIzoq4vkvb/nlKjlhbbku5bmiYvmqZ/omZ/oqLvlhormiJbnm7TmjqXnmbvpjIRcIixcblx0XHRcdGU2OiBcIuiri+i8uOWFpeWclueJh+mpl+itieeivFwiLFxuXHRcdFx0ZTc6IFwi5a+G56K86ZW35bqm5LiN6IO95bCR5pa8OOS9jVwiLFxuXHRcdFx0ZTg6IFwi5a+G56K85Lit5b+F6aCI5YyF5ZCr5pW45a2X44CB5a2X56ym5Lul5Y+K54m55q6K6Jmf56K8XCIsXG5cdFx0XHRlOTogXCLlhanmrKHlr4bnorzkuI3kuIDoh7TvvIzoq4vnorroqo3lvozph43mlrDovLjlhaVcIixcblx0XHRcdGUxMDogXCLpqZforYnnorzpgY7mnJ/vvIzoq4vph43mlrDnlLPoq4vpqZforYnnorxcIixcblx0XHRcdGUxMTogXCLoqLvlhorlpLHmlZfvvIzoq4voga/nuavlt6XkvZzkurrlk6FcIixcblx0XHRcdGUxMjogXCLoqLvlhormiJDlip9cIixcblx0XHR9XG5cdH0sXG5cdHBhc3N3b3JkQ2hlY2s6IHtcblx0XHRlcnJvcjE6IFwi5a+G56K86ZW35bqm5LiN5bCR5pa8OOS9jVwiLFxuXHRcdGVycm9yMjogXCLlr4bnorzkuK3lv4XpoIjljIXlkKvmlbjlrZfjgIHlrZfnrKbku6Xlj4rnibnmroromZ/norxcIixcblx0XHRlcnJvcjM6IFwi5Lik5qyh5a+G56CB5LiN5LiA6Ie077yM6K+356Gu6K6k5ZCO6YeN5paw6L6T5YWlXCIsXG5cdFx0ZXJyb3I0OiBcIuWvhueivOS/ruaUueWkseaVl++8jOiri+eojeW+jOWGjeippu+8jOaIluaLqOaJk+WuouacjeeUteivnTk1NTEx6Kej5YazXCIsXG5cdFx0ZXJyb3I1OiBcIuiIiuWvhueivOS4jeato+eiuu+8jOiri+mHjeaWsOi8uOWFpVwiLFxuXHRcdHN1Y2Nlc3M6IFwi5a+G56CB5L+u5pS55oiQ5YqfXCJcblx0fSxcblx0cGFzc3dvcmRSZXNldDoge1xuXHRcdG9sZFB3ZDogXCLml6flr4bnoIFcIixcblx0XHRvbGRQd2RQbGFjZWhvbGRlOiBcIuiri+i8uOWFpeiIiuWvhueivFwiLFxuXHRcdGNpZEV4cGlyZTogXCLplbfmmYLplpPmnKrmk43kvZzvvIzngrrkuobmgqjos6zmiLbnmoTlronlhajvvIzoq4vph43mlrDplovlp4tcIixcblx0XHR0eXBlMToge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLnlKjmiLbovLjlhaXkv6Hmga9cIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfL+S4gOizrOmAmueUqOaItuWQjVwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdFx0ZXJyb3I6IFwi5oKo55qE5omL5qmf6Jmf5oiW6K2J5Lu26Jmf6Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5ZCO6YeN5paw6Ly45YWlXCIsXG5cdFx0fSxcblx0XHR0eXBlMjoge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLmiYvmqZ/nn63kv6HpqZforYnnorxcIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6amX6K2J56K8XCIsXG5cdFx0XHRzdWJtaXQ6IFwi56K66KqNXCIsXG5cdFx0XHRlcnJvcjE6IFwi55+t5L+h6amX6K2J56K86Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5b6M6YeN5paw6Ly45YWlXCIsXG5cdFx0XHRlcnJvcjI6IFwi55+t5L+h6amX6K2J56K85bey57aT6YGO5pyf77yM6KuL6YeN5paw542y5Y+W6amX6K2J56K8XCIsXG5cdFx0XHRlcnJvcjM6IFwi55+t5L+h6aqM6K+B56CB5Y+R5pS+5pe26Ze05bCR5LqOMeWIhumSn++8jOivt+eojeWQjuWGjeivlVwiLFxuXHRcdH0sXG5cdFx0dHlwZTM6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueivOaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi5qC45bCN6Lqr5Lu96K2J5L+h5oGvXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdH0sXG5cdFx0dHlwZTQ6IHtcblx0XHRcdHRpdGxlOiBcIuiri+ioree9ruaWsOeahOWvhueivFwiLFxuXHRcdFx0dDE6IFwi5paw5a+G56K8XCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0dDI6IFwi56K66KqN5a+G56K8XCIsXG5cdFx0XHR0MlBsYWNlaG9sZGVyOiBcIuiri+mHjeaWsOi8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdFx0ZXJyb3IxOiBcIuWvhueivOmVt+W6puS4jeWwkeaWvDjkvY1cIixcblx0XHRcdGVycm9yMjogXCLlr4bnorzkuK3lv4XpoIjljIXlkKvmlbjlrZfjgIHlrZfnrKbku6Xlj4rnibnmroromZ/norxcIixcblx0XHR9XG5cdH0sXG5cdGluZm9tYXRpb25JbXByb3ZlOiB7XG5cdFx0dGl0bGU6IFwi6KuL5a6M5ZaE5oKo55qE5L+h5oGvXCIsXG5cdFx0dDE6IFwi5aeT5ZCNXCIsXG5cdFx0dDFQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0MjogXCLmgKfliKVcIixcblx0XHR0MlBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQzOiBcIuWHuueUn+aXpeacn1wiLFxuXHRcdHQzUGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0dDQ6IFwi6K2J5Lu26aGe5Z6LXCIsXG5cdFx0dDRQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0NTogXCLorYnku7bomZ/norxcIixcblx0XHR0NVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHN1Ym1pdDogXCLnorroqo1cIixcblx0XHRjYW5jZWw6IFwi6Lez6YGOXCIsXG5cdFx0Y2FuZGlkYXRlczoge1xuXHRcdFx0c2V4OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUt1wiLFxuXHRcdFx0XHR2YWx1ZTogXCJNXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLlpbNcIixcblx0XHRcdFx0dmFsdWU6IFwiRlwiXG5cdFx0XHR9XSxcblx0XHRcdGlkVHlwZTogW3tcblx0XHRcdFx0bmFtZTogXCLouqvku73orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiMVwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi6K2354WnXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjJcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIui7jeWumOitieaIluWjq+WFteitiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIzXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPpgJrooYzorYkv5Zue6YSJ6K2J5oiW5Y+w6IOe6K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjZcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWkluWci+S6uuawuOS5heWxheeVmei6q+S7veitiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIwXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPlj7DlsYXmsJHlsYXkvY/orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiVlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5Y+w54Gj5bGF5rCR5bGF5L2P6K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIldcIlxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdHN1Y2Nlc3NNc2cgOiBcIuabtOaWsOaIkOWKn1wiLFxuXHRcdGVycm9yVGlwczoge1xuXHRcdFx0ZTE6IFwi6KuL5aGr5a+r5aeT5ZCN5L+h5oGvXCIsXG5cdFx0XHRlMjogXCLoq4vpgbjmk4fmgKfliKVcIixcblx0XHRcdGUzOiBcIuiri+mBuOaTh+eUn+aXpVwiLFxuXHRcdFx0ZTQ6IFwi6KuL6YG45pOH6K2J5Lu26aGe5Z6LXCIsXG5cdFx0XHRlNTogXCLoq4vloavlr6vorYnku7bomZ/norxcIixcblx0XHRcdGU2OiBcIuaCqOWhq+Wvq+eahOitieS7tuiZn+eivOacieiqpFwiLFxuXHRcdFx0ZTc6IFwi5oKo5aGr5a+r55qE5L+h5oGv5pyJ6Kqk77yM6KuL5qC45a+m5b6M6YeN5paw5o+Q5LqkXCIsXG5cdFx0fVxuXHR9LFxuXHRpbmRleDoge1xuXHRcdG5ld3M6IFwi5paw6IGe6LOH6KiKXCIsXG5cdFx0bmV3TW9yZTogXCLmn6XnnIvmm7TlpJpcIixcblx0XHRyZWNvbW1lbmQ6IHtcblx0XHRcdGl0ZW0xOiB7XG5cdFx0XHRcdGJ0bjogXCLkuobop6Pmm7TlpJrnlKLlk4FcIixcblx0XHRcdFx0dDE6IFwi54K66Ieq5bex5ZKM5a625Lq65bCL5om+5aO55Lu95L+d6ZqcXCIsXG5cdFx0XHR9LFxuXHRcdFx0aXRlbTI6IHtcblx0XHRcdFx0YnRuOiBcIueri+WNs+mgkOe0hFwiLFxuXHRcdFx0XHR0MTogXCLlnKjnt5rpoJDntIQg5bCI5qWt5pyN5YuZXCIsXG5cdFx0XHR9LFxuXHRcdFx0aXRlbTM6IHtcblx0XHRcdFx0YnRuOiBcIuWuouaIt+acjeWKoVwiLFxuXHRcdFx0XHR0MTogXCLlsIjmpa3lrqLmnI3ngrrlprPmnI3li5lcIixcblx0XHRcdFx0dDI6IFwi5oOz5LqG6Kej5pu05aSa77yM5Y+v6Ie06Zu7XCIsXG5cdFx0XHRcdHQzOiBcIjk1NTExXCIsXG5cdFx0XHRcdHQ0OiBcIuiBr+e1oeaIkeWAke+8jOaIlumAsuWFpVwiLFxuXHRcdFx0fVxuXHRcdH0sXG5cdH0sXG5cdGNvbXBsYWludEFjY2VwdGFuY2U6IHtcblx0XHRuYW1lOiBcIuWnk+WQjVwiLFxuXHRcdG5hbWVQbGFjZWhvbGRlcjogXCLlp5PlkI1cIixcblx0XHRjb250YWN0VHlwZTogXCLoga/ntaHmlrnlvI9cIixcblx0XHRlbWFpbDogXCLpm7vpg7XlnLDlnYBcIixcblx0XHRxdWVzdGlvbjogXCLllY/poYzmiJbmhI/opotcIixcblx0XHRxdWVzdGlvblBsYWNlSG9sZGVyOiBcIu+8iOWtl+aVuOS4jei2hemBjjUwMOWtl++8iVwiLFxuXHRcdG9yZGVyTm86IFwi5L+d5Zau57eo6JmfXCIsXG5cdFx0b3JkZXJOb1BsYWNlSG9sZGVyOiBcIuWmguaCqOeCuuW5s+WuieWuouaItu+8jOiri+aPkOS+m+S/neWWrue3qOiZn1wiLFxuXHRcdGNvbnRhY3RUaW1lOiBcIuacn+acm+iBr+e1oeaZgumWk1wiLFxuXHRcdG5vdGljZTE6IFwi5pys6KGo5qC85omA5pS26ZuG55qE5YCL5Lq66LOH5paZ5qC55pOa44CM5bmz5a6J5Lq65aO96aaZ5riv5YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO44CN6JmV55CG5Y+K5Y+q5pyD6KKr55So5L2c5pa86IGv57WhIOmWo+S4i+S5i+eUqOOAgueEtuiAjOaJgOaUtumbhueahOWAi+S6uuizh+aWmeacque2k+aCqOaYjueiuuaOiOasiuWwh+S4jeacg+i9ieenu+iHs+OAjOW5s+WuieS6uuWjvemmmea4r+WAi+S6uuizh+aWmeaUtumbhuiBsuaYjuOAjeWIl+aYjuS7peWkluS5i+esrOS4ieiAheapn+ani+OAguaCqOWPr+mBuOaTh+S4jeWQkeaIkeWAkeaPkOS+m+aJgOmcgOeahOWAi+S6uuizh+aWme+8jOaDn+mAmeaoo+WPr+iDveWwjuiHtOaIkeWAkeS4jeiDveiBr+e1oeaCqOOAguaCqOS6puWPr+agueaTmuOAjOW5s+WuieS6uuWjvemmmea4r+WAi+S6uuizh+aWmeaUtumbhuiBsuaYjuOAjeS5i+asiuWIqeafpemWseWPiuabtOato+WAi+S6uuizh+aWmeOAglwiLFxuXHRcdG5vdGljZTI6IFwi5pys5Lq654++56K66KqN5piO55m95Lim5ZCM5oSP5pys5Lq655qE5YCL5Lq66LOH5paZ5qC55pOa5Lit6YqA5Lq65aO95YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO5L2c5Lul5LiK6L+w55So6YCU44CCXCIsXG5cdFx0Y29udGFjdFR5cGVzIDogWyfpm7voqbEnLCfpm7vpg7UnXSxcblx0XHRlcnJvclRpcHMgOiB7XG5cdFx0XHRlMSA6IFwi6KuL5aGr5a+r6Kmy6aCF5YWn5a65XCIsXG5cdFx0XHRlMiA6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr5pa55byPXCJcblx0XHR9LFxuXHR9LFxuXHRyZXNlcnZhdGlvbjoge1xuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0bmFtZVBsYWNlaG9sZGVyOiBcIuWnk+WQjVwiLFxuXHRcdGNvbnRhY3RUeXBlOiBcIuiBr+e1oeaWueW8j1wiLFxuXHRcdGNvbnRhY3Q6IFwi6IGv57Wh55S16K+dXCIsXG5cdFx0Y29udGFjdFBsYWNlaG9sZGVyOiBcIummmea4r+iZn+eivC/lhaflnLDomZ/norxcIixcblx0XHRyZXNlcnZhdGlvblR5cGU6IFwi6aCQ57SE6aGe5Z6LXCIsXG5cdFx0cmVzZXJ2YXRpb25SZW1hcms6IFwi6aCQ57SE6Kqq5piOXCIsXG5cdFx0cmVzZXJ2YXRpb25SZW1hcmtQbGFjZWhvbGRlcjogXCLoq4vnsKHllq7oqqrmmI7mgqjmg7PopoHlkqjoqaLnmoTnlKLlk4HmiJbmpa3li5lcIixcblx0XHRoa0NsaWVudDogXCLmmK/lkKblubPlronpppnmuK/lrqLmiLZcIixcblx0XHR5ZXM6IFwi5pivXCIsXG5cdFx0bm86IFwi5ZCmXCIsXG5cdFx0Y29udGFjdFRpbWU6IFwi5pyf5pyb6IGU57uc5pe26Ze0XCIsXG5cdFx0bm90aWNlMTogXCLmnKzooajmoLzmiYDmlLbpm4bnmoTkuKrkurrotYTmlpnmoLnmja7jgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3lpITnkIblj4rlj6rkvJrooqvnlKjkvZzkuo7ogZTnu5wg6ZiB5LiL5LmL55So44CC54S26ICM5omA5pS26ZuG55qE5Liq5Lq66LWE5paZ5pyq57uP5oKo5piO56Gu5o6I5p2D5bCG5LiN5Lya6L2s56e76Iez44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5YiX5piO5Lul5aSW5LmL56ys5LiJ6ICF5py65p6E44CC5oKo5Y+v6YCJ5oup5LiN5ZCR5oiR5Lus5o+Q5L6b5omA6ZyA55qE5Liq5Lq66LWE5paZ77yM5oOf6L+Z5qC35Y+v6IO95a+86Ie05oiR5Lus5LiN6IO96IGU57uc5oKo44CC5oKo5Lqm5Y+v5qC55o2u44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5LmL5p2D5Yip5p+l6ZiF5Y+K5pu05q2j5Liq5Lq66LWE5paZ44CCXCIsXG5cdFx0bm90aWNlMjogXCLmnKzkurrnjrDnoa7orqTmmI7nmb3lubblkIzmhI/mnKzkurrnmoTkuKrkurrotYTmlpnmoLnmja7kuK3pk7bkurrlr7/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7kvZzku6XkuIrov7DnlKjpgJTjgIJcIixcblx0fSxcblx0cGF5bWVudFR5cGU6IHtcblx0XHRtZW51MTogXCLopqroh6jlrqLmnI3kuK3lv4Pku5jmrL5cIixcblx0XHRtZW51MjogXCLnvZHpk7bku5jmrL5cIixcblx0XHRtZW51MzogXCLnlLXmsYfku5jmrL5cIixcblx0XHRtZW51NDogXCLmn5zlkZjmnLrku5jmrL5cIixcblx0XHRtZW51NTogXCLjgIznvLTotLnngbXjgI3ku5jmrL5cIixcblx0XHRtZW51NjogXCLpppnmuK/pgq7mlL/lsYBcIixcblx0fSxcblx0cHJvZHVjdDoge1xuXHRcdGJ0blBvc2l0aW9uOiBcIkJvb2tpbmcgc2VydmljZVwiLFxuXHRcdGljb25Qcm9ibGVtOiBcIkNvbW1vbiBwcm9ibGVtXCIsXG5cdFx0aWNvblByb2Nlc3M6IFwiSW5zdXJhbmNlIHByb2Nlc3NcIixcblx0XHRpY29uUHJvZHVjdDogXCJQcm9kdWN0IGRldGFpbHNcIlxuXHR9LFxuXHRjdXN0b21Qcm9kdWN0OiB7XG5cdFx0bWVudTE6IFwiQ29udGFjdCB1c1wiLFxuXHRcdG1lbnUyOiBcIlBheSBwcmVtaXVtXCIsXG5cdFx0bWVudTM6IFwiUXVlcnkgcG9saWN5XCIsXG5cdFx0bWVudTQ6IFwiQ2hhbmdlIHBvbGljeVwiLFxuXHRcdG1lbnU1OiBcIkNsYWltIHJlcG9ydFwiLFxuXHRcdG1lbnU2OiBcIlJlc2VydmF0aW9uIHNlcnZpY2VcIixcblx0XHRtZW51NzogXCJTdWdnZXN0aW9uc1wiLFxuXHRcdG1lbnU4OiBcIkNvbW1vbiBmb3JtXCIsXG5cdH0sXG5cdGNvbW1vbkZvcm06IHtcblx0XHRoZWFkMTogXCLooajmoLzpoZ7lnotcIixcblx0XHRoZWFkMjogXCLooajmoLzlkI3nqLFcIixcblx0XHRoZWFkMzogXCLkvb/nlKjoqqrmmI5cIixcblx0XHRoZWFkNDogXCLpmYTku7ZcIixcblx0XHRkb3dubG9hZDogXCLkuIvovInmlofmqpRcIixcblx0XHRmb3JtOiBbe1xuXHRcdFx0dHlwZTogXCLnubPosrvpoZ5cIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi44CM6Zu75a2Q5YWl6LOs5pyN5YuZ44CN5Y+K6YqA6KGM5oi25Y+jPGJyPuebtOaOpeS7mOasvuaOiOasiueUs+iri1wiLFxuXHRcdFx0XHRkZXNjOiBcIueUs+iri+ioreeri+OAjCDpm7vlrZDlhaXos6zmnI3li5njgI0g5Y+K6YqA6KGM5oi25Y+jPGJyPuebtOaOpeS7mOasvuaOiOasiuaZgumgiOaPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+h55So5Y2h5oi25Y+j55u05o6l5LuY5qy+5o6I5qyK5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi55Sz6KuL5L+h55So5Y2h5oi25Y+j55u05o6l5LuY5qy+5o6I5qyK5pmC6aCI5o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dHlwZTogXCLkv53llq7orormm7TpoZ5cIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6Kej6Zmk55Sz6KuL5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi6YCA5L+d44CB54y26LGr5pyf6YCA5L+d5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5L+d5Zau6LK45qy+6YKE5qy+6aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5L+d5Zau6LK45qy+44CB6YKE5qy+5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5L+d6Zqq5ZCI5ZCM6KiI5YqD6K6K5pu06aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Yqg5L+d44CB5rib5L+d44CB5paw5aKe6ZmE6Zqq44CB5b6p5pWI562J5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5a6i5oi25L+h5oGv6K6K5pu06aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Z+65pys5L+h5oGv6K6K5pu05qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmqrlkIjlkIzorormm7TnlLPoq4vmm7jvvIgg5a6i5oi25qyK55uK6K6K5pu06aGe77yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Lqk6LK75pa55byP44CB6Ieq5aKK6YG45pOH5qyK6K6K5pu044CB6KOc55m8562J5qWt5YuZ6YGp55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmjojmrIrlp5TmiZjmm7hcIixcblx0XHRcdFx0ZGVzYzogXCLlp5TmiZjku5bkurrku6PovqbmmYLpoIjmj5DkvptcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueoheaUtuiBsuaYjlwiLFxuXHRcdFx0XHRkZXNjOiBcIkNSU+imgeaxglwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5YGl5bq35ZGK55+lXCIsXG5cdFx0XHRcdGRlc2M6IFwi6aCI5LqM5qyh5qC45L+d55qE5qWt5YuZ6aCI5o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fVxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dHlwZTogXCLnkIbos6DpoZ5cIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55CG6LOg55Sz6KuL5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi57SZ6LOq55Sz6KuL55qE5oeJ5YKZ5paH5Lu2XCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdF1cblx0fSxcblx0cG9saWN5Q2hhbmdlR3VpZGU6IHtcblx0XHRub3RpY2U6IFwi5aaC6ZyA5YGa5YW25LuW5L+d5Zau6K6K5pu06IGv57mr5a6i5pyN77yI6IGv57mr5a6i5pyN6LaF6Y+I5o6l6Lez6L2J5YWs5Y+46IGv57mr5L+h5oGv6aCB77yJXCIsXG5cdFx0aGVhZDE6IFwi6aCF55uuXCIsXG5cdFx0aGVhZDI6IFwi5YW36auU5YWn5a65XCIsXG5cdFx0aGVhZDM6IFwi55Sz6KuL6LOH5qC85Lq6XCIsXG5cdFx0aGVhZDQ6IFwi5Y+X55CG5pmC6ZaTXCIsXG5cdFx0aGVhZDU6IFwi5oeJ5YKZ5p2Q5paZXCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6LyJ5paH5qqUXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHByb2plY3Q6IFwi6YCA5L+dXCIsXG5cdFx0XHRjb250ZW50OiBcIuWcqOeMtuixq+acn+W+jOino+mZpOWQiOWQjO+8jOWFrOWPuOWwh+mAgOmChOS/neWWruePvumHkeWDueWAvOaIluacqua7v+acn+WHiOS/neiyu+OAgu+8iOW+heeUouWTgeeyvueul+eiuuiqje+8iVwiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53llq7mlYjlipvntYLmraLliY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLkv53pmqrllq5cIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veitieS7tlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLlrZjmipjpk7booYzljaHnm7jlhbNcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIueMtuixq+acn+mAgOS/nVwiLFxuXHRcdFx0Y29udGVudDogXCLlnKjnjLbosavmnJ/lhafmj5Dlh7rop6PpmaTlkIjlkIzvvIzlhazlj7jmnIPnhKHmga/pgIDpgoTlhajpg6jkv53osrtcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi54y26LGr5pyf57WQ5p2f5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZauXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73orYnku7ZcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5a2Y5oqY6ZO26KGM5Y2h55u45YWzXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIummluacn+S/neiyu+eZvOelqFwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5a6i5oi26LOH5paZ6K6K5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00MlwiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLmipXkv53kurrjgIHlj5fkv53kurrjgIHlj5fnm4rkurrnmoTlgIvkurrkv6Hmga/orormm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuW/heimgeeahOitieaYjuadkOaWmVwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi6IGv57O75pa55byP6K6K5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00M1wiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLlnLDlnYDjgIHpm7voqbHnrYnkv6Hmga/nmoTorormm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veitieS7tlwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5Lqk6LK75pa55byP6K6K5pu0XCIsXG5cdFx0XHRjb250ZW50OiBcIuabtOaUueS/neWWrueahOe6jOacn+S6pOiyu+aWueW8j+aIluS6pOiyu+izrOiZn1wiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53llq7kuqTosrvmnJ/mu7/liY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLnlLPoq4vmm7hcIixcblx0XHRcdFx0dHlwZTogMSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZauXCIsXG5cdFx0XHR9XG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRwb2xpY3lDaGFuZ2VDb250YWN0OiB7XG5cdFx0cGhvbmU6IFwi6IGv57mr6Zu76KmxXCIsXG5cdFx0YWRkcmVzczogXCLoga/nuavlnLDlnYBcIixcblx0XHRlbWFpbDogXCJFLU1haWxcIixcblx0XHRjaGVja1RpcHM6IFwi5pys5Lq65LiN5ZCM5oSP5o6l5pS25a6j5YKz5L+h5oGvXCIsXG5cdFx0c3VibWl0OiBcIueiuuiqjeS/ruaUuVwiLFxuXHRcdGVycm9yVGlwcyA6IHtcblx0XHRcdGUxIDogXCLoq4vloavlr6vmraPnorrnmoToga/nuavpm7voqbFcIixcblx0XHRcdGUyIDogXCLoq4vloavlr6voga/nuavlnLDlnYBcIixcblx0XHRcdGUzIDogXCLoq4vloavlr6vmraPnorrnmoRFLU1haWzlnLDlnYBcIlxuXHRcdH1cblx0fSxcblx0cG9saWN5Q2hhbmdlSW5mb3JtYXRpb246IHtcblx0XHRoa0NsaWVudDogXCLmmK/lkKblubPlronpppnmuK/lrqLmiLZcIixcblx0XHR5ZXM6IFwi5pivXCIsXG5cdFx0bm86IFwi5ZCmXCIsXG5cdFx0b2JqOiBcIuiuiuabtOWwjeixoVwiLFxuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0c2V4OiBcIuaAp+WIq1wiLFxuXHRcdGJpcnRoOiBcIuWHuueUn+aXpeacn1wiLFxuXHRcdHR5cGU6IFwi6K2J5Lu26aGe5Z6LXCIsXG5cdFx0Tk86IFwi6K2J5Lu26Jmf56K8XCIsXG5cdFx0dmFsaWRpdHlQZXJpb2Q6IFwi6K2J5Lu25pyJ5pWI5pyfXCIsXG5cdFx0bmF0aW9uYWxpdHk6IFwi5ZyL57GNXCIsXG5cdFx0ZW1wbG95ZXI6IFwi5bel5L2c5Zau5L2NXCIsXG5cdFx0bWFyaXRhbFN0YXR1czogXCLlqZrlp7vni4Dms4FcIixcblx0XHRzdWJtaXQ6IFwi56K66KqN5L+u5pS5XCIsXG5cdFx0dXBsb2FkOiBcIumZhOS7tuS4iuWCs1wiLFxuXHRcdG1vZGlmeVRpcHMxOiBcIuWmgumcgOS/ruaUueiri1wiLFxuXHRcdG1vZGlmeVRpcHMyOiBcIuiBr+e5q+WuouacjVwiLFxuXHR9LFxuXHRjb250YWN0VXM6IHtcblx0XHRzZXJ2aWNlOiB7XG5cdFx0XHRjZW50ZXI6IHtcblx0XHRcdFx0dGl0bGU6IFwi5a6i5oi25pyN5YuZ5Lit5b+DXCIsXG5cdFx0XHRcdGFkZHJlc3M6IFwi5Zyw5Z2A77ya6aaZ5riv5bCW5rKZ5Zi05riv5aiB5rC46YeR6J6N5aSn5qiTXCIsXG5cdFx0XHRcdHRpbWU6IFwi5pyN5YuZ5pmC6ZaT77ya5pif5pyf5aO56Iez5LqUOTowMC0xODowMFwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdGxpbmU6IHtcblx0XHRcdFx0dGl0bGU6IFwi5a6i5oi25pyN5YuZ54ax57eaXCIsXG5cdFx0XHRcdGhrOiBcIummmea4r+iZn+eivO+8mig4NTIpMjk4MyA4ODY2XCIsXG5cdFx0XHRcdGNuOiBcIuWFp+WcsOiZn+eivO+8mig4Nik0MDA3OCA5NTUxMVwiLFxuXHRcdFx0XHR0aW1lOiBcIuacjeWLmeaZgumWk++8muaYn+acn+WjueiHs+S6lDk6MDAtMTg6MDBcIlxuXHRcdFx0fSxcblx0XHRcdG1haWw6IHtcblx0XHRcdFx0dGl0bGU6IFwi5a6i5oi25pyN5YuZ6Zu76YO1XCIsXG5cdFx0XHRcdG1haWw6IFwiY3NAcGluZ2FuLmNvbS5oa1wiXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRwdWxiaWM6IHtcblx0XHRcdHRpdGxlOiBcIuW+ruS/oeWFrOecvuiZn1wiLFxuXHRcdFx0bTE6IFwi55m76Zm444CM5b6u5L+h44CNQVBQ77yMIOaMieWPs+S4iuinkueahOOAjCvjgI3mjInpiJXkuKbpgbjmk4fjgIzmt7vliqDmnIvlj4vjgI3vvIzpgbjmk4fjgIzlhaznnL7omZ/jgI0g6Ly45YWl5Lim5pCc57Si44CM5bmz5a6J5Lq65aO96aaZ5riv44CNXCIsXG5cdFx0XHRtMjogXCLnmbvpmbjjgIzlvq7kv6HjgI1BUFDvvIwg5oyJ5Y+z5LiK6KeS55qE44CMK+OAjeaMiemIleS4pumBuOaTh+OAjOaOg+WjueaOg+OAjeaOg+aPj+S4i+aWueS6jOe2reeivO+8iOaUvue9ruS6jOe2reeivO+8iVwiXG5cdFx0fSxcblx0XHRxcmNvZGU6IHtcblx0XHRcdHRpdGxlOiBcIuWumOaWueWFrOecvuiZn1wiXG5cdFx0fVxuXHR9LFxuXHRjdXN0b21TZXJ2aWNlOiB7XG5cdFx0bmFtZTogXCJDdXN0b21lciBzZXJ2aWNlXCIsXG5cdFx0bWVudTE6IFwiQ29udGFjdCB1c1wiLFxuXHRcdG1lbnUyOiBcIlBheSBwcmVtaXVtXCIsXG5cdFx0bWVudTM6IFwiUXVlcnkgcG9saWN5XCIsXG5cdFx0bWVudTQ6IFwiQ2hhbmdlIHBvbGljeVwiLFxuXHRcdG1lbnU0MTogXCLkv53llq7orormm7TmjIflvJVcIixcblx0XHRtZW51NDI6IFwi6IGv57O75pa55byP6K6K5pu0XCIsXG5cdFx0bWVudTQzOiBcIuWuouaItuizh+aWmeiuiuabtFwiLFxuXHRcdG1lbnU1OiBcIkNsYWltIHJlcG9ydFwiLFxuXHRcdG1lbnU2OiBcIlJlc2VydmF0aW9uIHNlcnZpY2VcIixcblx0XHRtZW51NzogXCJTdWdnZXN0aW9uc1wiLFxuXHRcdG1lbnU4OiBcIkNvbW1vbiBmb3JtXCIsXG5cdFx0aW5zdXJhbmNlUXVlcnk6IHtcblx0XHRcdEluc3VyYW50TnVtYmVyOiBcIkluc3VyYW50IG51bWJlclwiLFxuXHRcdFx0SW5zdXJhbnQ6IFwiSW5zdXJhbnRcIixcblx0XHRcdEluc3VyYW50TmFtZTogXCJJbnN1cmFudCBuYW1lXCIsXG5cdFx0XHRJbnN1cmFudEFtb3VudDogXCJJbnN1cmFudCBhbW91bnRcIixcblx0XHRcdGVmZmVjdGl2ZURhdGU6IFwiRWZmZWN0aXZlIGRhdGVcIixcblx0XHRcdHBlcmlvZDogXCJHdWFyYW50ZWUgcGVyaW9kXCIsXG5cblx0XHRcdHQyVGl0bGU6IFwiR3VhcmFudGVlIGluZm9ybWF0aW9uXCIsXG5cdFx0XHR0Mkluc3VyYW50Q2xhc3NpZnk6IFwiTmFtZSBvZiBpbnN1cmFuY2VcIixcblx0XHRcdHQySW5zdXJhbnRBbW91bnQ6IFwiSW5zdXJlZCBhbW91bnRcIixcblxuXHRcdFx0dDNUaXRsZTogXCJDdXN0b21lciBpbmZvcm1hdGlvblwiLFxuXHRcdFx0dDNJbnN1cmFudE5hbWVDbjogXCJOYW1lIG9mIGFwcGxpY2FudCAoQ24pXCIsXG5cdFx0XHR0M0luc3VyYW50TmFtZUVuOiBcIk5hbWUgb2YgYXBwbGljYW50IChFbilcIixcblx0XHRcdHQzSW5zdXJhbnRJZE51bWJlcjogXCJJRCBOdW1iZXJcIixcblx0XHRcdHQzSW5zdXJhbnRDb250YWN0QWRkcmVzczogXCJDb250YWN0IGFkZHJlc3NcIixcblx0XHRcdHQzSW5zdXJhbnRBZGRyZXNzOiBcIkFkZHJlc3NcIixcblx0XHRcdHQzSW5zdXJhbnRNb2JpbGU6IFwibW9iaWxlXCIsXG5cdFx0XHR0M0luc3VyYW50RW1haWw6IFwiZW1haWxcIixcblx0XHRcdHQzSW5zdXJlZE5hbWVDbjogXCJOYW1lIG9mIGluc3VyZWQgKENuKVwiLFxuXHRcdFx0dDNJbnN1cmVkTmFtZUVuOiBcIk5hbWUgb2YgaW5zdXJlZCAoRW4pXCIsXG5cdFx0XHR0M0luc3VyZWRCaXJ0aGRheTogXCJCaXJ0aGRheVwiLFxuXHRcdFx0dDNJbnN1cmVkSWROdW1iZXI6IFwiSUQgTnVtYmVyXCIsXG5cblx0XHRcdHQ0VGl0bGU6IFwiQmVuZWZpY2lhcnkgaW5mb3JtYXRpb25cIixcblx0XHRcdHQ0TmFtZUNuOiBcIk5hbWUgKENuKVwiLFxuXHRcdFx0dDROYW1lRW46IFwiTmFtZSAoRW4pXCIsXG5cdFx0XHR0NFJlbGF0aW9uOiBcIuiIh+WPl+S/neS6uumXnOS/glwiLFxuXHRcdFx0dDRBbGxvY2F0aW9uOiBcIkRpc3RyaWJ1dGlvbiByYXRpb1wiLFxuXG5cdFx0XHR0NVRpdGxlOiBcIlBheW1lbnQgaW5mb3JtYXRpb25cIixcblx0XHRcdHQ1UGF5bWVudFBlcmlvZDogXCJQYXltZW50IHBlcmlvZFwiLFxuXHRcdFx0dDVQYXltZW50TWV0aG9kOiBcIlBheW1lbnQgbWV0aG9kXCIsXG5cdFx0XHR0NVBheW1lbnRDdXJyZW5jeTogXCJQYXltZW50IGN1cnJlbmN5XCIsXG5cdFx0XHR0NUN1cnJlbnRQcmVtaXVtOiBcIkN1cnJlbnQgcHJlbWl1bVwiLFxuXHRcdFx0dDVQYXltZW50QmFuazogXCJQYXltZW50IGJhbmtcIixcblx0XHRcdHQ1UGF5bWVudEFjY291bnQ6IFwiUGF5bWVudCBhY2NvdW50XCIsXG5cblx0XHRcdHQ2VGl0bGU6IFwiUGF5bWVudCByZWNvcmRcIixcblx0XHRcdHQ2UGF5bWVudFBlcmlvZDogXCJQYXltZW50IHBlcmlvZFwiLFxuXHRcdFx0dDZQYXltZW50TWV0aG9kOiBcIlBheW1lbnQgbWV0aG9kXCIsXG5cdFx0XHR0NkNsb3NpbmdEYXRlOiBcIkNsb3NpbmcgZGF0ZVwiLFxuXHRcdFx0dDZQYXltZW50QW1vdW50OiBcIlBheW1lbnQgYW1vdW50XCIsXG5cdFx0fSxcblx0XHRyZXNlcnZhdGlvbjoge1xuXHRcdFx0c3VibWl0QnRuOiAn56K66KqNJyxcblx0XHRcdGNvbnRhY3RUeXBlcyA6IFsn6Zu76KmxJ10sXG5cdFx0XHRyZXNlcnZhdGlvblR5cGVzOiBbJ+aKleS/neWSqOipoicsJ+S7o+i+puS/neWWruiuiuabtCddLFxuXHRcdFx0ZXJyb3JUaXBzIDoge1xuXHRcdFx0XHRlMSA6IFwi6KuL5aGr5a+r6Kmy6aCF5YWn5a65XCIsXG5cdFx0XHRcdGUyIDogXCLoq4vloavlr6vmraPnorrnmoToga/nuavmlrnlvI9cIlxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBcEJBO0FBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUEvQkE7QUFzQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRkE7QUFQQTtBQTVFQTtBQTJGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWZBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBbkJBO0FBZ0NBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBMUJBO0FBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUExQkE7QUFxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQTFCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQTlDQTtBQXdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVRBO0FBSEE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQWJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFQQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBckNBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBaEVBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQUlBO0FBREE7QUFmQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFJQTtBQURBO0FBSUE7QUFEQTtBQWxCQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQVRBO0FBekZBO0FBeUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFOQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBWkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQXZCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNDQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUExREE7QUF0bUJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/common/lang/en.js\n");
/***/ }),
/***/ "./src/common/lang/tc.js":
/*!*******************************!*\
!*** ./src/common/lang/tc.js ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = {\n message: {\n login: 'Login',\n Username: 'Username',\n Password: 'Password',\n Captcha: 'Captcha',\n Language: 'Language',\n zh: 'Chinese',\n en: 'English'\n },\n glbalTips: {\n sessionLost: \"為了更好的體驗,需要您登錄後再進行此操作\"\n },\n nav: {\n loginData: {\n name: \"登入\",\n path: \"\",\n list: [{\n name: \"註冊\",\n path: \"/register\",\n type: \"noAuth\",\n value: \"\"\n }, {\n name: \"登入\",\n path: \"/login\",\n type: \"noAuth\",\n value: \"\"\n }, {\n name: \"修改密碼\",\n path: \"/password/reset\",\n type: \"auth\",\n value: \"\"\n }, {\n name: \"登出\",\n path: \"\",\n type: \"auth\",\n value: \"logout\"\n }]\n },\n navList: [{\n name: \"產品介紹\",\n path: \"/product\",\n list: []\n }, {\n name: \"客戶服務\",\n path: \"/custom/product\",\n list: [{\n name: \"聯系我們\",\n path: \"/custom/service?q=m1\"\n }, {\n name: \"繳付保費\",\n path: \"/custom/service?q=m2\"\n }, {\n name: \"保單查詢\",\n path: \"/custom/service?q=m3\"\n }, {\n name: \"保單變更\",\n path: \"/custom/service?q=m41\"\n }, {\n name: \"理賠申請\",\n path: \"/custom/service?q=m5\"\n }, {\n name: \"預約服務\",\n path: \"/custom/service?q=m6\"\n }, {\n name: \"投訴受理\",\n path: \"/custom/service?q=m7\"\n }, {\n name: \"常用表格\",\n path: \"/custom/service?q=m8\"\n }]\n }, {\n name: \"新聞資訊\",\n path: \"/news/list\",\n list: []\n }, {\n name: \"關於平安人壽\",\n path: \"\",\n list: [{\n name: \"公司簡介\",\n path: \"/profile\"\n }, {\n name: \"領導人概況\",\n path: \"\"\n }]\n }]\n },\n footer: {\n hkPhone: \"客戶服務熱線(香港)\",\n cnPhone: \"客戶服務熱線(內地)\",\n aboutUs: \"關於我們\",\n companyIntroduction: \"公司介紹\",\n news: \"新聞資訊\",\n joinUs: \"加入我們\",\n helpCenter: \"幫助中心\",\n privacy: \"隱私政策\",\n terms: \"使用條款\",\n map: \"網站地圖\",\n contactUs: \"聯絡我們\",\n contactInformation: \"聯繫方式\",\n service: \"服務網點\",\n qrcode: \"官方公眾號\",\n copyright: \"版權所有 © 中國平安保險(集團)股份有限公司未經許可不得復制、轉載或摘編,違者必究!\"\n },\n login: {\n title: \"平安一賬通\",\n loginType1: \"賬密登錄\",\n loginType2: \"動態密碼登录\",\n account: \"賬號\",\n accountPlaceholder: \"請輸入證件號/一賬通用戶名/手機號\",\n password: \"密碼\",\n passwordPlaceholder: \"輸入登錄密碼\",\n verifyPlaceholder: \"請輸入驗證碼\",\n agree: \"同意\",\n protocol: \"《平安一賬通會員服務協議》\",\n login: \"登入\",\n register: \"註冊\",\n forget: \"忘記密碼\",\n mobile: \"手機號\",\n mobilePlaceholder: \"手機號\",\n verifyCode: \"驗證碼\",\n verifyCodePlaceholder: \"驗證碼\",\n verifyCodeGet: \"獲取驗證碼\",\n tips: {\n e1: \"請輸入賬號信息\",\n e2: \"請輸入密碼\",\n e3: \"請輸入圖像驗證碼\",\n e4: \"請同意《平安一賬通會員服務協議》\",\n e5: \"賬號或密碼不正確\",\n oe0: \"請輸入正確的手機號\",\n oe1: \"請先獲取短信驗證碼\",\n oe2: \"請輸入圖片驗證碼\",\n oe3: \"請輸入短信驗證碼\",\n oe4: \"短信驗證碼不正確\"\n }\n },\n register: {\n mobileOptions: [{\n type: \"hk\",\n name: \"香港手機號\",\n placeHolder: \"請輸入8位手機號碼\",\n areaCode: \"+852\"\n }, {\n type: \"zh\",\n name: \"大陸手機號\",\n placeHolder: \"請輸入11位手機號碼\",\n areaCode: \"+86\"\n }],\n coutTips: \"{second}秒後重新獲取\",\n title: \"歡迎註冊\",\n title2: \"請設置新的密碼\",\n mobilePlaceholder: \"請輸入8位手機號碼\",\n verifyCodePlaceholder: \"請輸入驗證碼\",\n verifyCodeGet: \"獲取驗證碼\",\n agree: \"同意\",\n protocol: \"《平安一賬通會員服務協議》\",\n register: \"點擊註冊\",\n newPassword: \"新密碼\",\n newPasswordPlaceholder: \"輸入登錄密碼\",\n newPasswordSure: \"確認密碼\",\n newPasswordSurePlaceholder: \"輸入登錄密碼\",\n sure: \"確認\",\n tips: {\n e1: \"手機號不正確,請輸入正確的手機號\",\n e2: \"請同意《平安一賬通會員服務協議》\",\n e3: \"短信驗證碼不正確\",\n e4: \"請先獲取短信驗證碼\",\n e5: \"手機號已經被註冊,請使用其他手機號註冊或直接登錄\",\n e6: \"請輸入圖片驗證碼\",\n e7: \"密碼長度不能少於8位\",\n e8: \"密碼中必須包含數字、字符以及特殊號碼\",\n e9: \"兩次密碼不一致,請確認後重新輸入\",\n e10: \"驗證碼過期,請重新申請驗證碼\",\n e11: \"註冊失敗,請聯繫工作人員\",\n e12: \"註冊成功\"\n }\n },\n session: {\n sidExpire: \"長時間未操作,為了您賬戶的安全,請登錄後再操作\"\n },\n passwordCheck: {\n error1: \"密碼長度不少於8位\",\n error2: \"密碼中必須包含數字、字符以及特殊號碼\",\n error3: \"兩次密碼不一致,請確認後重新輸入\",\n error4: \"密碼修改失敗,請稍後再試,或撥打客服電話95511解決\",\n error5: \"舊密碼不正確,請重新輸入\",\n success: \"密碼修改成功\"\n },\n passwordReset: {\n oldPwd: \"舊密碼\",\n oldPwdPlaceholde: \"請輸入舊密碼\",\n cidExpire: \"長時間未操作,為了您賬戶的安全,請重新開始\",\n type1: {\n title: \"密碼找回\",\n t1: \"用戶輸入信息\",\n t1Placeholder: \"手機號/證件號\",\n submit: \"確認\",\n error: \"您的手機號或證件號輸入錯誤,請核對后重新輸入\"\n },\n type2: {\n title: \"密碼找回\",\n t1: \"手機短信驗證碼\",\n t1Placeholder: \"請輸入驗證碼\",\n submit: \"確認\",\n error1: \"短信驗證碼輸入錯誤,請核對後重新輸入\",\n error2: \"短信驗證碼已經過期,請重新獲取驗證碼\",\n error3: \"短信驗證碼發放時間少於1分鐘,請稍後再試\"\n },\n type3: {\n title: \"密碼找回\",\n t1: \"核對身份證信息\",\n t1Placeholder: \"\",\n submit: \"確認\"\n },\n type4: {\n title: \"請設置新的密碼\",\n t1: \"新密碼\",\n t1Placeholder: \"請輸入新密碼\",\n t2: \"確認密碼\",\n t2Placeholder: \"請重新輸入新密碼\",\n submit: \"確認\"\n }\n },\n infomationImprove: {\n title: \"請完善您的信息\",\n t1: \"姓名\",\n t1Placeholder: \"\",\n t2: \"性別\",\n t2Placeholder: \"\",\n t3: \"出生日期\",\n t3Placeholder: \"\",\n t4: \"證件類型\",\n t4Placeholder: \"\",\n t5: \"證件號碼\",\n t5Placeholder: \"\",\n submit: \"確認\",\n cancel: \"跳過\",\n candidates: {\n sex: [{\n name: \"男\",\n value: \"M\"\n }, {\n name: \"女\",\n value: \"F\"\n }],\n idType: [{\n name: \"身份證\",\n value: \"1\"\n }, {\n name: \"護照\",\n value: \"2\"\n }, {\n name: \"軍官證或士兵證\",\n value: \"3\"\n }, {\n name: \"港澳通行證/回鄉證或台胞證\",\n value: \"6\"\n }, {\n name: \"外國人永久居留身份證\",\n value: \"0\"\n }, {\n name: \"港澳台居民居住證\",\n value: \"V\"\n }, {\n name: \"台灣居民居住證\",\n value: \"W\"\n }]\n },\n successMsg: \"更新成功\",\n errorTips: {\n e1: \"請填寫姓名信息\",\n e2: \"請選擇性別\",\n e3: \"請選擇生日\",\n e4: \"請選擇證件類型\",\n e5: \"請填寫證件號碼\",\n e6: \"您填寫的證件號碼有誤\",\n e7: \"您填寫的信息有誤,請核實後重新提交\"\n }\n },\n index: {\n news: \"新聞資訊\",\n newMore: \"查看更多\",\n recommend: {\n item1: {\n btn: \"了解更多產品\",\n t1: \"為自己和家人尋找壹份保障\"\n },\n item2: {\n btn: \"立即預約\",\n t1: \"在線預約 專業服務\"\n },\n item3: {\n btn: \"客戶服務\",\n t1: \"專業客服為妳服務\",\n t2: \"想了解更多,可致電\",\n t3: \"95511\",\n t4: \"聯絡我們,或進入\"\n }\n }\n },\n complaintAcceptance: {\n name: \"姓名\",\n namePlaceholder: \"姓名\",\n contactType: \"聯絡方式\",\n email: \"電郵地址\",\n question: \"問題或意見\",\n questionPlaceHolder: \"(字數不超過500字)\",\n orderNo: \"保單編號\",\n orderNoPlaceHolder: \"如您為平安客戶,請提供保單編號\",\n contactTime: \"期望聯絡時間\",\n notice1: \"本表格所收集的個人資料根據「平安人壽香港個人資料收集聲明」處理及只會被用作於聯絡 閣下之用。然而所收集的個人資料未經您明確授權將不會轉移至「平安人壽香港個人資料收集聲明」列明以外之第三者機構。您可選擇不向我們提供所需的個人資料,惟這樣可能導致我們不能聯絡您。您亦可根據「平安人壽香港個人資料收集聲明」之權利查閱及更正個人資料。\",\n notice2: \"本人現確認明白並同意本人的個人資料根據中銀人壽個人資料收集聲明作以上述用途。\",\n contactTypes: ['電話', '電郵'],\n errorTips: {\n e1: \"請填寫該項內容\",\n e2: \"請填寫正確的聯繫方式\"\n }\n },\n reservation: {\n name: \"姓名\",\n namePlaceholder: \"姓名\",\n contactType: \"聯絡方式\",\n contact: \"聯絡電話\",\n contactPlaceholder: \"香港號碼/內地號碼\",\n reservationType: \"預約類型\",\n reservationRemark: \"預約說明\",\n reservationRemarkPlaceholder: \"請簡單說明您想要咨詢的產品或業務\",\n hkClient: \"是否平安香港客戶\",\n yes: \"是\",\n no: \"否\",\n contactTime: \"期望聯絡時間\",\n notice1: \"本表格所收集的個人資料根據「平安人壽香港個人資料收集聲明」處理及只會被用作於聯絡 閣下之用。然而所收集的個人資料未經您明確授權將不會轉移至「平安人壽香港個人資料收集聲明」列明以外之第三者機構。您可選擇不向我們提供所需的個人資料,惟這樣可能導致我們不能聯絡您。您亦可根據「平安人壽香港個人資料收集聲明」之權利查閱及更正個人資料。\",\n notice2: \"本人現確認明白並同意本人的個人資料根據中銀人壽個人資料收集聲明作以上述用途。\"\n },\n paymentType: {\n menu1: \"親臨客服中心付款\",\n menu2: \"網銀付款\",\n menu3: \"電匯付款\",\n menu4: \"櫃員機付款\",\n menu5: \"「繳費靈」付款\",\n menu6: \"香港郵政局\"\n },\n product: {\n btnPosition: \"預約服務\",\n iconProblem: \"常見問題\",\n iconProcess: \"投保流程\",\n iconProduct: \"產品詳情\"\n },\n customProduct: {\n menu1: \"聯繫我們\",\n menu2: \"繳付保費\",\n menu3: \"保單查詢\",\n menu4: \"保單變更\",\n menu5: \"理賠申請\",\n menu6: \"預約服務\",\n menu7: \"投訴受理\",\n menu8: \"常用表格\"\n },\n commonForm: {\n head1: \"表格類型\",\n head2: \"表格名稱\",\n head3: \"使用說明\",\n head4: \"附件\",\n download: \"下載文檔\",\n form: [{\n type: \"繳費類\",\n list: [{\n name: \"「電子入賬服務」及銀行戶口<br>直接付款授權申請\",\n desc: \"申請設立「 電子入賬服務」 及銀行戶口<br>直接付款授權時須提供\",\n download: \"\"\n }, {\n name: \"信用卡戶口直接付款授權書\",\n desc: \"申請信用卡戶口直接付款授權時須提供\",\n download: \"\"\n }]\n }, {\n type: \"保單變更類\",\n list: [{\n name: \"保險合同解除申請書\",\n desc: \"退保、猶豫期退保業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 保單貸款還款類)\",\n desc: \"保單貸款、還款業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 保險合同計劃變更類)\",\n desc: \"加保、減保、新增附險、復效等業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 客戶信息變更類)\",\n desc: \"基本信息變更業務適用\",\n download: \"\"\n }, {\n name: \"保險合同變更申請書( 客戶權益變更類)\",\n desc: \"交費方式、自墊選擇權變更、補發等業務適用\",\n download: \"\"\n }, {\n name: \"授權委托書\",\n desc: \"委托他人代辦時須提供\",\n download: \"\"\n }, {\n name: \"稅收聲明\",\n desc: \"CRS要求\",\n download: \"\"\n }, {\n name: \"健康告知\",\n desc: \"須二次核保的業務須提供\",\n download: \"\"\n }]\n }, {\n type: \"理賠類\",\n list: [{\n name: \"理賠申請書\",\n desc: \"紙質申請的應備文件\",\n download: \"\"\n }]\n }]\n },\n policyChangeGuide: {\n notice: \"如需做其他保單變更聯繫客服(聯繫客服超鏈接跳轉公司聯繫信息頁)\",\n head1: \"項目\",\n head2: \"具體內容\",\n head3: \"申請資格人\",\n head4: \"受理時間\",\n head5: \"應備材料\",\n download: \"下載文檔\",\n form: [{\n project: \"退保\",\n content: \"在猶豫期後解除合同,公司將退還保單現金價值或未滿期凈保費。(待產品精算確認)\",\n applicant: \"投保人\",\n receptionTime: \"保單效力終止前\",\n materialList: [{\n name: \"保險單\"\n }, {\n name: \"申請書\",\n type: 1\n }, {\n name: \"投保人有效身份證件\"\n }, {\n name: \"存折银行卡相关\"\n }]\n }, {\n project: \"猶豫期退保\",\n content: \"在猶豫期內提出解除合同,公司會無息退還全部保費\",\n applicant: \"投保人\",\n receptionTime: \"猶豫期結束前\",\n materialList: [{\n name: \"保險單\"\n }, {\n name: \"申請書\",\n type: 1\n }, {\n name: \"投保人有效身份證件\"\n }, {\n name: \"存折银行卡相关\"\n }, {\n name: \"首期保費發票\"\n }]\n }, {\n project: \"客戶資料變更\",\n projectType: 1,\n path: \"/custom/service\",\n query: {\n q: \"m42\"\n },\n content: \"投保人、受保人、受益人的個人信息變更\",\n applicant: \"投保人\",\n receptionTime: \"不限\",\n materialList: [{\n name: \"申請書\",\n type: 1\n }, {\n name: \"必要的證明材料\"\n }]\n }, {\n project: \"聯系方式變更\",\n projectType: 1,\n path: \"/custom/service\",\n query: {\n q: \"m43\"\n },\n content: \"地址、電話等信息的變更\",\n applicant: \"投保人\",\n receptionTime: \"不限\",\n materialList: [{\n name: \"申請書\",\n type: 1\n }, {\n name: \"投保人有效身份證件\"\n }]\n }, {\n project: \"交費方式變更\",\n content: \"更改保單的續期交費方式或交費賬號\",\n applicant: \"投保人\",\n receptionTime: \"保單交費期滿前\",\n materialList: [{\n name: \"申請書\",\n type: 1\n }, {\n name: \"保險單\"\n }]\n }]\n },\n policyChangeContact: {\n phone: \"聯繫電話\",\n address: \"聯繫地址\",\n email: \"E-Mail\",\n checkTips: \"本人不同意接收宣傳信息\",\n submit: \"確認修改\",\n errorTips: {\n e1: \"請填寫正確的聯繫電話\",\n e2: \"請填寫聯繫地址\",\n e3: \"請填寫正確的E-Mail地址\"\n }\n },\n policyChangeInformation: {\n hkClient: \"是否平安香港客戶\",\n yes: \"是\",\n no: \"否\",\n obj: \"變更對象\",\n name: \"姓名\",\n sex: \"性别\",\n birth: \"出生日期\",\n type: \"證件類型\",\n NO: \"證件號碼\",\n validityPeriod: \"證件有效期\",\n nationality: \"國籍\",\n employer: \"工作單位\",\n maritalStatus: \"婚姻狀況\",\n submit: \"確認修改\",\n upload: \"附件上傳\",\n modifyTips1: \"如需修改請\",\n modifyTips2: \"聯繫客服\"\n },\n contactUs: {\n service: {\n center: {\n title: \"客戶服務中心\",\n address: \"地址:香港尖沙嘴港威永金融大樓\",\n time: \"服務時間:星期壹至五9:00-18:00\"\n },\n hotline: {\n title: \"客戶服務熱線\",\n hk: \"香港號碼:(852)2983 8866\",\n cn: \"內地號碼:(86)40078 95511\",\n time: \"服務時間:星期壹至五9:00-18:00\"\n },\n mail: {\n title: \"客戶服務電郵\",\n mail: \"cs@pingan.com.hk\"\n }\n },\n pulbic: {\n title: \"微信公眾號\",\n m1: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「添加朋友」,選擇「公眾號」 輸入並搜索「平安人壽香港」\",\n m2: \"登陸「微信」APP, 按右上角的「+」按鈕並選擇「掃壹掃」掃描下方二維碼(放置二維碼)\"\n },\n qrcode: {\n title: \"官方公眾號\"\n }\n },\n customService: {\n name: \"客戶服務\",\n menu1: \"聯繫我們\",\n menu2: \"繳付保費\",\n menu3: \"保單查詢\",\n menu4: \"保單變更\",\n menu41: \"保單變更指引\",\n menu42: \"聯系方式變更\",\n menu43: \"客戶資料變更\",\n menu5: \"理賠申請\",\n menu6: \"預約服務\",\n menu7: \"投訴受理\",\n menu8: \"常用表格\",\n insuranceQuery: {\n InsurantNumber: \"保單號碼\",\n Insurant: \"受保人\",\n InsurantName: \"險種名稱\",\n InsurantAmount: \"保額\",\n effectiveDate: \"保費到期日\",\n period: \"保障年期\",\n t2Title: \"保障內容\",\n t2InsurantClassify: \"險種名稱\",\n t2InsurantAmount: \"保額\",\n t3Title: \"客戶資料\",\n t3InsurantNameCn: \"投保人姓名(中文)\",\n t3InsurantNameEn: \"投保人姓名(英文)\",\n t3InsurantIdNumber: \"證件號碼\",\n t3InsurantContactAddress: \"聯繫地址\",\n t3InsurantAddress: \"居住地址\",\n t3InsurantMobile: \"手提電話\",\n t3InsurantEmail: \"電子郵箱\",\n t3InsuredNameCn: \"受保人姓名(中文)\",\n t3InsuredNameEn: \"受保人姓名(英文)\",\n t3InsuredBirthday: \"出生日期\",\n t3InsuredIdNumber: \"證件號碼\",\n t4Title: \"受益人資料\",\n // t4BeneficiaryInformation\n t4NameCn: \"姓名(中文)\",\n t4NameEn: \"姓名(英文)\",\n t4Relation: \"與受保人關係\",\n t4Allocation: \"分配比例\",\n t5Title: \"繳費資料\",\n t5PaymentPeriod: \"續費年期\",\n t5PaymentMethod: \"繳費方式\",\n t5PaymentCurrency: \"繳費幣種\",\n t5CurrentPremium: \"當期保費\",\n t5PaymentBank: \"繳費銀行\",\n t5PaymentAccount: \"繳費帳號\",\n t6Title: \"繳費記錄\",\n t6PaymentPeriod: \"繳費期\",\n t6PaymentMethod: \"繳費方式\",\n t6ClosingDate: \"實收日期\",\n t6PaymentAmount: \"繳費金額\"\n },\n reservation: {\n submitBtn: '確認',\n contactTypes: ['電話'],\n reservationTypes: ['投保咨詢', '代辦保單變更'],\n errorTips: {\n e1: \"請填寫該項內容\",\n e2: \"請填寫正確的聯繫方式\"\n }\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tbW9uL2xhbmcvdGMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tbW9uL2xhbmcvdGMuanM/ZDNmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcblx0bWVzc2FnZToge1xuXHRcdGxvZ2luOiAnTG9naW4nLFxuXHRcdFVzZXJuYW1lOiAnVXNlcm5hbWUnLFxuXHRcdFBhc3N3b3JkOiAnUGFzc3dvcmQnLFxuXHRcdENhcHRjaGE6ICdDYXB0Y2hhJyxcblx0XHRMYW5ndWFnZTogJ0xhbmd1YWdlJyxcblx0XHR6aDogJ0NoaW5lc2UnLFxuXHRcdGVuOiAnRW5nbGlzaCdcblx0fSxcblx0Z2xiYWxUaXBzIDoge1xuXHRcdHNlc3Npb25Mb3N0IDogXCLngrrkuobmm7Tlpb3nmoTpq5TpqZfvvIzpnIDopoHmgqjnmbvpjITlvozlho3pgLLooYzmraTmk43kvZxcIlxuXHR9LFxuXHRuYXY6IHtcblx0XHRsb2dpbkRhdGE6IHtcblx0XHRcdG5hbWU6IFwi55m75YWlXCIsXG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLoqLvlhopcIixcblx0XHRcdFx0cGF0aDogXCIvcmVnaXN0ZXJcIixcblx0XHRcdFx0dHlwZTogXCJub0F1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwiXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLnmbvlhaVcIixcblx0XHRcdFx0cGF0aDogXCIvbG9naW5cIixcblx0XHRcdFx0dHlwZTogXCJub0F1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwiXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+u5pS55a+G56K8XCIsXG5cdFx0XHRcdHBhdGg6IFwiL3Bhc3N3b3JkL3Jlc2V0XCIsXG5cdFx0XHRcdHR5cGU6IFwiYXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnmbvlh7pcIixcblx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0dHlwZTogXCJhdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcImxvZ291dFwiXG5cdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHRuYXZMaXN0OiBbe1xuXHRcdFx0bmFtZTogXCLnlKLlk4Hku4vntLlcIixcblx0XHRcdHBhdGg6IFwiL3Byb2R1Y3RcIixcblx0XHRcdGxpc3Q6IFtdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIuWuouaItuacjeWLmVwiLFxuXHRcdFx0cGF0aDogXCIvY3VzdG9tL3Byb2R1Y3RcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi6IGv57O75oiR5YCRXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTFcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnubPku5jkv53osrtcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tMlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/neWWruafpeipolwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0zXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d5Zau6K6K5pu0XCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTQxXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi55CG6LOg55Sz6KuLXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLpoJDntITmnI3li5lcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleiotOWPl+eQhlwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW03XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5bi455So6KGo5qC8XCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bThcIlxuXHRcdFx0fSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwi5paw6IGe6LOH6KiKXCIsXG5cdFx0XHRwYXRoOiBcIi9uZXdzL2xpc3RcIixcblx0XHRcdGxpc3Q6IFtdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRuYW1lOiBcIumXnOaWvOW5s+WuieS6uuWjvVwiLFxuXHRcdFx0cGF0aDogXCJcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5YWs5Y+457Ch5LuLXCIsXG5cdFx0XHRcdHBhdGg6IFwiL3Byb2ZpbGVcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLpoJjlsI7kurrmpoLms4FcIixcblx0XHRcdFx0cGF0aDogXCJcIlxuXHRcdFx0fSxcblx0XHRcdF1cblx0XHR9LFxuXHRcdF1cblx0fSxcblx0Zm9vdGVyOiB7XG5cdFx0aGtQaG9uZTogXCLlrqLmiLbmnI3li5nnhrHnt5rvvIjpppnmuK/vvIlcIixcblx0XHRjblBob25lOiBcIuWuouaItuacjeWLmeeGsee3mu+8iOWFp+WcsO+8iVwiLFxuXHRcdGFib3V0VXM6IFwi6Zec5pa85oiR5YCRXCIsXG5cdFx0Y29tcGFueUludHJvZHVjdGlvbjogXCLlhazlj7jku4vntLlcIixcblx0XHRuZXdzOiBcIuaWsOiBnuizh+ioilwiLFxuXHRcdGpvaW5VczogXCLliqDlhaXmiJHlgJFcIixcblx0XHRoZWxwQ2VudGVyOiBcIuW5q+WKqeS4reW/g1wiLFxuXHRcdHByaXZhY3k6IFwi6Zqx56eB5pS/562WXCIsXG5cdFx0dGVybXM6IFwi5L2/55So5qKd5qy+XCIsXG5cdFx0bWFwOiBcIue2suermeWcsOWcllwiLFxuXHRcdGNvbnRhY3RVczogXCLoga/ntaHmiJHlgJFcIixcblx0XHRjb250YWN0SW5mb3JtYXRpb246IFwi6IGv57mr5pa55byPXCIsXG5cdFx0c2VydmljZTogXCLmnI3li5nntrLpu55cIixcblx0XHRxcmNvZGU6IFwi5a6Y5pa55YWs55y+6JmfXCIsXG5cdFx0Y29weXJpZ2h0OiBcIueJiOasiuaJgOaciSDCqSDkuK3lnIvlubPlronkv53pmqrvvIjpm4blnJjvvInogqHku73mnInpmZDlhazlj7jmnKrntpPoqLHlj6/kuI3lvpflvqnliLbjgIHovYnovInmiJbmkZjnt6jvvIzpgZXogIXlv4XnqbYhXCJcblx0fSxcblx0bG9naW46IHtcblx0XHR0aXRsZTogXCLlubPlronkuIDos6zpgJpcIixcblx0XHRsb2dpblR5cGUxOiBcIuizrOWvhueZu+mMhFwiLFxuXHRcdGxvZ2luVHlwZTI6IFwi5YuV5oWL5a+G56K855m75b2VXCIsXG5cdFx0YWNjb3VudDogXCLos6zomZ9cIixcblx0XHRhY2NvdW50UGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6K2J5Lu26JmfL+S4gOizrOmAmueUqOaItuWQjS/miYvmqZ/omZ9cIixcblx0XHRwYXNzd29yZDogXCLlr4bnorxcIixcblx0XHRwYXNzd29yZFBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHZlcmlmeVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpempl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOizrOmAmuacg+WToeacjeWLmeWNlOitsOOAi1wiLFxuXHRcdGxvZ2luOiBcIueZu+WFpVwiLFxuXHRcdHJlZ2lzdGVyOiBcIuiou+WGilwiLFxuXHRcdGZvcmdldDogXCLlv5joqJjlr4bnorxcIixcblx0XHRtb2JpbGU6IFwi5omL5qmf6JmfXCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfXCIsXG5cdFx0dmVyaWZ5Q29kZTogXCLpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlUGxhY2Vob2xkZXI6IFwi6amX6K2J56K8XCIsXG5cdFx0dmVyaWZ5Q29kZUdldDogXCLnjbLlj5bpqZforYnnorxcIixcblx0XHR0aXBzOiB7XG5cdFx0XHRlMTogXCLoq4vovLjlhaXos6zomZ/kv6Hmga9cIixcblx0XHRcdGUyOiBcIuiri+i8uOWFpeWvhueivFwiLFxuXHRcdFx0ZTM6IFwi6KuL6Ly45YWl5ZyW5YOP6amX6K2J56K8XCIsXG5cdFx0XHRlNDogXCLoq4vlkIzmhI/jgIrlubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbDjgItcIixcblx0XHRcdGU1OiBcIuizrOiZn+aIluWvhueivOS4jeato+eiulwiLFxuXHRcdFx0b2UwOiBcIuiri+i8uOWFpeato+eiuueahOaJi+apn+iZn1wiLFxuXHRcdFx0b2UxOiBcIuiri+WFiOeNsuWPluefreS/oempl+itieeivFwiLFxuXHRcdFx0b2UyOiBcIuiri+i8uOWFpeWclueJh+mpl+itieeivFwiLFxuXHRcdFx0b2UzOiBcIuiri+i8uOWFpeefreS/oempl+itieeivFwiLFxuXHRcdFx0b2U0OiBcIuefreS/oempl+itieeivOS4jeato+eiulwiLFxuXHRcdH0sXG5cdH0sXG5cdHJlZ2lzdGVyOiB7XG5cdFx0bW9iaWxlT3B0aW9uczogW3tcblx0XHRcdHR5cGU6IFwiaGtcIixcblx0XHRcdG5hbWU6IFwi6aaZ5riv5omL5qmf6JmfXCIsXG5cdFx0XHRwbGFjZUhvbGRlcjogXCLoq4vovLjlhaU45L2N5omL5qmf6Jmf56K8XCIsXG5cdFx0XHRhcmVhQ29kZTogXCIrODUyXCJcblx0XHR9LCB7XG5cdFx0XHR0eXBlOiBcInpoXCIsXG5cdFx0XHRuYW1lOiBcIuWkp+mZuOaJi+apn+iZn1wiLFxuXHRcdFx0cGxhY2VIb2xkZXI6IFwi6KuL6Ly45YWlMTHkvY3miYvmqZ/omZ/norxcIixcblx0XHRcdGFyZWFDb2RlOiBcIis4NlwiXG5cdFx0fV0sXG5cdFx0Y291dFRpcHM6IFwie3NlY29uZH3np5Llvozph43mlrDnjbLlj5ZcIixcblx0XHR0aXRsZTogXCLmraHov47oqLvlhopcIixcblx0XHR0aXRsZTI6IFwi6KuL6Kit572u5paw55qE5a+G56K8XCIsXG5cdFx0bW9iaWxlUGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWlOOS9jeaJi+apn+iZn+eivFwiLFxuXHRcdHZlcmlmeUNvZGVQbGFjZWhvbGRlcjogXCLoq4vovLjlhaXpqZforYnnorxcIixcblx0XHR2ZXJpZnlDb2RlR2V0OiBcIueNsuWPlumpl+itieeivFwiLFxuXHRcdGFncmVlOiBcIuWQjOaEj1wiLFxuXHRcdHByb3RvY29sOiBcIuOAiuW5s+WuieS4gOizrOmAmuacg+WToeacjeWLmeWNlOitsOOAi1wiLFxuXHRcdHJlZ2lzdGVyOiBcIum7nuaTiuiou+WGilwiLFxuXHRcdG5ld1Bhc3N3b3JkOiBcIuaWsOWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkUGxhY2Vob2xkZXI6IFwi6Ly45YWl55m76YyE5a+G56K8XCIsXG5cdFx0bmV3UGFzc3dvcmRTdXJlOiBcIueiuuiqjeWvhueivFwiLFxuXHRcdG5ld1Bhc3N3b3JkU3VyZVBsYWNlaG9sZGVyOiBcIui8uOWFpeeZu+mMhOWvhueivFwiLFxuXHRcdHN1cmU6IFwi56K66KqNXCIsXG5cdFx0dGlwczoge1xuXHRcdFx0ZTE6IFwi5omL5qmf6Jmf5LiN5q2j56K677yM6KuL6Ly45YWl5q2j56K655qE5omL5qmf6JmfXCIsXG5cdFx0XHRlMjogXCLoq4vlkIzmhI/jgIrlubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbDjgItcIixcblx0XHRcdGUzOiBcIuefreS/oempl+itieeivOS4jeato+eiulwiLFxuXHRcdFx0ZTQ6IFwi6KuL5YWI542y5Y+W55+t5L+h6amX6K2J56K8XCIsXG5cdFx0XHRlNTogXCLmiYvmqZ/omZ/lt7LntpPooqvoqLvlhorvvIzoq4vkvb/nlKjlhbbku5bmiYvmqZ/omZ/oqLvlhormiJbnm7TmjqXnmbvpjIRcIixcblx0XHRcdGU2OiBcIuiri+i8uOWFpeWclueJh+mpl+itieeivFwiLFxuXHRcdFx0ZTc6IFwi5a+G56K86ZW35bqm5LiN6IO95bCR5pa8OOS9jVwiLFxuXHRcdFx0ZTg6IFwi5a+G56K85Lit5b+F6aCI5YyF5ZCr5pW45a2X44CB5a2X56ym5Lul5Y+K54m55q6K6Jmf56K8XCIsXG5cdFx0XHRlOTogXCLlhanmrKHlr4bnorzkuI3kuIDoh7TvvIzoq4vnorroqo3lvozph43mlrDovLjlhaVcIixcblx0XHRcdGUxMDogXCLpqZforYnnorzpgY7mnJ/vvIzoq4vph43mlrDnlLPoq4vpqZforYnnorxcIixcblx0XHRcdGUxMTogXCLoqLvlhorlpLHmlZfvvIzoq4voga/nuavlt6XkvZzkurrlk6FcIixcblx0XHRcdGUxMjogXCLoqLvlhormiJDlip9cIixcblx0XHR9XG5cdH0sXG5cdHNlc3Npb246IHtcblx0XHRzaWRFeHBpcmU6IFwi6ZW35pmC6ZaT5pyq5pON5L2c77yM54K65LqG5oKo6LOs5oi255qE5a6J5YWo77yM6KuL55m76YyE5b6M5YaN5pON5L2cXCIsXG5cdH0sXG5cdHBhc3N3b3JkQ2hlY2s6IHtcblx0XHRlcnJvcjE6IFwi5a+G56K86ZW35bqm5LiN5bCR5pa8OOS9jVwiLFxuXHRcdGVycm9yMjogXCLlr4bnorzkuK3lv4XpoIjljIXlkKvmlbjlrZfjgIHlrZfnrKbku6Xlj4rnibnmroromZ/norxcIixcblx0XHRlcnJvcjM6IFwi5YWp5qyh5a+G56K85LiN5LiA6Ie077yM6KuL56K66KqN5b6M6YeN5paw6Ly45YWlXCIsXG5cdFx0ZXJyb3I0OiBcIuWvhueivOS/ruaUueWkseaVl++8jOiri+eojeW+jOWGjeippu+8jOaIluaSpeaJk+Wuouacjembu+ipsTk1NTEx6Kej5rG6XCIsXG5cdFx0ZXJyb3I1OiBcIuiIiuWvhueivOS4jeato+eiuu+8jOiri+mHjeaWsOi8uOWFpVwiLFxuXHRcdHN1Y2Nlc3M6IFwi5a+G56K85L+u5pS55oiQ5YqfXCJcblx0fSxcblx0cGFzc3dvcmRSZXNldDoge1xuXHRcdG9sZFB3ZDogXCLoiIrlr4bnorxcIixcblx0XHRvbGRQd2RQbGFjZWhvbGRlOiBcIuiri+i8uOWFpeiIiuWvhueivFwiLFxuXHRcdGNpZEV4cGlyZTogXCLplbfmmYLplpPmnKrmk43kvZzvvIzngrrkuobmgqjos6zmiLbnmoTlronlhajvvIzoq4vph43mlrDplovlp4tcIixcblx0XHR0eXBlMToge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLnlKjmiLbovLjlhaXkv6Hmga9cIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi5omL5qmf6JmfL+itieS7tuiZn1wiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdFx0ZXJyb3I6IFwi5oKo55qE5omL5qmf6Jmf5oiW6K2J5Lu26Jmf6Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5ZCO6YeN5paw6Ly45YWlXCIsXG5cdFx0fSxcblx0XHR0eXBlMjoge1xuXHRcdFx0dGl0bGU6IFwi5a+G56K85om+5ZueXCIsXG5cdFx0XHR0MTogXCLmiYvmqZ/nn63kv6HpqZforYnnorxcIixcblx0XHRcdHQxUGxhY2Vob2xkZXI6IFwi6KuL6Ly45YWl6amX6K2J56K8XCIsXG5cdFx0XHRzdWJtaXQ6IFwi56K66KqNXCIsXG5cdFx0XHRlcnJvcjE6IFwi55+t5L+h6amX6K2J56K86Ly45YWl6Yyv6Kqk77yM6KuL5qC45bCN5b6M6YeN5paw6Ly45YWlXCIsXG5cdFx0XHRlcnJvcjI6IFwi55+t5L+h6amX6K2J56K85bey57aT6YGO5pyf77yM6KuL6YeN5paw542y5Y+W6amX6K2J56K8XCIsXG5cdFx0XHRlcnJvcjM6IFwi55+t5L+h6amX6K2J56K855m85pS+5pmC6ZaT5bCR5pa8MeWIhumQmO+8jOiri+eojeW+jOWGjeipplwiLFxuXHRcdH0sXG5cdFx0dHlwZTM6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueivOaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi5qC45bCN6Lqr5Lu96K2J5L+h5oGvXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdH0sXG5cdFx0dHlwZTQ6IHtcblx0XHRcdHRpdGxlOiBcIuiri+ioree9ruaWsOeahOWvhueivFwiLFxuXHRcdFx0dDE6IFwi5paw5a+G56K8XCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuiri+i8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0dDI6IFwi56K66KqN5a+G56K8XCIsXG5cdFx0XHR0MlBsYWNlaG9sZGVyOiBcIuiri+mHjeaWsOi8uOWFpeaWsOWvhueivFwiLFxuXHRcdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdH1cblx0fSxcblx0aW5mb21hdGlvbkltcHJvdmU6IHtcblx0XHR0aXRsZTogXCLoq4vlrozlloTmgqjnmoTkv6Hmga9cIixcblx0XHR0MTogXCLlp5PlkI1cIixcblx0XHR0MVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQyOiBcIuaAp+WIpVwiLFxuXHRcdHQyUGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0dDM6IFwi5Ye655Sf5pel5pyfXCIsXG5cdFx0dDNQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0NDogXCLorYnku7bpoZ7lnotcIixcblx0XHR0NFBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQ1OiBcIuitieS7tuiZn+eivFwiLFxuXHRcdHQ1UGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0c3VibWl0OiBcIueiuuiqjVwiLFxuXHRcdGNhbmNlbDogXCLot7PpgY5cIixcblx0XHRjYW5kaWRhdGVzOiB7XG5cdFx0XHRzZXg6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55S3XCIsXG5cdFx0XHRcdHZhbHVlOiBcIk1cIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWls1wiLFxuXHRcdFx0XHR2YWx1ZTogXCJGXCJcblx0XHRcdH1dLFxuXHRcdFx0aWRUeXBlOiBbe1xuXHRcdFx0XHRuYW1lOiBcIui6q+S7veitiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIxXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLorbfnhadcIixcblx0XHRcdFx0dmFsdWU6IFwiMlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi6LuN5a6Y6K2J5oiW5aOr5YW16K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjNcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIua4r+a+s+mAmuihjOitiS/lm57phInorYnmiJblj7Dog57orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiNlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5aSW5ZyL5Lq65rC45LmF5bGF55WZ6Lqr5Lu96K2JXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjBcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIua4r+a+s+WPsOWxheawkeWxheS9j+itiVwiLFxuXHRcdFx0XHR2YWx1ZTogXCJWXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLlj7DngaPlsYXmsJHlsYXkvY/orYlcIixcblx0XHRcdFx0dmFsdWU6IFwiV1wiXG5cdFx0XHR9XVxuXHRcdH0sXG5cdFx0c3VjY2Vzc01zZyA6IFwi5pu05paw5oiQ5YqfXCIsXG5cdFx0ZXJyb3JUaXBzOiB7XG5cdFx0XHRlMTogXCLoq4vloavlr6vlp5PlkI3kv6Hmga9cIixcblx0XHRcdGUyOiBcIuiri+mBuOaTh+aAp+WIpVwiLFxuXHRcdFx0ZTM6IFwi6KuL6YG45pOH55Sf5pelXCIsXG5cdFx0XHRlNDogXCLoq4vpgbjmk4forYnku7bpoZ7lnotcIixcblx0XHRcdGU1OiBcIuiri+Whq+Wvq+itieS7tuiZn+eivFwiLFxuXHRcdFx0ZTY6IFwi5oKo5aGr5a+r55qE6K2J5Lu26Jmf56K85pyJ6KqkXCIsXG5cdFx0XHRlNzogXCLmgqjloavlr6vnmoTkv6Hmga/mnInoqqTvvIzoq4vmoLjlr6blvozph43mlrDmj5DkuqRcIixcblx0XHR9XG5cdH0sXG5cdGluZGV4OiB7XG5cdFx0bmV3czogXCLmlrDogZ7os4foqIpcIixcblx0XHRuZXdNb3JlOiBcIuafpeeci+abtOWkmlwiLFxuXHRcdHJlY29tbWVuZDoge1xuXHRcdFx0aXRlbTE6IHtcblx0XHRcdFx0YnRuOiBcIuS6huino+abtOWkmueUouWTgVwiLFxuXHRcdFx0XHR0MTogXCLngrroh6rlt7HlkozlrrbkurrlsIvmib7lo7nku73kv53pmpxcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMjoge1xuXHRcdFx0XHRidG46IFwi56uL5Y2z6aCQ57SEXCIsXG5cdFx0XHRcdHQxOiBcIuWcqOe3mumgkOe0hCDlsIjmpa3mnI3li5lcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMzoge1xuXHRcdFx0XHRidG46IFwi5a6i5oi25pyN5YuZXCIsXG5cdFx0XHRcdHQxOiBcIuWwiOalreWuouacjeeCuuWms+acjeWLmVwiLFxuXHRcdFx0XHR0MjogXCLmg7Pkuobop6Pmm7TlpJrvvIzlj6/oh7Tpm7tcIixcblx0XHRcdFx0dDM6IFwiOTU1MTFcIixcblx0XHRcdFx0dDQ6IFwi6IGv57Wh5oiR5YCR77yM5oiW6YCy5YWlXCIsXG5cdFx0XHR9XG5cdFx0fSxcblx0fSxcblx0Y29tcGxhaW50QWNjZXB0YW5jZToge1xuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0bmFtZVBsYWNlaG9sZGVyOiBcIuWnk+WQjVwiLFxuXHRcdGNvbnRhY3RUeXBlOiBcIuiBr+e1oeaWueW8j1wiLFxuXHRcdGVtYWlsOiBcIumbu+mDteWcsOWdgFwiLFxuXHRcdHF1ZXN0aW9uOiBcIuWVj+mhjOaIluaEj+imi1wiLFxuXHRcdHF1ZXN0aW9uUGxhY2VIb2xkZXI6IFwi77yI5a2X5pW45LiN6LaF6YGONTAw5a2X77yJXCIsXG5cdFx0b3JkZXJObzogXCLkv53llq7nt6jomZ9cIixcblx0XHRvcmRlck5vUGxhY2VIb2xkZXI6IFwi5aaC5oKo54K65bmz5a6J5a6i5oi277yM6KuL5o+Q5L6b5L+d5Zau57eo6JmfXCIsXG5cdFx0Y29udGFjdFRpbWU6IFwi5pyf5pyb6IGv57Wh5pmC6ZaTXCIsXG5cdFx0bm90aWNlMTogXCLmnKzooajmoLzmiYDmlLbpm4bnmoTlgIvkurros4fmlpnmoLnmk5rjgIzlubPlronkurrlo73pppnmuK/lgIvkurros4fmlpnmlLbpm4bogbLmmI7jgI3omZXnkIblj4rlj6rmnIPooqvnlKjkvZzmlrzoga/ntaEg6Zaj5LiL5LmL55So44CC54S26ICM5omA5pS26ZuG55qE5YCL5Lq66LOH5paZ5pyq57aT5oKo5piO56K65o6I5qyK5bCH5LiN5pyD6L2J56e76Iez44CM5bmz5a6J5Lq65aO96aaZ5riv5YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO44CN5YiX5piO5Lul5aSW5LmL56ys5LiJ6ICF5qmf5qeL44CC5oKo5Y+v6YG45pOH5LiN5ZCR5oiR5YCR5o+Q5L6b5omA6ZyA55qE5YCL5Lq66LOH5paZ77yM5oOf6YCZ5qij5Y+v6IO95bCO6Ie05oiR5YCR5LiN6IO96IGv57Wh5oKo44CC5oKo5Lqm5Y+v5qC55pOa44CM5bmz5a6J5Lq65aO96aaZ5riv5YCL5Lq66LOH5paZ5pS26ZuG6IGy5piO44CN5LmL5qyK5Yip5p+l6Zax5Y+K5pu05q2j5YCL5Lq66LOH5paZ44CCXCIsXG5cdFx0bm90aWNlMjogXCLmnKzkurrnj77norroqo3mmI7nmb3kuKblkIzmhI/mnKzkurrnmoTlgIvkurros4fmlpnmoLnmk5rkuK3pioDkurrlo73lgIvkurros4fmlpnmlLbpm4bogbLmmI7kvZzku6XkuIrov7DnlKjpgJTjgIJcIixcblx0XHRjb250YWN0VHlwZXMgOiBbJ+mbu+ipsScsJ+mbu+mDtSddLFxuXHRcdGVycm9yVGlwcyA6IHtcblx0XHRcdGUxIDogXCLoq4vloavlr6voqbLpoIXlhaflrrlcIixcblx0XHRcdGUyIDogXCLoq4vloavlr6vmraPnorrnmoToga/nuavmlrnlvI9cIlxuXHRcdH0sXG5cdH0sXG5cdHJlc2VydmF0aW9uOiB7XG5cdFx0bmFtZTogXCLlp5PlkI1cIixcblx0XHRuYW1lUGxhY2Vob2xkZXI6IFwi5aeT5ZCNXCIsXG5cdFx0Y29udGFjdFR5cGU6IFwi6IGv57Wh5pa55byPXCIsXG5cdFx0Y29udGFjdDogXCLoga/ntaHpm7voqbFcIixcblx0XHRjb250YWN0UGxhY2Vob2xkZXI6IFwi6aaZ5riv6Jmf56K8L+WFp+WcsOiZn+eivFwiLFxuXHRcdHJlc2VydmF0aW9uVHlwZTogXCLpoJDntITpoZ7lnotcIixcblx0XHRyZXNlcnZhdGlvblJlbWFyazogXCLpoJDntIToqqrmmI5cIixcblx0XHRyZXNlcnZhdGlvblJlbWFya1BsYWNlaG9sZGVyOiBcIuiri+ewoeWWruiqquaYjuaCqOaDs+imgeWSqOipoueahOeUouWTgeaIlualreWLmVwiLFxuXHRcdGhrQ2xpZW50OiBcIuaYr+WQpuW5s+Wuiemmmea4r+WuouaItlwiLFxuXHRcdHllczogXCLmmK9cIixcblx0XHRubzogXCLlkKZcIixcblx0XHRjb250YWN0VGltZTogXCLmnJ/mnJvoga/ntaHmmYLplpNcIixcblx0XHRub3RpY2UxOiBcIuacrOihqOagvOaJgOaUtumbhueahOWAi+S6uuizh+aWmeagueaTmuOAjOW5s+WuieS6uuWjvemmmea4r+WAi+S6uuizh+aWmeaUtumbhuiBsuaYjuOAjeiZleeQhuWPiuWPquacg+iiq+eUqOS9nOaWvOiBr+e1oSDplqPkuIvkuYvnlKjjgILnhLbogIzmiYDmlLbpm4bnmoTlgIvkurros4fmlpnmnKrntpPmgqjmmI7norrmjojmrIrlsIfkuI3mnIPovYnnp7voh7PjgIzlubPlronkurrlo73pppnmuK/lgIvkurros4fmlpnmlLbpm4bogbLmmI7jgI3liJfmmI7ku6XlpJbkuYvnrKzkuInogIXmqZ/mp4vjgILmgqjlj6/pgbjmk4fkuI3lkJHmiJHlgJHmj5DkvpvmiYDpnIDnmoTlgIvkurros4fmlpnvvIzmg5/pgJnmqKPlj6/og73lsI7oh7TmiJHlgJHkuI3og73oga/ntaHmgqjjgILmgqjkuqblj6/moLnmk5rjgIzlubPlronkurrlo73pppnmuK/lgIvkurros4fmlpnmlLbpm4bogbLmmI7jgI3kuYvmrIrliKnmn6XplrHlj4rmm7TmraPlgIvkurros4fmlpnjgIJcIixcblx0XHRub3RpY2UyOiBcIuacrOS6uuePvueiuuiqjeaYjueZveS4puWQjOaEj+acrOS6uueahOWAi+S6uuizh+aWmeagueaTmuS4remKgOS6uuWjveWAi+S6uuizh+aWmeaUtumbhuiBsuaYjuS9nOS7peS4iui/sOeUqOmAlOOAglwiLFxuXHR9LFxuXHRwYXltZW50VHlwZToge1xuXHRcdG1lbnUxOiBcIuimquiHqOWuouacjeS4reW/g+S7mOasvlwiLFxuXHRcdG1lbnUyOiBcIue2sumKgOS7mOasvlwiLFxuXHRcdG1lbnUzOiBcIumbu+WMr+S7mOasvlwiLFxuXHRcdG1lbnU0OiBcIuarg+WToeapn+S7mOasvlwiLFxuXHRcdG1lbnU1OiBcIuOAjOe5s+iyu+mdiOOAjeS7mOasvlwiLFxuXHRcdG1lbnU2OiBcIummmea4r+mDteaUv+WxgFwiLFxuXHR9LFxuXHRwcm9kdWN0OiB7XG5cdFx0YnRuUG9zaXRpb246IFwi6aCQ57SE5pyN5YuZXCIsXG5cdFx0aWNvblByb2JsZW06IFwi5bi46KaL5ZWP6aGMXCIsXG5cdFx0aWNvblByb2Nlc3M6IFwi5oqV5L+d5rWB56iLXCIsXG5cdFx0aWNvblByb2R1Y3Q6IFwi55Si5ZOB6Kmz5oOFXCJcblx0fSxcblx0Y3VzdG9tUHJvZHVjdDoge1xuXHRcdG1lbnUxOiBcIuiBr+e5q+aIkeWAkVwiLFxuXHRcdG1lbnUyOiBcIue5s+S7mOS/neiyu1wiLFxuXHRcdG1lbnUzOiBcIuS/neWWruafpeipolwiLFxuXHRcdG1lbnU0OiBcIuS/neWWruiuiuabtFwiLFxuXHRcdG1lbnU1OiBcIueQhuizoOeUs+iri1wiLFxuXHRcdG1lbnU2OiBcIumgkOe0hOacjeWLmVwiLFxuXHRcdG1lbnU3OiBcIuaKleiotOWPl+eQhlwiLFxuXHRcdG1lbnU4OiBcIuW4uOeUqOihqOagvFwiLFxuXHR9LFxuXHRjb21tb25Gb3JtOiB7XG5cdFx0aGVhZDE6IFwi6KGo5qC86aGe5Z6LXCIsXG5cdFx0aGVhZDI6IFwi6KGo5qC85ZCN56ixXCIsXG5cdFx0aGVhZDM6IFwi5L2/55So6Kqq5piOXCIsXG5cdFx0aGVhZDQ6IFwi6ZmE5Lu2XCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6LyJ5paH5qqUXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHR5cGU6IFwi57mz6LK76aGeXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuOAjOmbu+WtkOWFpeizrOacjeWLmeOAjeWPiumKgOihjOaItuWPozxicj7nm7TmjqXku5jmrL7mjojmrIrnlLPoq4tcIixcblx0XHRcdFx0ZGVzYzogXCLnlLPoq4voqK3nq4vjgIwg6Zu75a2Q5YWl6LOs5pyN5YuZ44CNIOWPiumKgOihjOaItuWPozxicj7nm7TmjqXku5jmrL7mjojmrIrmmYLpoIjmj5DkvptcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/oeeUqOWNoeaItuWPo+ebtOaOpeS7mOasvuaOiOasiuabuFwiLFxuXHRcdFx0XHRkZXNjOiBcIueUs+iri+S/oeeUqOWNoeaItuWPo+ebtOaOpeS7mOasvuaOiOasiuaZgumgiOaPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHR5cGU6IFwi5L+d5Zau6K6K5pu06aGeXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuS/nemaquWQiOWQjOino+mZpOeUs+iri+abuFwiLFxuXHRcdFx0XHRkZXNjOiBcIumAgOS/neOAgeeMtuixq+acn+mAgOS/nealreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOS/neWWruiyuOasvumChOasvumhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS/neWWruiyuOasvuOAgemChOasvualreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOS/nemaquWQiOWQjOioiOWKg+iuiuabtOmhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuWKoOS/neOAgea4m+S/neOAgeaWsOWinumZhOmaquOAgeW+qeaViOetiealreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOWuouaItuS/oeaBr+iuiuabtOmhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuWfuuacrOS/oeaBr+iuiuabtOalreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZCI5ZCM6K6K5pu055Sz6KuL5pu477yIIOWuouaItuasiuebiuiuiuabtOmhnu+8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS6pOiyu+aWueW8j+OAgeiHquWiiumBuOaTh+asiuiuiuabtOOAgeijnOeZvOetiealreWLmemBqeeUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5o6I5qyK5aeU5omY5pu4XCIsXG5cdFx0XHRcdGRlc2M6IFwi5aeU5omY5LuW5Lq65Luj6L6m5pmC6aCI5o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnqIXmlLbogbLmmI5cIixcblx0XHRcdFx0ZGVzYzogXCJDUlPopoHmsYJcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuWBpeW6t+WRiuefpVwiLFxuXHRcdFx0XHRkZXNjOiBcIumgiOS6jOasoeaguOS/neeahOalreWLmemgiOaPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHR5cGU6IFwi55CG6LOg6aGeXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueQhuizoOeUs+iri+abuFwiLFxuXHRcdFx0XHRkZXNjOiBcIue0meizqueUs+iri+eahOaHieWCmeaWh+S7tlwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1dXG5cdFx0fSxcblx0XHRdXG5cdH0sXG5cdHBvbGljeUNoYW5nZUd1aWRlOiB7XG5cdFx0bm90aWNlOiBcIuWmgumcgOWBmuWFtuS7luS/neWWruiuiuabtOiBr+e5q+Wuouacje+8iOiBr+e5q+Wuouacjei2hemPiOaOpei3s+i9ieWFrOWPuOiBr+e5q+S/oeaBr+mgge+8iVwiLFxuXHRcdGhlYWQxOiBcIumgheebrlwiLFxuXHRcdGhlYWQyOiBcIuWFt+mrlOWFp+WuuVwiLFxuXHRcdGhlYWQzOiBcIueUs+iri+izh+agvOS6ulwiLFxuXHRcdGhlYWQ0OiBcIuWPl+eQhuaZgumWk1wiLFxuXHRcdGhlYWQ1OiBcIuaHieWCmeadkOaWmVwiLFxuXHRcdGRvd25sb2FkOiBcIuS4i+i8ieaWh+aqlFwiLFxuXHRcdGZvcm06IFt7XG5cdFx0XHRwcm9qZWN0OiBcIumAgOS/nVwiLFxuXHRcdFx0Y29udGVudDogXCLlnKjnjLbosavmnJ/lvozop6PpmaTlkIjlkIzvvIzlhazlj7jlsIfpgIDpgoTkv53llq7nj77ph5Hlg7nlgLzmiJbmnKrmu7/mnJ/lh4jkv53osrvjgILvvIjlvoXnlKLlk4Hnsr7nrpfnorroqo3vvIlcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5L+d5Zau5pWI5Yqb57WC5q2i5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zqq5ZauXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73orYnku7ZcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5a2Y5oqY6ZO26KGM5Y2h55u45YWzXCIsXG5cdFx0XHR9XG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cHJvamVjdDogXCLnjLbosavmnJ/pgIDkv51cIixcblx0XHRcdGNvbnRlbnQ6IFwi5Zyo54y26LGr5pyf5YWn5o+Q5Ye66Kej6Zmk5ZCI5ZCM77yM5YWs5Y+45pyD54Sh5oGv6YCA6YKE5YWo6YOo5L+d6LK7XCIsXG5cdFx0XHRhcHBsaWNhbnQ6IFwi5oqV5L+d5Lq6XCIsXG5cdFx0XHRyZWNlcHRpb25UaW1lOiBcIueMtuixq+acn+e1kOadn+WJjVwiLFxuXHRcdFx0bWF0ZXJpYWxMaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuS/nemaquWWrlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnlLPoq4vmm7hcIixcblx0XHRcdFx0dHlwZTogMSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5oqV5L+d5Lq65pyJ5pWI6Lqr5Lu96K2J5Lu2XCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuWtmOaKmOmTtuihjOWNoeebuOWFs1wiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLpppbmnJ/kv53osrvnmbznpahcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIuWuouaItuizh+aWmeiuiuabtFwiLFxuXHRcdFx0cHJvamVjdFR5cGU6IDEsXG5cdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZVwiLFxuXHRcdFx0cXVlcnk6IHtcblx0XHRcdFx0cTogXCJtNDJcIlxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnQ6IFwi5oqV5L+d5Lq644CB5Y+X5L+d5Lq644CB5Y+X55uK5Lq655qE5YCL5Lq65L+h5oGv6K6K5pu0XCIsXG5cdFx0XHRhcHBsaWNhbnQ6IFwi5oqV5L+d5Lq6XCIsXG5cdFx0XHRyZWNlcHRpb25UaW1lOiBcIuS4jemZkFwiLFxuXHRcdFx0bWF0ZXJpYWxMaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLlv4XopoHnmoTorYnmmI7mnZDmlplcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIuiBr+ezu+aWueW8j+iuiuabtFwiLFxuXHRcdFx0cHJvamVjdFR5cGU6IDEsXG5cdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZVwiLFxuXHRcdFx0cXVlcnk6IHtcblx0XHRcdFx0cTogXCJtNDNcIlxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnQ6IFwi5Zyw5Z2A44CB6Zu76Kmx562J5L+h5oGv55qE6K6K5pu0XCIsXG5cdFx0XHRhcHBsaWNhbnQ6IFwi5oqV5L+d5Lq6XCIsXG5cdFx0XHRyZWNlcHRpb25UaW1lOiBcIuS4jemZkFwiLFxuXHRcdFx0bWF0ZXJpYWxMaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUs+iri+abuFwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73orYnku7ZcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIuS6pOiyu+aWueW8j+iuiuabtFwiLFxuXHRcdFx0Y29udGVudDogXCLmm7TmlLnkv53llq7nmoTnuozmnJ/kuqTosrvmlrnlvI/miJbkuqTosrvos6zomZ9cIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5L+d5Zau5Lqk6LK75pyf5ru/5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6KuL5pu4XCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/nemaquWWrlwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdF1cblx0fSxcblx0cG9saWN5Q2hhbmdlQ29udGFjdDoge1xuXHRcdHBob25lOiBcIuiBr+e5q+mbu+ipsVwiLFxuXHRcdGFkZHJlc3M6IFwi6IGv57mr5Zyw5Z2AXCIsXG5cdFx0ZW1haWw6IFwiRS1NYWlsXCIsXG5cdFx0Y2hlY2tUaXBzOiBcIuacrOS6uuS4jeWQjOaEj+aOpeaUtuWuo+WCs+S/oeaBr1wiLFxuXHRcdHN1Ym1pdDogXCLnorroqo3kv67mlLlcIixcblx0XHRlcnJvclRpcHMgOiB7XG5cdFx0XHRlMSA6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr6Zu76KmxXCIsXG5cdFx0XHRlMiA6IFwi6KuL5aGr5a+r6IGv57mr5Zyw5Z2AXCIsXG5cdFx0XHRlMyA6IFwi6KuL5aGr5a+r5q2j56K655qERS1NYWls5Zyw5Z2AXCJcblx0XHR9XG5cdH0sXG5cdHBvbGljeUNoYW5nZUluZm9ybWF0aW9uOiB7XG5cdFx0aGtDbGllbnQ6IFwi5piv5ZCm5bmz5a6J6aaZ5riv5a6i5oi2XCIsXG5cdFx0eWVzOiBcIuaYr1wiLFxuXHRcdG5vOiBcIuWQplwiLFxuXHRcdG9iajogXCLorormm7TlsI3osaFcIixcblx0XHRuYW1lOiBcIuWnk+WQjVwiLFxuXHRcdHNleDogXCLmgKfliKtcIixcblx0XHRiaXJ0aDogXCLlh7rnlJ/ml6XmnJ9cIixcblx0XHR0eXBlOiBcIuitieS7tumhnuWei1wiLFxuXHRcdE5POiBcIuitieS7tuiZn+eivFwiLFxuXHRcdHZhbGlkaXR5UGVyaW9kOiBcIuitieS7tuacieaViOacn1wiLFxuXHRcdG5hdGlvbmFsaXR5OiBcIuWci+exjVwiLFxuXHRcdGVtcGxveWVyOiBcIuW3peS9nOWWruS9jVwiLFxuXHRcdG1hcml0YWxTdGF0dXM6IFwi5ama5ae754uA5rOBXCIsXG5cdFx0c3VibWl0OiBcIueiuuiqjeS/ruaUuVwiLFxuXHRcdHVwbG9hZDogXCLpmYTku7bkuIrlgrNcIixcblx0XHRtb2RpZnlUaXBzMTogXCLlpoLpnIDkv67mlLnoq4tcIixcblx0XHRtb2RpZnlUaXBzMjogXCLoga/nuavlrqLmnI1cIixcblx0fSxcblx0Y29udGFjdFVzOiB7XG5cdFx0c2VydmljZToge1xuXHRcdFx0Y2VudGVyOiB7XG5cdFx0XHRcdHRpdGxlOiBcIuWuouaItuacjeWLmeS4reW/g1wiLFxuXHRcdFx0XHRhZGRyZXNzOiBcIuWcsOWdgO+8mummmea4r+WwluaymeWYtOa4r+WogeawuOmHkeiejeWkp+aok1wiLFxuXHRcdFx0XHR0aW1lOiBcIuacjeWLmeaZgumWk++8muaYn+acn+WjueiHs+S6lDk6MDAtMTg6MDBcIixcblx0XHRcdH0sXG5cdFx0XHRob3RsaW5lOiB7XG5cdFx0XHRcdHRpdGxlOiBcIuWuouaItuacjeWLmeeGsee3mlwiLFxuXHRcdFx0XHRoazogXCLpppnmuK/omZ/norzvvJooODUyKTI5ODMgODg2NlwiLFxuXHRcdFx0XHRjbjogXCLlhaflnLDomZ/norzvvJooODYpNDAwNzggOTU1MTFcIixcblx0XHRcdFx0dGltZTogXCLmnI3li5nmmYLplpPvvJrmmJ/mnJ/lo7noh7PkupQ5OjAwLTE4OjAwXCJcblx0XHRcdH0sXG5cdFx0XHRtYWlsOiB7XG5cdFx0XHRcdHRpdGxlOiBcIuWuouaItuacjeWLmembu+mDtVwiLFxuXHRcdFx0XHRtYWlsOiBcImNzQHBpbmdhbi5jb20uaGtcIlxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cHVsYmljOiB7XG5cdFx0XHR0aXRsZTogXCLlvq7kv6HlhaznnL7omZ9cIixcblx0XHRcdG0xOiBcIueZu+mZuOOAjOW+ruS/oeOAjUFQUO+8jCDmjInlj7PkuIrop5LnmoTjgIwr44CN5oyJ6YiV5Lim6YG45pOH44CM5re75Yqg5pyL5Y+L44CN77yM6YG45pOH44CM5YWs55y+6Jmf44CNIOi8uOWFpeS4puaQnOe0ouOAjOW5s+WuieS6uuWjvemmmea4r+OAjVwiLFxuXHRcdFx0bTI6IFwi55m76Zm444CM5b6u5L+h44CNQVBQ77yMIOaMieWPs+S4iuinkueahOOAjCvjgI3mjInpiJXkuKbpgbjmk4fjgIzmjoPlo7nmjoPjgI3mjoPmj4/kuIvmlrnkuozntq3norzvvIjmlL7nva7kuozntq3norzvvIlcIlxuXHRcdH0sXG5cdFx0cXJjb2RlOiB7XG5cdFx0XHR0aXRsZTogXCLlrpjmlrnlhaznnL7omZ9cIlxuXHRcdH1cblx0fSxcblx0Y3VzdG9tU2VydmljZToge1xuXHRcdG5hbWU6IFwi5a6i5oi25pyN5YuZXCIsXG5cdFx0bWVudTE6IFwi6IGv57mr5oiR5YCRXCIsXG5cdFx0bWVudTI6IFwi57mz5LuY5L+d6LK7XCIsXG5cdFx0bWVudTM6IFwi5L+d5Zau5p+l6KmiXCIsXG5cdFx0bWVudTQ6IFwi5L+d5Zau6K6K5pu0XCIsXG5cdFx0bWVudTQxOiBcIuS/neWWruiuiuabtOaMh+W8lVwiLFxuXHRcdG1lbnU0MjogXCLoga/ns7vmlrnlvI/orormm7RcIixcblx0XHRtZW51NDM6IFwi5a6i5oi26LOH5paZ6K6K5pu0XCIsXG5cdFx0bWVudTU6IFwi55CG6LOg55Sz6KuLXCIsXG5cdFx0bWVudTY6IFwi6aCQ57SE5pyN5YuZXCIsXG5cdFx0bWVudTc6IFwi5oqV6Ki05Y+X55CGXCIsXG5cdFx0bWVudTg6IFwi5bi455So6KGo5qC8XCIsXG5cdFx0aW5zdXJhbmNlUXVlcnk6IHtcblx0XHRcdEluc3VyYW50TnVtYmVyOiBcIuS/neWWruiZn+eivFwiLFxuXHRcdFx0SW5zdXJhbnQ6IFwi5Y+X5L+d5Lq6XCIsXG5cdFx0XHRJbnN1cmFudE5hbWU6IFwi6Zqq56iu5ZCN56ixXCIsXG5cdFx0XHRJbnN1cmFudEFtb3VudDogXCLkv53poY1cIixcblx0XHRcdGVmZmVjdGl2ZURhdGU6IFwi5L+d6LK75Yiw5pyf5pelXCIsXG5cdFx0XHRwZXJpb2Q6IFwi5L+d6Zqc5bm05pyfXCIsXG5cblx0XHRcdHQyVGl0bGU6IFwi5L+d6Zqc5YWn5a65XCIsXG5cdFx0XHR0Mkluc3VyYW50Q2xhc3NpZnk6IFwi6Zqq56iu5ZCN56ixXCIsXG5cdFx0XHR0Mkluc3VyYW50QW1vdW50OiBcIuS/nemhjVwiLFxuXG5cdFx0XHR0M1RpdGxlOiBcIuWuouaItuizh+aWmVwiLFxuXHRcdFx0dDNJbnN1cmFudE5hbWVDbjogXCLmipXkv53kurrlp5PlkI3vvIjkuK3mlofvvIlcIixcblx0XHRcdHQzSW5zdXJhbnROYW1lRW46IFwi5oqV5L+d5Lq65aeT5ZCN77yI6Iux5paH77yJXCIsXG5cdFx0XHR0M0luc3VyYW50SWROdW1iZXI6IFwi6K2J5Lu26Jmf56K8XCIsXG5cdFx0XHR0M0luc3VyYW50Q29udGFjdEFkZHJlc3M6IFwi6IGv57mr5Zyw5Z2AXCIsXG5cdFx0XHR0M0luc3VyYW50QWRkcmVzczogXCLlsYXkvY/lnLDlnYBcIixcblx0XHRcdHQzSW5zdXJhbnRNb2JpbGU6IFwi5omL5o+Q6Zu76KmxXCIsXG5cdFx0XHR0M0luc3VyYW50RW1haWw6IFwi6Zu75a2Q6YO1566xXCIsXG5cdFx0XHR0M0luc3VyZWROYW1lQ246IFwi5Y+X5L+d5Lq65aeT5ZCN77yI5Lit5paH77yJXCIsXG5cdFx0XHR0M0luc3VyZWROYW1lRW46IFwi5Y+X5L+d5Lq65aeT5ZCN77yI6Iux5paH77yJXCIsXG5cdFx0XHR0M0luc3VyZWRCaXJ0aGRheTogXCLlh7rnlJ/ml6XmnJ9cIixcblx0XHRcdHQzSW5zdXJlZElkTnVtYmVyOiBcIuitieS7tuiZn+eivFwiLFxuXG5cdFx0XHR0NFRpdGxlOiBcIuWPl+ebiuS6uuizh+aWmVwiLCAvLyB0NEJlbmVmaWNpYXJ5SW5mb3JtYXRpb25cblx0XHRcdHQ0TmFtZUNuOiBcIuWnk+WQje+8iOS4reaWh++8iVwiLFxuXHRcdFx0dDROYW1lRW46IFwi5aeT5ZCN77yI6Iux5paH77yJXCIsXG5cdFx0XHR0NFJlbGF0aW9uOiBcIuiIh+WPl+S/neS6uumXnOS/glwiLFxuXHRcdFx0dDRBbGxvY2F0aW9uOiBcIuWIhumFjeavlOS+i1wiLFxuXG5cdFx0XHR0NVRpdGxlOiBcIue5s+iyu+izh+aWmVwiLFxuXHRcdFx0dDVQYXltZW50UGVyaW9kOiBcIue6jOiyu+W5tOacn1wiLFxuXHRcdFx0dDVQYXltZW50TWV0aG9kOiBcIue5s+iyu+aWueW8j1wiLFxuXHRcdFx0dDVQYXltZW50Q3VycmVuY3k6IFwi57mz6LK75bmj56iuXCIsXG5cdFx0XHR0NUN1cnJlbnRQcmVtaXVtOiBcIueVtuacn+S/neiyu1wiLFxuXHRcdFx0dDVQYXltZW50QmFuazogXCLnubPosrvpioDooYxcIixcblx0XHRcdHQ1UGF5bWVudEFjY291bnQ6IFwi57mz6LK75biz6JmfXCIsXG5cblx0XHRcdHQ2VGl0bGU6IFwi57mz6LK76KiY6YyEXCIsXG5cdFx0XHR0NlBheW1lbnRQZXJpb2Q6IFwi57mz6LK75pyfXCIsXG5cdFx0XHR0NlBheW1lbnRNZXRob2Q6IFwi57mz6LK75pa55byPXCIsXG5cdFx0XHR0NkNsb3NpbmdEYXRlOiBcIuWvpuaUtuaXpeacn1wiLFxuXHRcdFx0dDZQYXltZW50QW1vdW50OiBcIue5s+iyu+mHkemhjVwiLFxuXHRcdH0sXG5cdFx0cmVzZXJ2YXRpb246IHtcblx0XHRcdHN1Ym1pdEJ0bjogJ+eiuuiqjScsXG5cdFx0XHRjb250YWN0VHlwZXMgOiBbJ+mbu+ipsSddLFxuXHRcdFx0cmVzZXJ2YXRpb25UeXBlczogWyfmipXkv53lkqjoqaInLCfku6Povqbkv53llq7orormm7QnXSxcblx0XHRcdGVycm9yVGlwcyA6IHtcblx0XHRcdFx0ZTEgOiBcIuiri+Whq+Wvq+ipsumgheWFp+WuuVwiLFxuXHRcdFx0XHRlMiA6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr5pa55byPXCJcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQXBCQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBL0JBO0FBc0NBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUZBO0FBUEE7QUE1RUE7QUEyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFmQTtBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQW5CQTtBQWdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQTFCQTtBQXlDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUExQkE7QUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFGQTtBQTFCQTtBQStCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQTlDQTtBQXdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVRBO0FBSEE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQWJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWRBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFQQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBckNBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUZBO0FBaEVBO0FBMEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSUE7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQUlBO0FBREE7QUFmQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFJQTtBQURBO0FBSUE7QUFEQTtBQWxCQTtBQXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFkQTtBQW9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBS0E7QUFEQTtBQVRBO0FBekZBO0FBeUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFOQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBWkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFEQTtBQXZCQTtBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0NBO0FBNkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFKQTtBQTFEQTtBQXBtQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/common/lang/tc.js\n");
/***/ }),
/***/ "./src/common/lang/zh.js":
/*!*******************************!*\
!*** ./src/common/lang/zh.js ***!
\*******************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = {\n message: {\n login: '登录',\n Username: '用户名',\n Password: '密码',\n Captcha: '验证码',\n Language: '语言',\n zh: '中文',\n en: '英文'\n },\n glbalTips: {\n sessionLost: \"为了更好的体验,需要您登录后再进行此操作\"\n },\n nav: {\n loginData: {\n name: \"登陆\",\n path: \"\",\n list: [{\n name: \"注册\",\n path: \"/register\",\n type: \"noAuth\",\n value: \"\"\n }, {\n name: \"登陆\",\n path: \"/login\",\n type: \"noAuth\",\n value: \"\"\n }, {\n name: \"修改密码\",\n path: \"/password/reset\",\n type: \"auth\",\n value: \"\"\n }, {\n name: \"登出\",\n path: \"\",\n type: \"auth\",\n value: \"logout\"\n }]\n },\n navList: [{\n name: \"产品介绍\",\n path: \"/product\",\n list: []\n }, {\n name: \"客户服务\",\n path: \"/custom/product\",\n list: [{\n name: \"联系我们\",\n path: \"/custom/service?q=m1\"\n }, {\n name: \"缴付保费\",\n path: \"/custom/service?q=m2\"\n }, {\n name: \"保单查询\",\n path: \"/custom/service?q=m3\"\n }, {\n name: \"保单变更\",\n path: \"/custom/service?q=m41\"\n }, {\n name: \"理赔申请\",\n path: \"/custom/service?q=m5\"\n }, {\n name: \"预约服务\",\n path: \"/custom/service?q=m6\"\n }, {\n name: \"投诉受理\",\n path: \"/custom/service?q=m7\"\n }, {\n name: \"常用表格\",\n path: \"/custom/service?q=m8\"\n }]\n }, {\n name: \"新闻资讯\",\n path: \"/news/list\",\n list: []\n }, {\n name: \"关于平安人寿\",\n path: \"\",\n list: [{\n name: \"公司简介\",\n path: \"/profile\"\n }, {\n name: \"领导人概况\",\n path: \"\"\n }]\n }]\n },\n footer: {\n hkPhone: \"客户服务热线(香港)\",\n cnPhone: \"客户服务热线(内地)\",\n aboutUs: \"关于我们\",\n companyIntroduction: \"公司介绍\",\n news: \"新闻资讯\",\n joinUs: \"加入我们\",\n helpCenter: \"帮助中心\",\n privacy: \"隐私政策\",\n terms: \"使用条款\",\n map: \"网站地图\",\n contactUs: \"联络我们\",\n contactInformation: \"联系方式\",\n service: \"服务网点\",\n qrcode: \"官方公众号\",\n copyright: \"版权所有 © 中国平安保险(集团)股份有限公司未经许可不得复制、转载或摘编,违者必究!\"\n },\n login: {\n title: \"平安一账通\",\n loginType1: \"账密登录\",\n loginType2: \"动态密码登录\",\n account: \"账号\",\n accountPlaceholder: \"请输入证件号/一账通用户名/手机号\",\n password: \"密码\",\n passwordPlaceholder: \"输入登录密码\",\n verifyPlaceholder: \"请输入验证码\",\n agree: \"同意\",\n protocol: \"《平安一账通会员服务协议》\",\n login: \"登入\",\n register: \"注册\",\n forget: \"忘记密码\",\n mobile: \"手机号\",\n mobilePlaceholder: \"手机号\",\n verifyCode: \"验证码\",\n verifyCodePlaceholder: \"验证码\",\n verifyCodeGet: \"获取验证码\",\n tips: {\n e1: \"请输入账号信息\",\n e2: \"请输入密码\",\n e3: \"请输入图像验证码\",\n e4: \"请同意《平安一账通会员服务协议》\",\n e5: \"账号或密码不正确\",\n oe0: \"请输入正确的手机号\",\n oe1: \"请先获取短信验证码\",\n oe2: \"请输入图片验证码\",\n oe3: \"请输入短信验证码\",\n oe4: \"短信验证码不正确\"\n }\n },\n session: {\n sidExpire: \"长时间未操作,为了您的账户安全,请登录后再操作\"\n },\n register: {\n mobileOptions: [{\n type: \"hk\",\n name: \"香港手机号\",\n placeHolder: \"请输入8位手机号码\",\n areaCode: \"+852\"\n }, {\n type: \"zh\",\n name: \"大陆手机号\",\n placeHolder: \"请输入11位手机号码\",\n areaCode: \"+86\"\n }],\n coutTips: \"{second}秒后重新获取\",\n title: \"欢迎注册\",\n title2: \"请设置新的密码\",\n mobilePlaceholder: \"请输入8位手机号码\",\n verifyCodePlaceholder: \"请输入验证码\",\n verifyCodeGet: \"获取验证码\",\n agree: \"同意\",\n protocol: \"《平安一账通会员服务协议》\",\n register: \"点击注册\",\n newPassword: \"新密码\",\n newPasswordPlaceholder: \"输入登录密码\",\n newPasswordSure: \"确认密码\",\n newPasswordSurePlaceholder: \"输入登录密码\",\n sure: \"确认\",\n tips: {\n e1: \"手机号不正确,请输入正确的手机号\",\n e2: \"请同意《平安一账通会员服务协议》\",\n e3: \"短信验证码不正确\",\n e4: \"请先获取短信验证码\",\n e5: \"手机号已经被注册,请使用其他手机号注册或直接登录\",\n e6: \"请输入图片验证码\",\n e7: \"密码长度不能少于8位\",\n e8: \"密码必须同时包含数字、字母、特殊字符\",\n e9: \"两次输入的密码不一致\",\n e10: \"验证码过期,请重新申请验证码\",\n e11: \"注册失败,请联系工作人员\",\n e12: \"註冊成功\"\n }\n },\n passwordCheck: {\n error1: \"密码长度不少于8位\",\n error2: \"密码中必须包含数字、字符以及特殊号码\",\n error3: \"两次密码不一致,请确认后重新输入\",\n error4: \"密码修改失败,请稍后再试,或拨打客服电话95511解决\",\n error5: \"旧密码不正确,请重新输入\",\n success: \"密码修改成功\"\n },\n passwordReset: {\n oldPwd: \"旧密码\",\n oldPwdPlaceholde: \"请输入旧密码\",\n cidExpire: \"长时间未操作,为了您的账户安全,请重新开始\",\n type1: {\n title: \"密码找回\",\n t1: \"用户输入信息\",\n t1Placeholder: \"手机号/证件号\",\n submit: \"确认\",\n error: \"您的手机号或证件号输入错误,请核对后重新输入\"\n },\n type2: {\n title: \"密码找回\",\n t1: \"手机短信验证码\",\n t1Placeholder: \"请输入验证码\",\n submit: \"确认\",\n error1: \"短信验证码输入错误,请核对后重新输入\",\n error2: \"短信验证码已经过期,请重新获取验证码\",\n error3: \"短信验证码发放时间少于1分钟,请稍后再试\"\n },\n type3: {\n title: \"密码找回\",\n t1: \"核对身份证信息\",\n t1Placeholder: \"\",\n submit: \"确认\"\n },\n type4: {\n title: \"请设置新的密码\",\n t1: \"新密码\",\n t1Placeholder: \"请输入新密码\",\n t2: \"确认密码\",\n t2Placeholder: \"请重新输入新密码\",\n submit: \"确认\"\n }\n },\n infomationImprove: {\n title: \"请完善您的信息\",\n t1: \"姓名\",\n t1Placeholder: \"\",\n t2: \"性别\",\n t2Placeholder: \"\",\n t3: \"出生日期\",\n t3Placeholder: \"\",\n t4: \"证件类型\",\n t4Placeholder: \"\",\n t5: \"证件号码\",\n t5Placeholder: \"\",\n submit: \"确认\",\n cancel: \"跳过\",\n candidates: {\n sex: [{\n name: \"男\",\n value: \"M\"\n }, {\n name: \"女\",\n value: \"F\"\n }],\n idType: [{\n name: \"身份证\",\n value: \"1\"\n }, {\n name: \"护照\",\n value: \"2\"\n }, {\n name: \"军官证或士兵证\",\n value: \"3\"\n }, {\n name: \"港澳通行证/回乡证或台胞证\",\n value: \"6\"\n }, {\n name: \"外国人永久居留身份证\",\n value: \"0\"\n }, {\n name: \"港澳居民居住证\",\n value: \"V\"\n }, {\n name: \"台湾居民居住证\",\n value: \"W\"\n }]\n },\n successMsg: \"更新成功\",\n errorTips: {\n e1: \"请填写姓名信息\",\n e2: \"请选择性别\",\n e3: \"请选择生日\",\n e4: \"请选择证件类型\",\n e5: \"请填写证件号码\",\n e6: \"您填写的证件号码有误\",\n e7: \"您填写的信息有误,请核实后重新提交\"\n }\n },\n index: {\n news: \"新闻资讯\",\n newMore: \"查看更多\",\n recommend: {\n item1: {\n btn: \"了解更多产品\",\n t1: \"为自己和家人寻找一份保障\"\n },\n item2: {\n btn: \"立即预约\",\n t1: \"在线预约 专业服务\"\n },\n item3: {\n btn: \"客户服务\",\n t1: \"专业客服为你服务\",\n t2: \"想了解更多,可致电\",\n t3: \"95511\",\n t4: \"联络我们,或进入\"\n }\n }\n },\n complaintAcceptance: {\n name: \"姓名\",\n namePlaceholder: \"姓名\",\n contactType: \"联络方式\",\n email: \"电邮地址\",\n question: \"问题或意见\",\n questionPlaceHolder: \"(字数不超过500字)\",\n orderNo: \"保单编号\",\n orderNoPlaceHolder: \"如您为平安客户,请提供保单编号\",\n contactTime: \"期望联络时间\",\n notice1: \"本表格所收集的个人资料根据「平安人寿香港个人资料收集声明」处理及只会被用作于联络 阁下之用。然而所收集的个人资料未经您明确授权将不会转移至「平安人寿香港个人资料收集声明」列明以外之第三者机构。您可选择不向我们提供所需的个人资料,惟这样可能导致我们不能联络您。您亦可根据「平安人寿香港个人资料收集声明」之权利查阅及更正个人资料。\",\n notice2: \"本人现确认明白并同意本人的个人资料根据中银人寿个人资料收集声明作以上述用途。\",\n contactTypes: ['电话', '电邮'],\n errorTips: {\n e1: \"请填写该项内容\",\n e2: \"请填写正确的联系方式\"\n }\n },\n reservation: {\n name: \"姓名\",\n namePlaceholder: \"姓名\",\n contactType: \"联络方式\",\n contact: \"联络电话\",\n contactPlaceholder: \"香港号码/内地号码\",\n reservationType: \"预约类型\",\n reservationRemark: \"预约说明\",\n reservationRemarkPlaceholder: \"请简单说明您想要咨询的产品或业务\",\n hkClient: \"是否平安香港客户\",\n yes: \"是\",\n no: \"否\",\n contactTime: \"期望联络时间\",\n notice1: \"本表格所收集的个人资料根据「平安人寿香港个人资料收集声明」处理及只会被用作于联络 阁下之用。然而所收集的个人资料未经您明确授权将不会转移至「平安人寿香港个人资料收集声明」列明以外之第三者机构。您可选择不向我们提供所需的个人资料,惟这样可能导致我们不能联络您。您亦可根据「平安人寿香港个人资料收集声明」之权利查阅及更正个人资料。\",\n notice2: \"本人现确认明白并同意本人的个人资料根据中银人寿个人资料收集声明作以上述用途。\"\n },\n paymentType: {\n menu1: \"亲临客服中心付款\",\n menu2: \"网银付款\",\n menu3: \"电汇付款\",\n menu4: \"柜员机付款\",\n menu5: \"「缴费灵」付款\",\n menu6: \"香港邮政局\"\n },\n product: {\n btnPosition: \"预约服务\",\n iconProblem: \"常见问题\",\n iconProcess: \"投保流程\",\n iconProduct: \"产品详情\"\n },\n customProduct: {\n menu1: \"联系我们\",\n menu2: \"缴付保费\",\n menu3: \"保单查询\",\n menu4: \"保单变更\",\n menu5: \"理赔申请\",\n menu6: \"预约服务\",\n menu7: \"投诉受理\",\n menu8: \"常用表格\"\n },\n commonForm: {\n head1: \"表格类型\",\n head2: \"表格名称\",\n head3: \"使用说明\",\n head4: \"附件\",\n download: \"下载文档\",\n form: [{\n type: \"缴费类\",\n list: [{\n name: \"「电子入账服务」及银行户口<br>直接付款授权申请\",\n desc: \"申请设立「电子入账服务」及银行户口<br>直接付款授权时须提供\",\n download: \"\"\n }, {\n name: \"信用卡户口直接付款授权书\",\n desc: \"申请信用卡户口直接付款授权时须提供\",\n download: \"\"\n }]\n }, {\n type: \"保单变更类\",\n list: [{\n name: \"保险合同解除申请书\",\n desc: \"退保、犹豫期退保业务适用\",\n download: \"\"\n }, {\n name: \"保险合同变更申请书(保单贷款还款类)\",\n desc: \"保单贷款、还款业务适用\",\n download: \"\"\n }, {\n name: \"保险合同变更申请书(保险合同计划变更类)\",\n desc: \"加保、减保、新增附险、复效等业务适用\",\n download: \"\"\n }, {\n name: \"保险合同变更申请书(客户信息变更类)\",\n desc: \"基本信息变更业务适用\",\n download: \"\"\n }, {\n name: \"保险合同变更申请书(客户权益变更类)\",\n desc: \"交费方式、自垫选择权变更、补发等业务适用\",\n download: \"\"\n }, {\n name: \"授权委托书\",\n desc: \"委托他人代办时须提供\",\n download: \"\"\n }, {\n name: \"税收声明\",\n desc: \"CRS要求\",\n download: \"\"\n }, {\n name: \"健康告知\",\n desc: \"须二次核保的业务须提供\",\n download: \"\"\n }]\n }, {\n type: \"理赔类\",\n list: [{\n name: \"理赔申请书\",\n desc: \"纸质申请的应备文件\",\n download: \"\"\n }]\n }]\n },\n policyChangeGuide: {\n notice: \"如需做其他保单变更联系客服(联系客服超链接跳转公司联系信息页)\",\n head1: \"项目\",\n head2: \"具体内容\",\n head3: \"申请资格人\",\n head4: \"受理时间\",\n head5: \"应备材料\",\n download: \"下载文档\",\n form: [{\n project: \"退保\",\n content: \"在犹豫期后解除合同,公司将退还保单现金价值或未满期净保费。(待产品精算确认)\",\n applicant: \"投保人\",\n receptionTime: \"保单效力终止前\",\n materialList: [{\n name: \"保险单\"\n }, {\n name: \"申请书\",\n type: 1\n }, {\n name: \"投保人有效身份证件\"\n }, {\n name: \"存折银行卡相关\"\n }]\n }, {\n project: \"犹豫期退保\",\n content: \"在犹豫期内提出解除合同,公司会无息退还全部保费\",\n applicant: \"投保人\",\n receptionTime: \"犹豫期结束前\",\n materialList: [{\n name: \"保险单\"\n }, {\n name: \"申请书\",\n type: 1\n }, {\n name: \"投保人有效身份证件\"\n }, {\n name: \"存折银行卡相关\"\n }, {\n name: \"首期保费发票\"\n }]\n }, {\n project: \"客户资料变更\",\n projectType: 1,\n path: \"/custom/service\",\n query: {\n q: \"m42\"\n },\n content: \"投保人、受保人、受益人的个人信息变更\",\n applicant: \"投保人\",\n receptionTime: \"不限\",\n materialList: [{\n name: \"申请书\",\n type: 1\n }, {\n name: \"必要的证明材料\"\n }]\n }, {\n project: \"联系信息变更\",\n projectType: 1,\n path: \"/custom/service\",\n query: {\n q: \"m43\"\n },\n content: \"地址、电话等信息的变更\",\n applicant: \"投保人\",\n receptionTime: \"不限\",\n materialList: [{\n name: \"申请书\",\n type: 1\n }, {\n name: \"投保人有效身份证件\"\n }]\n }, {\n project: \"交费方式变更\",\n content: \"更改保单的续期交费方式或交费账号\",\n applicant: \"投保人\",\n receptionTime: \"保单交费期满前\",\n materialList: [{\n name: \"申请书\",\n type: 1\n }, {\n name: \"保险单\"\n }]\n }]\n },\n policyChangeContact: {\n phone: \"联系电话\",\n address: \"联系地址\",\n email: \"E-Mail\",\n checkTips: \"本人不同意接收宣传信息\",\n submit: \"确认修改\",\n errorTips: {\n e1: \"請填寫正確的聯繫電話\",\n e2: \"請填寫聯繫地址\",\n e3: \"請填寫正確的E-Mail地址\"\n }\n },\n policyChangeInformation: {\n hkClient: \"是否平安香港客戶\",\n yes: \"是\",\n no: \"否\",\n obj: \"变更对象\",\n name: \"姓名\",\n sex: \"性别\",\n birth: \"出生日期\",\n type: \"证件类型\",\n NO: \"证件号码\",\n validityPeriod: \"证件有效期\",\n nationality: \"国籍\",\n employer: \"工作单位\",\n maritalStatus: \"婚姻状况\",\n submit: \"确认修改\",\n upload: \"附件上传\",\n modifyTips1: \"如需修改请\",\n modifyTips2: \"联系客服\"\n },\n contactUs: {\n service: {\n center: {\n title: \"客户服务中心\",\n address: \"地址:香港尖沙嘴港威永金融大楼\",\n time: \"服务时间:星期一至五9:00-18:00\"\n },\n hotline: {\n title: \"客户服务热线\",\n hk: \"香港号码:(852)2983 8866\",\n cn: \"内地号码:(86)40078 95511\",\n time: \"服务时间:星期一至五9:00-18:00\"\n },\n mail: {\n title: \"客户服务电邮\",\n mail: \"cs@pingan.com.hk\"\n }\n },\n pulbic: {\n title: \"微信公众号\",\n m1: \"登陆「微信」APP, 按右上角的「+」按钮並选择「添加朋友」,选择「公众号」 输入并搜索「平安人寿香港」\",\n m2: \"登陆「微信」APP, 按右上角的「+」按钮並选择「扫一扫」扫描下方二维码(放置二维码)\"\n },\n qrcode: {\n title: \"官方公众号\"\n }\n },\n customService: {\n name: \"客户服务\",\n menu1: \"联系我们\",\n menu2: \"缴付保费\",\n menu3: \"保单查询\",\n menu4: \"保单变更\",\n menu41: \"保单变更指引\",\n menu42: \"联系方式变更\",\n menu43: \"客户资料变更\",\n menu5: \"理赔申请\",\n menu6: \"预约服务\",\n menu7: \"投诉受理\",\n menu8: \"常用表格\",\n insuranceQuery: {\n InsurantNumber: \"保单号码\",\n Insurant: \"受保人\",\n InsurantName: \"险种名称\",\n InsurantAmount: \"保额\",\n effectiveDate: \"保费到期日\",\n period: \"保障年期\",\n t2Title: \"保障内容\",\n t2InsurantClassify: \"险种名称\",\n t2InsurantAmount: \"保额\",\n t3Title: \"客户资料\",\n t3InsurantNameCn: \"投保人姓名(中文)\",\n t3InsurantNameEn: \"投保人姓名(英文)\",\n t3InsurantIdNumber: \"证件号码\",\n t3InsurantContactAddress: \"联系地址\",\n t3InsurantAddress: \"居住地址\",\n t3InsurantMobile: \"手提电话\",\n t3InsurantEmail: \"电子邮箱\",\n t3InsuredNameCn: \"受保人姓名(中文)\",\n t3InsuredNameEn: \"受保人姓名(英文)\",\n t3InsuredBirthday: \"出生日期\",\n t3InsuredIdNumber: \"证件号码\",\n t4Title: \"受益人资料\",\n // t4BeneficiaryInformation\n t4NameCn: \"姓名(中文)\",\n t4NameEn: \"姓名(英文)\",\n t4Relation: \"与受保人关系\",\n t4Allocation: \"分配比例\",\n t5Title: \"缴费资料\",\n t5PaymentPeriod: \"缴费年期\",\n t5PaymentMethod: \"缴费方式\",\n t5PaymentCurrency: \"缴费币种\",\n t5CurrentPremium: \"当期保费\",\n t5PaymentBank: \"缴费银行\",\n t5PaymentAccount: \"缴费账号\",\n t6Title: \"缴费记录\",\n t6PaymentPeriod: \"缴费期\",\n t6PaymentMethod: \"缴费方式\",\n t6ClosingDate: \"实收日期\",\n t6PaymentAmount: \"缴费金额\"\n },\n reservation: {\n submitBtn: '确认',\n contactTypes: ['電話'],\n reservationTypes: ['投保咨询', '代办保单变更'],\n errorTips: {\n e1: \"請填寫該項內容\",\n e2: \"請填寫正確的聯繫方式\"\n }\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tbW9uL2xhbmcvemguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tbW9uL2xhbmcvemguanM/MjNkMCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcblx0bWVzc2FnZToge1xuXHRcdGxvZ2luOiAn55m75b2VJyxcblx0XHRVc2VybmFtZTogJ+eUqOaIt+WQjScsXG5cdFx0UGFzc3dvcmQ6ICflr4bnoIEnLFxuXHRcdENhcHRjaGE6ICfpqozor4HnoIEnLFxuXHRcdExhbmd1YWdlOiAn6K+t6KiAJyxcblx0XHR6aDogJ+S4reaWhycsXG5cdFx0ZW46ICfoi7HmlocnXG5cdH0sXG5cdGdsYmFsVGlwczoge1xuXHRcdHNlc3Npb25Mb3N0OiBcIuS4uuS6huabtOWlveeahOS9k+mqjO+8jOmcgOimgeaCqOeZu+W9leWQjuWGjei/m+ihjOatpOaTjeS9nFwiXG5cdH0sXG5cdG5hdjoge1xuXHRcdGxvZ2luRGF0YToge1xuXHRcdFx0bmFtZTogXCLnmbvpmYZcIixcblx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuazqOWGjFwiLFxuXHRcdFx0XHRwYXRoOiBcIi9yZWdpc3RlclwiLFxuXHRcdFx0XHR0eXBlOiBcIm5vQXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIueZu+mZhlwiLFxuXHRcdFx0XHRwYXRoOiBcIi9sb2dpblwiLFxuXHRcdFx0XHR0eXBlOiBcIm5vQXV0aFwiLFxuXHRcdFx0XHR2YWx1ZTogXCJcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv67mlLnlr4bnoIFcIixcblx0XHRcdFx0cGF0aDogXCIvcGFzc3dvcmQvcmVzZXRcIixcblx0XHRcdFx0dHlwZTogXCJhdXRoXCIsXG5cdFx0XHRcdHZhbHVlOiBcIlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueZu+WHulwiLFxuXHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHR0eXBlOiBcImF1dGhcIixcblx0XHRcdFx0dmFsdWU6IFwibG9nb3V0XCJcblx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdG5hdkxpc3Q6IFt7XG5cdFx0XHRuYW1lOiBcIuS6p+WTgeS7i+e7jVwiLFxuXHRcdFx0cGF0aDogXCIvcHJvZHVjdFwiLFxuXHRcdFx0bGlzdDogW11cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwi5a6i5oi35pyN5YqhXCIsXG5cdFx0XHRwYXRoOiBcIi9jdXN0b20vcHJvZHVjdFwiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLogZTns7vmiJHku6xcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tMVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIue8tOS7mOS/nei0uVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW0yXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d5Y2V5p+l6K+iXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTNcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53ljZXlj5jmm7RcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNDFcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnkIbotZTnlLPor7dcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tNVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIumihOe6puacjeWKoVwiLFxuXHRcdFx0XHRwYXRoOiBcIi9jdXN0b20vc2VydmljZT9xPW02XCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5oqV6K+J5Y+X55CGXCIsXG5cdFx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlP3E9bTdcIlxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLluLjnlKjooajmoLxcIixcblx0XHRcdFx0cGF0aDogXCIvY3VzdG9tL3NlcnZpY2U/cT1tOFwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0bmFtZTogXCLmlrDpl7votYTorq9cIixcblx0XHRcdHBhdGg6IFwiL25ld3MvbGlzdFwiLFxuXHRcdFx0bGlzdDogW11cblx0XHR9LFxuXHRcdHtcblx0XHRcdG5hbWU6IFwi5YWz5LqO5bmz5a6J5Lq65a+/XCIsXG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLlhazlj7jnroDku4tcIixcblx0XHRcdFx0cGF0aDogXCIvcHJvZmlsZVwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIumihuWvvOS6uuamguWGtVwiLFxuXHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHR9LFxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRmb290ZXI6IHtcblx0XHRoa1Bob25lOiBcIuWuouaIt+acjeWKoeeDree6v++8iOmmmea4r++8iVwiLFxuXHRcdGNuUGhvbmU6IFwi5a6i5oi35pyN5Yqh54Ot57q/77yI5YaF5Zyw77yJXCIsXG5cdFx0YWJvdXRVczogXCLlhbPkuo7miJHku6xcIixcblx0XHRjb21wYW55SW50cm9kdWN0aW9uOiBcIuWFrOWPuOS7i+e7jVwiLFxuXHRcdG5ld3M6IFwi5paw6Ze76LWE6K6vXCIsXG5cdFx0am9pblVzOiBcIuWKoOWFpeaIkeS7rFwiLFxuXHRcdGhlbHBDZW50ZXI6IFwi5biu5Yqp5Lit5b+DXCIsXG5cdFx0cHJpdmFjeTogXCLpmpDnp4HmlL/nrZZcIixcblx0XHR0ZXJtczogXCLkvb/nlKjmnaHmrL5cIixcblx0XHRtYXA6IFwi572R56uZ5Zyw5Zu+XCIsXG5cdFx0Y29udGFjdFVzOiBcIuiBlOe7nOaIkeS7rFwiLFxuXHRcdGNvbnRhY3RJbmZvcm1hdGlvbjogXCLogZTns7vmlrnlvI9cIixcblx0XHRzZXJ2aWNlOiBcIuacjeWKoee9keeCuVwiLFxuXHRcdHFyY29kZTogXCLlrpjmlrnlhazkvJflj7dcIixcblx0XHRjb3B5cmlnaHQ6IFwi54mI5p2D5omA5pyJIMKpIOS4reWbveW5s+WuieS/nemZqe+8iOmbhuWbou+8ieiCoeS7veaciemZkOWFrOWPuOacque7j+iuuOWPr+S4jeW+l+WkjeWItuOAgei9rOi9veaIluaRmOe8lu+8jOi/neiAheW/heeptiFcIlxuXHR9LFxuXHRsb2dpbjoge1xuXHRcdHRpdGxlOiBcIuW5s+WuieS4gOi0pumAmlwiLFxuXHRcdGxvZ2luVHlwZTE6IFwi6LSm5a+G55m75b2VXCIsXG5cdFx0bG9naW5UeXBlMjogXCLliqjmgIHlr4bnoIHnmbvlvZVcIixcblx0XHRhY2NvdW50OiBcIui0puWPt1wiLFxuXHRcdGFjY291bnRQbGFjZWhvbGRlcjogXCLor7fovpPlhaXor4Hku7blj7cv5LiA6LSm6YCa55So5oi35ZCNL+aJi+acuuWPt1wiLFxuXHRcdHBhc3N3b3JkOiBcIuWvhueggVwiLFxuXHRcdHBhc3N3b3JkUGxhY2Vob2xkZXI6IFwi6L6T5YWl55m75b2V5a+G56CBXCIsXG5cdFx0dmVyaWZ5UGxhY2Vob2xkZXI6IFwi6K+36L6T5YWl6aqM6K+B56CBXCIsXG5cdFx0YWdyZWU6IFwi5ZCM5oSPXCIsXG5cdFx0cHJvdG9jb2w6IFwi44CK5bmz5a6J5LiA6LSm6YCa5Lya5ZGY5pyN5Yqh5Y2P6K6u44CLXCIsXG5cdFx0bG9naW46IFwi55m75YWlXCIsXG5cdFx0cmVnaXN0ZXI6IFwi5rOo5YaMXCIsXG5cdFx0Zm9yZ2V0OiBcIuW/mOiusOWvhueggVwiLFxuXHRcdG1vYmlsZTogXCLmiYvmnLrlj7dcIixcblx0XHRtb2JpbGVQbGFjZWhvbGRlcjogXCLmiYvmnLrlj7dcIixcblx0XHR2ZXJpZnlDb2RlOiBcIumqjOivgeeggVwiLFxuXHRcdHZlcmlmeUNvZGVQbGFjZWhvbGRlcjogXCLpqozor4HnoIFcIixcblx0XHR2ZXJpZnlDb2RlR2V0OiBcIuiOt+WPlumqjOivgeeggVwiLFxuXHRcdHRpcHM6IHtcblx0XHRcdGUxOiBcIuivt+i+k+WFpei0puWPt+S/oeaBr1wiLFxuXHRcdFx0ZTI6IFwi6K+36L6T5YWl5a+G56CBXCIsXG5cdFx0XHRlMzogXCLor7fovpPlhaXlm77lg4/pqozor4HnoIFcIixcblx0XHRcdGU0OiBcIuivt+WQjOaEj+OAiuW5s+WuieS4gOi0pumAmuS8muWRmOacjeWKoeWNj+iuruOAi1wiLFxuXHRcdFx0ZTU6IFwi6LSm5Y+35oiW5a+G56CB5LiN5q2j56GuXCIsXG5cdFx0XHRvZTA6IFwi6K+36L6T5YWl5q2j56Gu55qE5omL5py65Y+3XCIsXG5cdFx0XHRvZTE6IFwi6K+35YWI6I635Y+W55+t5L+h6aqM6K+B56CBXCIsXG5cdFx0XHRvZTI6IFwi6K+36L6T5YWl5Zu+54mH6aqM6K+B56CBXCIsXG5cdFx0XHRvZTM6IFwi6K+36L6T5YWl55+t5L+h6aqM6K+B56CBXCIsXG5cdFx0XHRvZTQ6IFwi55+t5L+h6aqM6K+B56CB5LiN5q2j56GuXCIsXG5cdFx0fVxuXHR9LFxuXHRzZXNzaW9uOiB7XG5cdFx0c2lkRXhwaXJlOiBcIumVv+aXtumXtOacquaTjeS9nO+8jOS4uuS6huaCqOeahOi0puaIt+WuieWFqO+8jOivt+eZu+W9leWQjuWGjeaTjeS9nFwiLFxuXHR9LFxuXHRyZWdpc3Rlcjoge1xuXHRcdG1vYmlsZU9wdGlvbnM6IFt7XG5cdFx0XHR0eXBlOiBcImhrXCIsXG5cdFx0XHRuYW1lOiBcIummmea4r+aJi+acuuWPt1wiLFxuXHRcdFx0cGxhY2VIb2xkZXI6IFwi6K+36L6T5YWlOOS9jeaJi+acuuWPt+eggVwiLFxuXHRcdFx0YXJlYUNvZGU6IFwiKzg1MlwiXG5cdFx0fSwge1xuXHRcdFx0dHlwZTogXCJ6aFwiLFxuXHRcdFx0bmFtZTogXCLlpKfpmYbmiYvmnLrlj7dcIixcblx0XHRcdHBsYWNlSG9sZGVyOiBcIuivt+i+k+WFpTEx5L2N5omL5py65Y+356CBXCIsXG5cdFx0XHRhcmVhQ29kZTogXCIrODZcIlxuXHRcdH1dLFxuXHRcdGNvdXRUaXBzOiBcIntzZWNvbmR956eS5ZCO6YeN5paw6I635Y+WXCIsXG5cdFx0dGl0bGU6IFwi5qyi6L+O5rOo5YaMXCIsXG5cdFx0dGl0bGUyOiBcIuivt+iuvue9ruaWsOeahOWvhueggVwiLFxuXHRcdG1vYmlsZVBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpTjkvY3miYvmnLrlj7fnoIFcIixcblx0XHR2ZXJpZnlDb2RlUGxhY2Vob2xkZXI6IFwi6K+36L6T5YWl6aqM6K+B56CBXCIsXG5cdFx0dmVyaWZ5Q29kZUdldDogXCLojrflj5bpqozor4HnoIFcIixcblx0XHRhZ3JlZTogXCLlkIzmhI9cIixcblx0XHRwcm90b2NvbDogXCLjgIrlubPlronkuIDotKbpgJrkvJrlkZjmnI3liqHljY/orq7jgItcIixcblx0XHRyZWdpc3RlcjogXCLngrnlh7vms6jlhoxcIixcblx0XHRuZXdQYXNzd29yZDogXCLmlrDlr4bnoIFcIixcblx0XHRuZXdQYXNzd29yZFBsYWNlaG9sZGVyOiBcIui+k+WFpeeZu+W9leWvhueggVwiLFxuXHRcdG5ld1Bhc3N3b3JkU3VyZTogXCLnoa7orqTlr4bnoIFcIixcblx0XHRuZXdQYXNzd29yZFN1cmVQbGFjZWhvbGRlcjogXCLovpPlhaXnmbvlvZXlr4bnoIFcIixcblx0XHRzdXJlOiBcIuehruiupFwiLFxuXHRcdHRpcHM6IHtcblx0XHRcdGUxOiBcIuaJi+acuuWPt+S4jeato+ehru+8jOivt+i+k+WFpeato+ehrueahOaJi+acuuWPt1wiLFxuXHRcdFx0ZTI6IFwi6K+35ZCM5oSP44CK5bmz5a6J5LiA6LSm6YCa5Lya5ZGY5pyN5Yqh5Y2P6K6u44CLXCIsXG5cdFx0XHRlMzogXCLnn63kv6Hpqozor4HnoIHkuI3mraPnoa5cIixcblx0XHRcdGU0OiBcIuivt+WFiOiOt+WPluefreS/oemqjOivgeeggVwiLFxuXHRcdFx0ZTU6IFwi5omL5py65Y+35bey57uP6KKr5rOo5YaM77yM6K+35L2/55So5YW25LuW5omL5py65Y+35rOo5YaM5oiW55u05o6l55m75b2VXCIsXG5cdFx0XHRlNjogXCLor7fovpPlhaXlm77niYfpqozor4HnoIFcIixcblx0XHRcdGU3OiBcIuWvhueggemVv+W6puS4jeiDveWwkeS6jjjkvY1cIixcblx0XHRcdGU4OiBcIuWvhueggeW/hemhu+WQjOaXtuWMheWQq+aVsOWtl+OAgeWtl+avjeOAgeeJueauiuWtl+esplwiLFxuXHRcdFx0ZTk6IFwi5Lik5qyh6L6T5YWl55qE5a+G56CB5LiN5LiA6Ie0XCIsXG5cdFx0XHRlMTA6IFwi6aqM6K+B56CB6L+H5pyf77yM6K+36YeN5paw55Sz6K+36aqM6K+B56CBXCIsXG5cdFx0XHRlMTE6IFwi5rOo5YaM5aSx6LSl77yM6K+36IGU57O75bel5L2c5Lq65ZGYXCIsXG5cdFx0XHRlMTI6IFwi6Ki75YaK5oiQ5YqfXCIsXG5cdFx0fVxuXHR9LFxuXHRwYXNzd29yZENoZWNrOiB7XG5cdFx0ZXJyb3IxOiBcIuWvhueggemVv+W6puS4jeWwkeS6jjjkvY1cIixcblx0XHRlcnJvcjI6IFwi5a+G56CB5Lit5b+F6aG75YyF5ZCr5pWw5a2X44CB5a2X56ym5Lul5Y+K54m55q6K5Y+356CBXCIsXG5cdFx0ZXJyb3IzOiBcIuS4pOasoeWvhueggeS4jeS4gOiHtO+8jOivt+ehruiupOWQjumHjeaWsOi+k+WFpVwiLFxuXHRcdGVycm9yNDogXCLlr4bnoIHkv67mlLnlpLHotKXvvIzor7fnqI3lkI7lho3or5XvvIzmiJbmi6jmiZPlrqLmnI3nlLXor505NTUxMeino+WGs1wiLFxuXHRcdGVycm9yNTogXCLml6flr4bnoIHkuI3mraPnoa7vvIzor7fph43mlrDovpPlhaVcIixcblx0XHRzdWNjZXNzOiBcIuWvhueggeS/ruaUueaIkOWKn1wiXG5cdH0sXG5cdHBhc3N3b3JkUmVzZXQ6IHtcblx0XHRvbGRQd2Q6IFwi5pen5a+G56CBXCIsXG5cdFx0b2xkUHdkUGxhY2Vob2xkZTogXCLor7fovpPlhaXml6flr4bnoIFcIixcblx0XHRjaWRFeHBpcmU6IFwi6ZW/5pe26Ze05pyq5pON5L2c77yM5Li65LqG5oKo55qE6LSm5oi35a6J5YWo77yM6K+36YeN5paw5byA5aeLXCIsXG5cdFx0dHlwZTE6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueggeaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi55So5oi36L6T5YWl5L+h5oGvXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuaJi+acuuWPty/or4Hku7blj7dcIixcblx0XHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHRcdGVycm9yOiBcIuaCqOeahOaJi+acuuWPt+aIluivgeS7tuWPt+i+k+WFpemUmeivr++8jOivt+aguOWvueWQjumHjeaWsOi+k+WFpVwiLFxuXHRcdH0sXG5cdFx0dHlwZTI6IHtcblx0XHRcdHRpdGxlOiBcIuWvhueggeaJvuWbnlwiLFxuXHRcdFx0dDE6IFwi5omL5py655+t5L+h6aqM6K+B56CBXCIsXG5cdFx0XHR0MVBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpemqjOivgeeggVwiLFxuXHRcdFx0c3VibWl0OiBcIuehruiupFwiLFxuXHRcdFx0ZXJyb3IxOiBcIuefreS/oemqjOivgeeggei+k+WFpemUmeivr++8jOivt+aguOWvueWQjumHjeaWsOi+k+WFpVwiLFxuXHRcdFx0ZXJyb3IyOiBcIuefreS/oemqjOivgeeggeW3sue7j+i/h+acn++8jOivt+mHjeaWsOiOt+WPlumqjOivgeeggVwiLFxuXHRcdFx0ZXJyb3IzOiBcIuefreS/oemqjOivgeeggeWPkeaUvuaXtumXtOWwkeS6jjHliIbpkp/vvIzor7fnqI3lkI7lho3or5VcIixcblx0XHR9LFxuXHRcdHR5cGUzOiB7XG5cdFx0XHR0aXRsZTogXCLlr4bnoIHmib7lm55cIixcblx0XHRcdHQxOiBcIuaguOWvuei6q+S7veivgeS/oeaBr1wiLFxuXHRcdFx0dDFQbGFjZWhvbGRlcjogXCJcIixcblx0XHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHR9LFxuXHRcdHR5cGU0OiB7XG5cdFx0XHR0aXRsZTogXCLor7forr7nva7mlrDnmoTlr4bnoIFcIixcblx0XHRcdHQxOiBcIuaWsOWvhueggVwiLFxuXHRcdFx0dDFQbGFjZWhvbGRlcjogXCLor7fovpPlhaXmlrDlr4bnoIFcIixcblx0XHRcdHQyOiBcIuehruiupOWvhueggVwiLFxuXHRcdFx0dDJQbGFjZWhvbGRlcjogXCLor7fph43mlrDovpPlhaXmlrDlr4bnoIFcIixcblx0XHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHR9XG5cdH0sXG5cdGluZm9tYXRpb25JbXByb3ZlOiB7XG5cdFx0dGl0bGU6IFwi6K+35a6M5ZaE5oKo55qE5L+h5oGvXCIsXG5cdFx0dDE6IFwi5aeT5ZCNXCIsXG5cdFx0dDFQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0MjogXCLmgKfliKtcIixcblx0XHR0MlBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHQzOiBcIuWHuueUn+aXpeacn1wiLFxuXHRcdHQzUGxhY2Vob2xkZXI6IFwiXCIsXG5cdFx0dDQ6IFwi6K+B5Lu257G75Z6LXCIsXG5cdFx0dDRQbGFjZWhvbGRlcjogXCJcIixcblx0XHR0NTogXCLor4Hku7blj7fnoIFcIixcblx0XHR0NVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdHN1Ym1pdDogXCLnoa7orqRcIixcblx0XHRjYW5jZWw6IFwi6Lez6L+HXCIsXG5cdFx0Y2FuZGlkYXRlczoge1xuXHRcdFx0c2V4OiBbe1xuXHRcdFx0XHRuYW1lOiBcIueUt1wiLFxuXHRcdFx0XHR2YWx1ZTogXCJNXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLlpbNcIixcblx0XHRcdFx0dmFsdWU6IFwiRlwiXG5cdFx0XHR9XSxcblx0XHRcdGlkVHlwZTogW3tcblx0XHRcdFx0bmFtZTogXCLouqvku73or4FcIixcblx0XHRcdFx0dmFsdWU6IFwiMVwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5oqk54WnXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjJcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWGm+WumOivgeaIluWjq+WFteivgVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIzXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPpgJrooYzor4Ev5Zue5Lmh6K+B5oiW5Y+w6IOe6K+BXCIsXG5cdFx0XHRcdHZhbHVlOiBcIjZcIlxuXHRcdFx0fSwge1xuXHRcdFx0XHRuYW1lOiBcIuWkluWbveS6uuawuOS5heWxheeVmei6q+S7veivgVwiLFxuXHRcdFx0XHR2YWx1ZTogXCIwXCJcblx0XHRcdH0sIHtcblx0XHRcdFx0bmFtZTogXCLmuK/mvrPlsYXmsJHlsYXkvY/or4FcIixcblx0XHRcdFx0dmFsdWU6IFwiVlwiXG5cdFx0XHR9LCB7XG5cdFx0XHRcdG5hbWU6IFwi5Y+w5rm+5bGF5rCR5bGF5L2P6K+BXCIsXG5cdFx0XHRcdHZhbHVlOiBcIldcIlxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdHN1Y2Nlc3NNc2c6IFwi5pu05paw5oiQ5YqfXCIsXG5cdFx0ZXJyb3JUaXBzOiB7XG5cdFx0XHRlMTogXCLor7floavlhpnlp5PlkI3kv6Hmga9cIixcblx0XHRcdGUyOiBcIuivt+mAieaLqeaAp+WIq1wiLFxuXHRcdFx0ZTM6IFwi6K+36YCJ5oup55Sf5pelXCIsXG5cdFx0XHRlNDogXCLor7fpgInmi6nor4Hku7bnsbvlnotcIixcblx0XHRcdGU1OiBcIuivt+Whq+WGmeivgeS7tuWPt+eggVwiLFxuXHRcdFx0ZTY6IFwi5oKo5aGr5YaZ55qE6K+B5Lu25Y+356CB5pyJ6K+vXCIsXG5cdFx0XHRlNzogXCLmgqjloavlhpnnmoTkv6Hmga/mnInor6/vvIzor7fmoLjlrp7lkI7ph43mlrDmj5DkuqRcIixcblx0XHR9XG5cdH0sXG5cdGluZGV4OiB7XG5cdFx0bmV3czogXCLmlrDpl7votYTorq9cIixcblx0XHRuZXdNb3JlOiBcIuafpeeci+abtOWkmlwiLFxuXHRcdHJlY29tbWVuZDoge1xuXHRcdFx0aXRlbTE6IHtcblx0XHRcdFx0YnRuOiBcIuS6huino+abtOWkmuS6p+WTgVwiLFxuXHRcdFx0XHR0MTogXCLkuLroh6rlt7Hlkozlrrbkurrlr7vmib7kuIDku73kv53pmpxcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMjoge1xuXHRcdFx0XHRidG46IFwi56uL5Y2z6aKE57qmXCIsXG5cdFx0XHRcdHQxOiBcIuWcqOe6v+mihOe6piDkuJPkuJrmnI3liqFcIixcblx0XHRcdH0sXG5cdFx0XHRpdGVtMzoge1xuXHRcdFx0XHRidG46IFwi5a6i5oi35pyN5YqhXCIsXG5cdFx0XHRcdHQxOiBcIuS4k+S4muWuouacjeS4uuS9oOacjeWKoVwiLFxuXHRcdFx0XHR0MjogXCLmg7Pkuobop6Pmm7TlpJrvvIzlj6/oh7TnlLVcIixcblx0XHRcdFx0dDM6IFwiOTU1MTFcIixcblx0XHRcdFx0dDQ6IFwi6IGU57uc5oiR5Lus77yM5oiW6L+b5YWlXCIsXG5cdFx0XHR9XG5cdFx0fSxcblx0fSxcblx0Y29tcGxhaW50QWNjZXB0YW5jZToge1xuXHRcdG5hbWU6IFwi5aeT5ZCNXCIsXG5cdFx0bmFtZVBsYWNlaG9sZGVyOiBcIuWnk+WQjVwiLFxuXHRcdGNvbnRhY3RUeXBlOiBcIuiBlOe7nOaWueW8j1wiLFxuXHRcdGVtYWlsOiBcIueUtemCruWcsOWdgFwiLFxuXHRcdHF1ZXN0aW9uOiBcIumXrumimOaIluaEj+ingVwiLFxuXHRcdHF1ZXN0aW9uUGxhY2VIb2xkZXI6IFwi77yI5a2X5pWw5LiN6LaF6L+HNTAw5a2X77yJXCIsXG5cdFx0b3JkZXJObzogXCLkv53ljZXnvJblj7dcIixcblx0XHRvcmRlck5vUGxhY2VIb2xkZXI6IFwi5aaC5oKo5Li65bmz5a6J5a6i5oi377yM6K+35o+Q5L6b5L+d5Y2V57yW5Y+3XCIsXG5cdFx0Y29udGFjdFRpbWU6IFwi5pyf5pyb6IGU57uc5pe26Ze0XCIsXG5cdFx0bm90aWNlMTogXCLmnKzooajmoLzmiYDmlLbpm4bnmoTkuKrkurrotYTmlpnmoLnmja7jgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3lpITnkIblj4rlj6rkvJrooqvnlKjkvZzkuo7ogZTnu5wg6ZiB5LiL5LmL55So44CC54S26ICM5omA5pS26ZuG55qE5Liq5Lq66LWE5paZ5pyq57uP5oKo5piO56Gu5o6I5p2D5bCG5LiN5Lya6L2s56e76Iez44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5YiX5piO5Lul5aSW5LmL56ys5LiJ6ICF5py65p6E44CC5oKo5Y+v6YCJ5oup5LiN5ZCR5oiR5Lus5o+Q5L6b5omA6ZyA55qE5Liq5Lq66LWE5paZ77yM5oOf6L+Z5qC35Y+v6IO95a+86Ie05oiR5Lus5LiN6IO96IGU57uc5oKo44CC5oKo5Lqm5Y+v5qC55o2u44CM5bmz5a6J5Lq65a+/6aaZ5riv5Liq5Lq66LWE5paZ5pS26ZuG5aOw5piO44CN5LmL5p2D5Yip5p+l6ZiF5Y+K5pu05q2j5Liq5Lq66LWE5paZ44CCXCIsXG5cdFx0bm90aWNlMjogXCLmnKzkurrnjrDnoa7orqTmmI7nmb3lubblkIzmhI/mnKzkurrnmoTkuKrkurrotYTmlpnmoLnmja7kuK3pk7bkurrlr7/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7kvZzku6XkuIrov7DnlKjpgJTjgIJcIixcblx0XHRjb250YWN0VHlwZXM6IFsn55S16K+dJywgJ+eUtemCriddLFxuXHRcdGVycm9yVGlwczoge1xuXHRcdFx0ZTE6IFwi6K+35aGr5YaZ6K+l6aG55YaF5a65XCIsXG5cdFx0XHRlMjogXCLor7floavlhpnmraPnoa7nmoTogZTns7vmlrnlvI9cIlxuXHRcdH0sXG5cdH0sXG5cdHJlc2VydmF0aW9uOiB7XG5cdFx0bmFtZTogXCLlp5PlkI1cIixcblx0XHRuYW1lUGxhY2Vob2xkZXI6IFwi5aeT5ZCNXCIsXG5cdFx0Y29udGFjdFR5cGU6IFwi6IGU57uc5pa55byPXCIsXG5cdFx0Y29udGFjdDogXCLogZTnu5znlLXor51cIixcblx0XHRjb250YWN0UGxhY2Vob2xkZXI6IFwi6aaZ5riv5Y+356CBL+WGheWcsOWPt+eggVwiLFxuXHRcdHJlc2VydmF0aW9uVHlwZTogXCLpooTnuqbnsbvlnotcIixcblx0XHRyZXNlcnZhdGlvblJlbWFyazogXCLpooTnuqbor7TmmI5cIixcblx0XHRyZXNlcnZhdGlvblJlbWFya1BsYWNlaG9sZGVyOiBcIuivt+eugOWNleivtOaYjuaCqOaDs+imgeWSqOivoueahOS6p+WTgeaIluS4muWKoVwiLFxuXHRcdGhrQ2xpZW50OiBcIuaYr+WQpuW5s+Wuiemmmea4r+WuouaIt1wiLFxuXHRcdHllczogXCLmmK9cIixcblx0XHRubzogXCLlkKZcIixcblx0XHRjb250YWN0VGltZTogXCLmnJ/mnJvogZTnu5zml7bpl7RcIixcblx0XHRub3RpY2UxOiBcIuacrOihqOagvOaJgOaUtumbhueahOS4quS6uui1hOaWmeagueaNruOAjOW5s+WuieS6uuWvv+mmmea4r+S4quS6uui1hOaWmeaUtumbhuWjsOaYjuOAjeWkhOeQhuWPiuWPquS8muiiq+eUqOS9nOS6juiBlOe7nCDpmIHkuIvkuYvnlKjjgILnhLbogIzmiYDmlLbpm4bnmoTkuKrkurrotYTmlpnmnKrnu4/mgqjmmI7noa7mjojmnYPlsIbkuI3kvJrovaznp7voh7PjgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3liJfmmI7ku6XlpJbkuYvnrKzkuInogIXmnLrmnoTjgILmgqjlj6/pgInmi6nkuI3lkJHmiJHku6zmj5DkvpvmiYDpnIDnmoTkuKrkurrotYTmlpnvvIzmg5/ov5nmoLflj6/og73lr7zoh7TmiJHku6zkuI3og73ogZTnu5zmgqjjgILmgqjkuqblj6/moLnmja7jgIzlubPlronkurrlr7/pppnmuK/kuKrkurrotYTmlpnmlLbpm4blo7DmmI7jgI3kuYvmnYPliKnmn6XpmIXlj4rmm7TmraPkuKrkurrotYTmlpnjgIJcIixcblx0XHRub3RpY2UyOiBcIuacrOS6uueOsOehruiupOaYjueZveW5tuWQjOaEj+acrOS6uueahOS4quS6uui1hOaWmeagueaNruS4remTtuS6uuWvv+S4quS6uui1hOaWmeaUtumbhuWjsOaYjuS9nOS7peS4iui/sOeUqOmAlOOAglwiLFxuXHR9LFxuXHRwYXltZW50VHlwZToge1xuXHRcdG1lbnUxOiBcIuS6suS4tOWuouacjeS4reW/g+S7mOasvlwiLFxuXHRcdG1lbnUyOiBcIue9kemTtuS7mOasvlwiLFxuXHRcdG1lbnUzOiBcIueUteaxh+S7mOasvlwiLFxuXHRcdG1lbnU0OiBcIuafnOWRmOacuuS7mOasvlwiLFxuXHRcdG1lbnU1OiBcIuOAjOe8tOi0ueeBteOAjeS7mOasvlwiLFxuXHRcdG1lbnU2OiBcIummmea4r+mCruaUv+WxgFwiLFxuXHR9LFxuXHRwcm9kdWN0OiB7XG5cdFx0YnRuUG9zaXRpb246IFwi6aKE57qm5pyN5YqhXCIsXG5cdFx0aWNvblByb2JsZW06IFwi5bi46KeB6Zeu6aKYXCIsXG5cdFx0aWNvblByb2Nlc3M6IFwi5oqV5L+d5rWB56iLXCIsXG5cdFx0aWNvblByb2R1Y3Q6IFwi5Lqn5ZOB6K+m5oOFXCJcblx0fSxcblx0Y3VzdG9tUHJvZHVjdDoge1xuXHRcdG1lbnUxOiBcIuiBlOezu+aIkeS7rFwiLFxuXHRcdG1lbnUyOiBcIue8tOS7mOS/nei0uVwiLFxuXHRcdG1lbnUzOiBcIuS/neWNleafpeivolwiLFxuXHRcdG1lbnU0OiBcIuS/neWNleWPmOabtFwiLFxuXHRcdG1lbnU1OiBcIueQhui1lOeUs+ivt1wiLFxuXHRcdG1lbnU2OiBcIumihOe6puacjeWKoVwiLFxuXHRcdG1lbnU3OiBcIuaKleivieWPl+eQhlwiLFxuXHRcdG1lbnU4OiBcIuW4uOeUqOihqOagvFwiLFxuXHR9LFxuXHRjb21tb25Gb3JtOiB7XG5cdFx0aGVhZDE6IFwi6KGo5qC857G75Z6LXCIsXG5cdFx0aGVhZDI6IFwi6KGo5qC85ZCN56ewXCIsXG5cdFx0aGVhZDM6IFwi5L2/55So6K+05piOXCIsXG5cdFx0aGVhZDQ6IFwi6ZmE5Lu2XCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6L295paH5qGjXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHR5cGU6IFwi57y06LS557G7XCIsXG5cdFx0XHRsaXN0OiBbe1xuXHRcdFx0XHRuYW1lOiBcIuOAjOeUteWtkOWFpei0puacjeWKoeOAjeWPiumTtuihjOaIt+WPozxicj7nm7TmjqXku5jmrL7mjojmnYPnlLPor7dcIixcblx0XHRcdFx0ZGVzYzogXCLnlLPor7forr7nq4vjgIznlLXlrZDlhaXotKbmnI3liqHjgI3lj4rpk7booYzmiLflj6M8YnI+55u05o6l5LuY5qy+5o6I5p2D5pe26aG75o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv6HnlKjljaHmiLflj6Pnm7TmjqXku5jmrL7mjojmnYPkuaZcIixcblx0XHRcdFx0ZGVzYzogXCLnlLPor7fkv6HnlKjljaHmiLflj6Pnm7TmjqXku5jmrL7mjojmnYPml7bpobvmj5DkvptcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR0eXBlOiBcIuS/neWNleWPmOabtOexu1wiLFxuXHRcdFx0bGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLkv53pmanlkIjlkIzop6PpmaTnlLPor7fkuaZcIixcblx0XHRcdFx0ZGVzYzogXCLpgIDkv53jgIHnirnosavmnJ/pgIDkv53kuJrliqHpgILnlKhcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/nemZqeWQiOWQjOWPmOabtOeUs+ivt+S5pu+8iOS/neWNlei0t+asvui/mOasvuexu++8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS/neWNlei0t+asvuOAgei/mOasvuS4muWKoemAgueUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zmp5ZCI5ZCM5Y+Y5pu055Sz6K+35Lmm77yI5L+d6Zmp5ZCI5ZCM6K6h5YiS5Y+Y5pu057G777yJXCIsXG5cdFx0XHRcdGRlc2M6IFwi5Yqg5L+d44CB5YeP5L+d44CB5paw5aKe6ZmE6Zmp44CB5aSN5pWI562J5Lia5Yqh6YCC55SoXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLkv53pmanlkIjlkIzlj5jmm7TnlLPor7fkuabvvIjlrqLmiLfkv6Hmga/lj5jmm7TnsbvvvIlcIixcblx0XHRcdFx0ZGVzYzogXCLln7rmnKzkv6Hmga/lj5jmm7TkuJrliqHpgILnlKhcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuS/nemZqeWQiOWQjOWPmOabtOeUs+ivt+S5pu+8iOWuouaIt+adg+ebiuWPmOabtOexu++8iVwiLFxuXHRcdFx0XHRkZXNjOiBcIuS6pOi0ueaWueW8j+OAgeiHquWeq+mAieaLqeadg+WPmOabtOOAgeihpeWPkeetieS4muWKoemAgueUqFwiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5o6I5p2D5aeU5omY5LmmXCIsXG5cdFx0XHRcdGRlc2M6IFwi5aeU5omY5LuW5Lq65Luj5Yqe5pe26aG75o+Q5L6bXCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLnqI7mlLblo7DmmI5cIixcblx0XHRcdFx0ZGVzYzogXCJDUlPopoHmsYJcIixcblx0XHRcdFx0ZG93bmxvYWQ6IFwiXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuWBpeW6t+WRiuefpVwiLFxuXHRcdFx0XHRkZXNjOiBcIumhu+S6jOasoeaguOS/neeahOS4muWKoemhu+aPkOS+m1wiLFxuXHRcdFx0XHRkb3dubG9hZDogXCJcIixcblx0XHRcdH1cblxuXHRcdFx0XVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dHlwZTogXCLnkIbotZTnsbtcIixcblx0XHRcdGxpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55CG6LWU55Sz6K+35LmmXCIsXG5cdFx0XHRcdGRlc2M6IFwi57q46LSo55Sz6K+355qE5bqU5aSH5paH5Lu2XCIsXG5cdFx0XHRcdGRvd25sb2FkOiBcIlwiLFxuXHRcdFx0fV1cblx0XHR9LFxuXHRcdF1cblx0fSxcblx0cG9saWN5Q2hhbmdlR3VpZGU6IHtcblx0XHRub3RpY2U6IFwi5aaC6ZyA5YGa5YW25LuW5L+d5Y2V5Y+Y5pu06IGU57O75a6i5pyN77yI6IGU57O75a6i5pyN6LaF6ZO+5o6l6Lez6L2s5YWs5Y+46IGU57O75L+h5oGv6aG177yJXCIsXG5cdFx0aGVhZDE6IFwi6aG555uuXCIsXG5cdFx0aGVhZDI6IFwi5YW35L2T5YaF5a65XCIsXG5cdFx0aGVhZDM6IFwi55Sz6K+36LWE5qC85Lq6XCIsXG5cdFx0aGVhZDQ6IFwi5Y+X55CG5pe26Ze0XCIsXG5cdFx0aGVhZDU6IFwi5bqU5aSH5p2Q5paZXCIsXG5cdFx0ZG93bmxvYWQ6IFwi5LiL6L295paH5qGjXCIsXG5cdFx0Zm9ybTogW3tcblx0XHRcdHByb2plY3Q6IFwi6YCA5L+dXCIsXG5cdFx0XHRjb250ZW50OiBcIuWcqOeKueixq+acn+WQjuino+mZpOWQiOWQjO+8jOWFrOWPuOWwhumAgOi/mOS/neWNleeOsOmHkeS7t+WAvOaIluacqua7oeacn+WHgOS/nei0ueOAgu+8iOW+heS6p+WTgeeyvueul+ehruiupO+8iVwiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53ljZXmlYjlipvnu4jmraLliY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLkv53pmanljZVcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6K+35LmmXCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veivgeS7tlwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLlrZjmipjpk7booYzljaHnm7jlhbNcIixcblx0XHRcdH1cblx0XHRcdF0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwcm9qZWN0OiBcIueKueixq+acn+mAgOS/nVwiLFxuXHRcdFx0Y29udGVudDogXCLlnKjnirnosavmnJ/lhoXmj5Dlh7rop6PpmaTlkIjlkIzvvIzlhazlj7jkvJrml6Dmga/pgIDov5jlhajpg6jkv53otLlcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi54q56LGr5pyf57uT5p2f5YmNXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zmp5Y2VXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIueUs+ivt+S5plwiLFxuXHRcdFx0XHR0eXBlOiAxLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0bmFtZTogXCLmipXkv53kurrmnInmlYjouqvku73or4Hku7ZcIixcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5a2Y5oqY6ZO26KGM5Y2h55u45YWzXCIsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIummluacn+S/nei0ueWPkeelqFwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5a6i5oi36LWE5paZ5Y+Y5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00MlwiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLmipXkv53kurrjgIHlj5fkv53kurrjgIHlj5fnm4rkurrnmoTkuKrkurrkv6Hmga/lj5jmm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6K+35LmmXCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuW/heimgeeahOivgeaYjuadkOaWmVwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi6IGU57O75L+h5oGv5Y+Y5pu0XCIsXG5cdFx0XHRwcm9qZWN0VHlwZTogMSxcblx0XHRcdHBhdGg6IFwiL2N1c3RvbS9zZXJ2aWNlXCIsXG5cdFx0XHRxdWVyeToge1xuXHRcdFx0XHRxOiBcIm00M1wiXG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudDogXCLlnLDlnYDjgIHnlLXor53nrYnkv6Hmga/nmoTlj5jmm7RcIixcblx0XHRcdGFwcGxpY2FudDogXCLmipXkv53kurpcIixcblx0XHRcdHJlY2VwdGlvblRpbWU6IFwi5LiN6ZmQXCIsXG5cdFx0XHRtYXRlcmlhbExpc3Q6IFt7XG5cdFx0XHRcdG5hbWU6IFwi55Sz6K+35LmmXCIsXG5cdFx0XHRcdHR5cGU6IDEsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRuYW1lOiBcIuaKleS/neS6uuacieaViOi6q+S7veivgeS7tlwiLFxuXHRcdFx0fVxuXHRcdFx0XSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHByb2plY3Q6IFwi5Lqk6LS55pa55byP5Y+Y5pu0XCIsXG5cdFx0XHRjb250ZW50OiBcIuabtOaUueS/neWNleeahOe7reacn+S6pOi0ueaWueW8j+aIluS6pOi0uei0puWPt1wiLFxuXHRcdFx0YXBwbGljYW50OiBcIuaKleS/neS6ulwiLFxuXHRcdFx0cmVjZXB0aW9uVGltZTogXCLkv53ljZXkuqTotLnmnJ/mu6HliY1cIixcblx0XHRcdG1hdGVyaWFsTGlzdDogW3tcblx0XHRcdFx0bmFtZTogXCLnlLPor7fkuaZcIixcblx0XHRcdFx0dHlwZTogMSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG5hbWU6IFwi5L+d6Zmp5Y2VXCIsXG5cdFx0XHR9XG5cdFx0XHRdLFxuXHRcdH0sXG5cdFx0XVxuXHR9LFxuXHRwb2xpY3lDaGFuZ2VDb250YWN0OiB7XG5cdFx0cGhvbmU6IFwi6IGU57O755S16K+dXCIsXG5cdFx0YWRkcmVzczogXCLogZTns7vlnLDlnYBcIixcblx0XHRlbWFpbDogXCJFLU1haWxcIixcblx0XHRjaGVja1RpcHM6IFwi5pys5Lq65LiN5ZCM5oSP5o6l5pS25a6j5Lyg5L+h5oGvXCIsXG5cdFx0c3VibWl0OiBcIuehruiupOS/ruaUuVwiLFxuXHRcdGVycm9yVGlwczoge1xuXHRcdFx0ZTE6IFwi6KuL5aGr5a+r5q2j56K655qE6IGv57mr6Zu76KmxXCIsXG5cdFx0XHRlMjogXCLoq4vloavlr6voga/nuavlnLDlnYBcIixcblx0XHRcdGUzOiBcIuiri+Whq+Wvq+ato+eiuueahEUtTWFpbOWcsOWdgFwiXG5cdFx0fVxuXHR9LFxuXHRwb2xpY3lDaGFuZ2VJbmZvcm1hdGlvbjoge1xuXHRcdGhrQ2xpZW50OiBcIuaYr+WQpuW5s+Wuiemmmea4r+WuouaItlwiLFxuXHRcdHllczogXCLmmK9cIixcblx0XHRubzogXCLlkKZcIixcblx0XHRvYmo6IFwi5Y+Y5pu05a+56LGhXCIsXG5cdFx0bmFtZTogXCLlp5PlkI1cIixcblx0XHRzZXg6IFwi5oCn5YirXCIsXG5cdFx0YmlydGg6IFwi5Ye655Sf5pel5pyfXCIsXG5cdFx0dHlwZTogXCLor4Hku7bnsbvlnotcIixcblx0XHROTzogXCLor4Hku7blj7fnoIFcIixcblx0XHR2YWxpZGl0eVBlcmlvZDogXCLor4Hku7bmnInmlYjmnJ9cIixcblx0XHRuYXRpb25hbGl0eTogXCLlm73nsY1cIixcblx0XHRlbXBsb3llcjogXCLlt6XkvZzljZXkvY1cIixcblx0XHRtYXJpdGFsU3RhdHVzOiBcIuWpmuWnu+eKtuWGtVwiLFxuXHRcdHN1Ym1pdDogXCLnoa7orqTkv67mlLlcIixcblx0XHR1cGxvYWQ6IFwi6ZmE5Lu25LiK5LygXCIsXG5cdFx0bW9kaWZ5VGlwczE6IFwi5aaC6ZyA5L+u5pS56K+3XCIsXG5cdFx0bW9kaWZ5VGlwczI6IFwi6IGU57O75a6i5pyNXCIsXG5cdH0sXG5cdGNvbnRhY3RVczoge1xuXHRcdHNlcnZpY2U6IHtcblx0XHRcdGNlbnRlcjoge1xuXHRcdFx0XHR0aXRsZTogXCLlrqLmiLfmnI3liqHkuK3lv4NcIixcblx0XHRcdFx0YWRkcmVzczogXCLlnLDlnYDvvJrpppnmuK/lsJbmspnlmLTmuK/lqIHmsLjph5Hono3lpKfmpbxcIixcblx0XHRcdFx0dGltZTogXCLmnI3liqHml7bpl7TvvJrmmJ/mnJ/kuIDoh7PkupQ5OjAwLTE4OjAwXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG90bGluZToge1xuXHRcdFx0XHR0aXRsZTogXCLlrqLmiLfmnI3liqHng63nur9cIixcblx0XHRcdFx0aGs6IFwi6aaZ5riv5Y+356CB77yaKDg1MikyOTgzIDg4NjZcIixcblx0XHRcdFx0Y246IFwi5YaF5Zyw5Y+356CB77yaKDg2KTQwMDc4IDk1NTExXCIsXG5cdFx0XHRcdHRpbWU6IFwi5pyN5Yqh5pe26Ze077ya5pif5pyf5LiA6Iez5LqUOTowMC0xODowMFwiXG5cdFx0XHR9LFxuXHRcdFx0bWFpbDoge1xuXHRcdFx0XHR0aXRsZTogXCLlrqLmiLfmnI3liqHnlLXpgq5cIixcblx0XHRcdFx0bWFpbDogXCJjc0BwaW5nYW4uY29tLmhrXCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdHB1bGJpYzoge1xuXHRcdFx0dGl0bGU6IFwi5b6u5L+h5YWs5LyX5Y+3XCIsXG5cdFx0XHRtMTogXCLnmbvpmYbjgIzlvq7kv6HjgI1BUFDvvIwg5oyJ5Y+z5LiK6KeS55qE44CMK+OAjeaMiemSruS4pumAieaLqeOAjOa3u+WKoOaci+WPi+OAje+8jOmAieaLqeOAjOWFrOS8l+WPt+OAjSDovpPlhaXlubbmkJzntKLjgIzlubPlronkurrlr7/pppnmuK/jgI1cIixcblx0XHRcdG0yOiBcIueZu+mZhuOAjOW+ruS/oeOAjUFQUO+8jCDmjInlj7PkuIrop5LnmoTjgIwr44CN5oyJ6ZKu5Lim6YCJ5oup44CM5omr5LiA5omr44CN5omr5o+P5LiL5pa55LqM57u056CB77yI5pS+572u5LqM57u056CB77yJXCJcblx0XHR9LFxuXHRcdHFyY29kZToge1xuXHRcdFx0dGl0bGU6IFwi5a6Y5pa55YWs5LyX5Y+3XCJcblx0XHR9XG5cdH0sXG5cdGN1c3RvbVNlcnZpY2U6IHtcblx0XHRuYW1lOiBcIuWuouaIt+acjeWKoVwiLFxuXHRcdG1lbnUxOiBcIuiBlOezu+aIkeS7rFwiLFxuXHRcdG1lbnUyOiBcIue8tOS7mOS/nei0uVwiLFxuXHRcdG1lbnUzOiBcIuS/neWNleafpeivolwiLFxuXHRcdG1lbnU0OiBcIuS/neWNleWPmOabtFwiLFxuXHRcdG1lbnU0MTogXCLkv53ljZXlj5jmm7TmjIflvJVcIixcblx0XHRtZW51NDI6IFwi6IGU57O75pa55byP5Y+Y5pu0XCIsXG5cdFx0bWVudTQzOiBcIuWuouaIt+i1hOaWmeWPmOabtFwiLFxuXHRcdG1lbnU1OiBcIueQhui1lOeUs+ivt1wiLFxuXHRcdG1lbnU2OiBcIumihOe6puacjeWKoVwiLFxuXHRcdG1lbnU3OiBcIuaKleivieWPl+eQhlwiLFxuXHRcdG1lbnU4OiBcIuW4uOeUqOihqOagvFwiLFxuXHRcdGluc3VyYW5jZVF1ZXJ5OiB7XG5cdFx0XHRJbnN1cmFudE51bWJlcjogXCLkv53ljZXlj7fnoIFcIixcblx0XHRcdEluc3VyYW50OiBcIuWPl+S/neS6ulwiLFxuXHRcdFx0SW5zdXJhbnROYW1lOiBcIumZqeenjeWQjeensFwiLFxuXHRcdFx0SW5zdXJhbnRBbW91bnQ6IFwi5L+d6aKdXCIsXG5cdFx0XHRlZmZlY3RpdmVEYXRlOiBcIuS/nei0ueWIsOacn+aXpVwiLFxuXHRcdFx0cGVyaW9kOiBcIuS/nemanOW5tOacn1wiLFxuXG5cdFx0XHR0MlRpdGxlOiBcIuS/nemanOWGheWuuVwiLFxuXHRcdFx0dDJJbnN1cmFudENsYXNzaWZ5OiBcIumZqeenjeWQjeensFwiLFxuXHRcdFx0dDJJbnN1cmFudEFtb3VudDogXCLkv53pop1cIixcblxuXHRcdFx0dDNUaXRsZTogXCLlrqLmiLfotYTmlplcIixcblx0XHRcdHQzSW5zdXJhbnROYW1lQ246IFwi5oqV5L+d5Lq65aeT5ZCN77yI5Lit5paH77yJXCIsXG5cdFx0XHR0M0luc3VyYW50TmFtZUVuOiBcIuaKleS/neS6uuWnk+WQje+8iOiLseaWh++8iVwiLFxuXHRcdFx0dDNJbnN1cmFudElkTnVtYmVyOiBcIuivgeS7tuWPt+eggVwiLFxuXHRcdFx0dDNJbnN1cmFudENvbnRhY3RBZGRyZXNzOiBcIuiBlOezu+WcsOWdgFwiLFxuXHRcdFx0dDNJbnN1cmFudEFkZHJlc3M6IFwi5bGF5L2P5Zyw5Z2AXCIsXG5cdFx0XHR0M0luc3VyYW50TW9iaWxlOiBcIuaJi+aPkOeUteivnVwiLFxuXHRcdFx0dDNJbnN1cmFudEVtYWlsOiBcIueUteWtkOmCrueusVwiLFxuXHRcdFx0dDNJbnN1cmVkTmFtZUNuOiBcIuWPl+S/neS6uuWnk+WQje+8iOS4reaWh++8iVwiLFxuXHRcdFx0dDNJbnN1cmVkTmFtZUVuOiBcIuWPl+S/neS6uuWnk+WQje+8iOiLseaWh++8iVwiLFxuXHRcdFx0dDNJbnN1cmVkQmlydGhkYXk6IFwi5Ye655Sf5pel5pyfXCIsXG5cdFx0XHR0M0luc3VyZWRJZE51bWJlcjogXCLor4Hku7blj7fnoIFcIixcblxuXHRcdFx0dDRUaXRsZTogXCLlj5fnm4rkurrotYTmlplcIiwgLy8gdDRCZW5lZmljaWFyeUluZm9ybWF0aW9uXG5cdFx0XHR0NE5hbWVDbjogXCLlp5PlkI3vvIjkuK3mlofvvIlcIixcblx0XHRcdHQ0TmFtZUVuOiBcIuWnk+WQje+8iOiLseaWh++8iVwiLFxuXHRcdFx0dDRSZWxhdGlvbjogXCLkuI7lj5fkv53kurrlhbPns7tcIixcblx0XHRcdHQ0QWxsb2NhdGlvbjogXCLliIbphY3mr5TkvotcIixcblxuXHRcdFx0dDVUaXRsZTogXCLnvLTotLnotYTmlplcIixcblx0XHRcdHQ1UGF5bWVudFBlcmlvZDogXCLnvLTotLnlubTmnJ9cIixcblx0XHRcdHQ1UGF5bWVudE1ldGhvZDogXCLnvLTotLnmlrnlvI9cIixcblx0XHRcdHQ1UGF5bWVudEN1cnJlbmN5OiBcIue8tOi0ueW4geenjVwiLFxuXHRcdFx0dDVDdXJyZW50UHJlbWl1bTogXCLlvZPmnJ/kv53otLlcIixcblx0XHRcdHQ1UGF5bWVudEJhbms6IFwi57y06LS56ZO26KGMXCIsXG5cdFx0XHR0NVBheW1lbnRBY2NvdW50OiBcIue8tOi0uei0puWPt1wiLFxuXG5cdFx0XHR0NlRpdGxlOiBcIue8tOi0ueiusOW9lVwiLFxuXHRcdFx0dDZQYXltZW50UGVyaW9kOiBcIue8tOi0ueacn1wiLFxuXHRcdFx0dDZQYXltZW50TWV0aG9kOiBcIue8tOi0ueaWueW8j1wiLFxuXHRcdFx0dDZDbG9zaW5nRGF0ZTogXCLlrp7mlLbml6XmnJ9cIixcblx0XHRcdHQ2UGF5bWVudEFtb3VudDogXCLnvLTotLnph5Hpop1cIixcblx0XHR9LFxuXHRcdHJlc2VydmF0aW9uOiB7XG5cdFx0XHRzdWJtaXRCdG46ICfnoa7orqQnLFxuXHRcdFx0Y29udGFjdFR5cGVzOiBbJ+mbu+ipsSddLFxuXHRcdFx0cmVzZXJ2YXRpb25UeXBlczogWyfmipXkv53lkqjor6InLCAn5Luj5Yqe5L+d5Y2V5Y+Y5pu0J10sXG5cdFx0XHRlcnJvclRpcHM6IHtcblx0XHRcdFx0ZTE6IFwi6KuL5aGr5a+r6Kmy6aCF5YWn5a65XCIsXG5cdFx0XHRcdGUyOiBcIuiri+Whq+Wvq+ato+eiuueahOiBr+e5q+aWueW8j1wiXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBU0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFwQkE7QUE0QkE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQS9CQTtBQXNDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFGQTtBQVBBO0FBNUVBO0FBMkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFuQkE7QUFnQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWkE7QUExQkE7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBMUJBO0FBbUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBRkE7QUExQkE7QUErQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUE5Q0E7QUF3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFUQTtBQUhBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFiQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBUEE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQXJDQTtBQThDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQWpFQTtBQTJFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUlBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFJQTtBQURBO0FBZkE7QUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFJQTtBQUNBO0FBRkE7QUFLQTtBQURBO0FBSUE7QUFEQTtBQUlBO0FBREE7QUFsQkE7QUF3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQURBO0FBZEE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQURBO0FBZEE7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBREE7QUFUQTtBQXpGQTtBQXlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBTkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQVpBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBREE7QUF2QkE7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNDQTtBQTZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSkE7QUExREE7QUFybUJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/common/lang/zh.js\n");
/***/ }),
/***/ "./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&":
/*!***************************************************************************!*\
!*** ./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js& ***!
\***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./dropdown.js?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24uanM/ZjBjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMi0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fYmFiZWwtbG9hZGVyQDguMC42QGJhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19lc2xpbnQtbG9hZGVyQDIuMi4xQGVzbGludC1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTMtMCEuL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0xMi0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fYmFiZWwtbG9hZGVyQDguMC42QGJhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19lc2xpbnQtbG9hZGVyQDIuMi4xQGVzbGludC1sb2FkZXIvaW5kZXguanM/P3JlZi0tMTMtMCEuL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./src/components/home/dropdown/dropdown.vue":
/*!***************************************************!*\
!*** ./src/components/home/dropdown/dropdown.vue ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\");\n/* harmony import */ var _dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dropdown.js?vue&type=script&lang=js& */ \"./src/components/home/dropdown/dropdown.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _dropdown_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n \"3b4f35af\",\n null\n \n)\n\n/* hot reload */\nif (true) {\n var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3b4f35af')) {\n api.createRecord('3b4f35af', component.options)\n } else {\n api.reload('3b4f35af', component.options)\n }\n module.hot.accept(/*! ./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\");\n(function () {\n api.rerender('3b4f35af', {\n render: _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n staticRenderFns: _dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n })\n })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n }\n}\ncomponent.options.__file = \"src/components/home/dropdown/dropdown.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZHJvcGRvd24vZHJvcGRvd24udnVlPzI1YWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2I0ZjM1YWYmc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZHJvcGRvd24uanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Ryb3Bkb3duLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBcIjNiNGYzNWFmXCIsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL1VzZXJzL2pvZS9Eb2N1bWVudHMvZ2l0L3Bpbmdhbi9oa2xpZmUvcGluZ2FuLWxpZmUtaW5kZXgtcHJvL25vZGVfbW9kdWxlcy9fdnVlLWhvdC1yZWxvYWQtYXBpQDIuMy40QHZ1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnM2I0ZjM1YWYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnM2I0ZjM1YWYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnM2I0ZjM1YWYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYjRmMzVhZiZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczYjRmMzVhZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvaG9tZS9kcm9wZG93bi9kcm9wZG93bi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.vue\n");
/***/ }),
/***/ "./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&":
/*!*************************************************************************************************************!*\
!*** ./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& ***!
\*************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_style_index_0_id_3b4f35af_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT9iY2E3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9M2I0ZjM1YWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTNiNGYzNWFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.vue?vue&type=style&index=0&id=3b4f35af&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&":
/*!**********************************************************************************************!*\
!*** ./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& ***!
\**********************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./dropdown.vue?vue&type=template&id=3b4f35af&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_dropdown_vue_vue_type_template_id_3b4f35af_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYjRmMzVhZiZzY29wZWQ9dHJ1ZSYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9ob21lL2Ryb3Bkb3duL2Ryb3Bkb3duLnZ1ZT9hMTA1Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCItIWNhY2hlLWxvYWRlcj97XFxcImNhY2hlRGlyZWN0b3J5XFxcIjpcXFwibm9kZV9tb2R1bGVzLy5jYWNoZS92dWUtbG9hZGVyXFxcIixcXFwiY2FjaGVJZGVudGlmaWVyXFxcIjpcXFwiNGNmMDIzMTQtdnVlLWxvYWRlci10ZW1wbGF0ZVxcXCJ9IS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNiNGYzNWFmJnNjb3BlZD10cnVlJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/components/home/dropdown/dropdown.vue?vue&type=template&id=3b4f35af&scoped=true&\n");
/***/ }),
/***/ "./src/components/home/footer/footer.js?vue&type=script&lang=js&":
/*!***********************************************************************!*\
!*** ./src/components/home/footer/footer.js?vue&type=script&lang=js& ***!
\***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./footer.js?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/footer/footer.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLmpzPzlmNmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9mb290ZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2VzbGludC1sb2FkZXJAMi4yLjFAZXNsaW50LWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMy0wIS4vZm9vdGVyLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./src/components/home/footer/footer.vue":
/*!***********************************************!*\
!*** ./src/components/home/footer/footer.vue ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\");\n/* harmony import */ var _footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./footer.js?vue&type=script&lang=js& */ \"./src/components/home/footer/footer.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _footer_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n \"f678fc22\",\n null\n \n)\n\n/* hot reload */\nif (true) {\n var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('f678fc22')) {\n api.createRecord('f678fc22', component.options)\n } else {\n api.reload('f678fc22', component.options)\n }\n module.hot.accept(/*! ./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\");\n(function () {\n api.rerender('f678fc22', {\n render: _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n staticRenderFns: _footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n })\n })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n }\n}\ncomponent.options.__file = \"src/components/home/footer/footer.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZT8xZDIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZm9vdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mNjc4ZmMyMiZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9mb290ZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Zvb3Rlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiZjY3OGZjMjJcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvam9lL0RvY3VtZW50cy9naXQvcGluZ2FuL2hrbGlmZS9waW5nYW4tbGlmZS1pbmRleC1wcm8vbm9kZV9tb2R1bGVzL192dWUtaG90LXJlbG9hZC1hcGlAMi4zLjRAdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdmNjc4ZmMyMicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdmNjc4ZmMyMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdmNjc4ZmMyMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZm9vdGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mNjc4ZmMyMiZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdmNjc4ZmMyMicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvaG9tZS9mb290ZXIvZm9vdGVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.vue\n");
/***/ }),
/***/ "./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&":
/*!*********************************************************************************************************!*\
!*** ./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& ***!
\*********************************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_style_index_0_id_f678fc22_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9ZjY3OGZjMjImbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/MmUzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zvb3Rlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1mNjc4ZmMyMiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZm9vdGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPWY2NzhmYzIyJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.vue?vue&type=style&index=0&id=f678fc22&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&":
/*!******************************************************************************************!*\
!*** ./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true& ***!
\******************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./footer.vue?vue&type=template&id=f678fc22&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_footer_vue_vue_type_template_id_f678fc22_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2Zvb3Rlci9mb290ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWY2NzhmYzIyJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvZm9vdGVyL2Zvb3Rlci52dWU/NzZiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLSFjYWNoZS1sb2FkZXI/e1xcXCJjYWNoZURpcmVjdG9yeVxcXCI6XFxcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclxcXCIsXFxcImNhY2hlSWRlbnRpZmllclxcXCI6XFxcIjRjZjAyMzE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcXFwifSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zvb3Rlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjY3OGZjMjImc2NvcGVkPXRydWUmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/footer/footer.vue?vue&type=template&id=f678fc22&scoped=true&\n");
/***/ }),
/***/ "./src/components/home/header/header.js?vue&type=script&lang=js&":
/*!***********************************************************************!*\
!*** ./src/components/home/header/header.js?vue&type=script&lang=js& ***!
\***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!./header.js?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/components/home/header/header.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLmpzPzIyZDMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9oZWFkZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTEyLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19iYWJlbC1sb2FkZXJAOC4wLjZAYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2VzbGludC1sb2FkZXJAMi4yLjFAZXNsaW50LWxvYWRlci9pbmRleC5qcz8/cmVmLS0xMy0wIS4vaGVhZGVyLmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/header/header.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./src/components/home/header/header.vue":
/*!***********************************************!*\
!*** ./src/components/home/header/header.vue ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\");\n/* harmony import */ var _header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header.js?vue&type=script&lang=js& */ \"./src/components/home/header/header.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _header_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n \"6fba8daf\",\n null\n \n)\n\n/* hot reload */\nif (true) {\n var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6fba8daf')) {\n api.createRecord('6fba8daf', component.options)\n } else {\n api.reload('6fba8daf', component.options)\n }\n module.hot.accept(/*! ./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\");\n(function () {\n api.rerender('6fba8daf', {\n render: _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n staticRenderFns: _header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n })\n })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n }\n}\ncomponent.options.__file = \"src/components/home/header/header.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLnZ1ZT9lOTM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZmJhOGRhZiZzY29wZWQ9dHJ1ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9oZWFkZXIuanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2hlYWRlci5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNmZiYThkYWZcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvVXNlcnMvam9lL0RvY3VtZW50cy9naXQvcGluZ2FuL2hrbGlmZS9waW5nYW4tbGlmZS1pbmRleC1wcm8vbm9kZV9tb2R1bGVzL192dWUtaG90LXJlbG9hZC1hcGlAMi4zLjRAdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2ZmJhOGRhZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2ZmJhOGRhZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2ZmJhOGRhZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZmJhOGRhZiZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2ZmJhOGRhZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvaG9tZS9oZWFkZXIvaGVhZGVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/header/header.vue\n");
/***/ }),
/***/ "./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&":
/*!*********************************************************************************************************!*\
!*** ./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& ***!
\*********************************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_style_index_0_id_6fba8daf_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NmZiYThkYWYmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/NDEzYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD02ZmJhOGRhZiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtc3R5bGUtbG9hZGVyQDQuMS4yQHZ1ZS1zdHlsZS1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jc3MtbG9hZGVyQDEuMC4xQGNzcy1sb2FkZXIvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Bvc3Rjc3MtbG9hZGVyQDMuMC4wQHBvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Nhc3MtbG9hZGVyQDcuMy4xQHNhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTgtb25lT2YtMS0zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY2FjaGUtbG9hZGVyQDIuMC4xQGNhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL192dWUtbG9hZGVyQDE1LjcuMUB2dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTZmYmE4ZGFmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/components/home/header/header.vue?vue&type=style&index=0&id=6fba8daf&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&":
/*!******************************************************************************************!*\
!*** ./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true& ***!
\******************************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./header.vue?vue&type=template&id=6fba8daf&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_header_vue_vue_type_template_id_6fba8daf_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29tcG9uZW50cy9ob21lL2hlYWRlci9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZmYmE4ZGFmJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2hvbWUvaGVhZGVyL2hlYWRlci52dWU/ZTljYSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLSFjYWNoZS1sb2FkZXI/e1xcXCJjYWNoZURpcmVjdG9yeVxcXCI6XFxcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclxcXCIsXFxcImNhY2hlSWRlbnRpZmllclxcXCI6XFxcIjRjZjAyMzE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcXFwifSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmZiYThkYWYmc2NvcGVkPXRydWUmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/components/home/header/header.vue?vue&type=template&id=6fba8daf&scoped=true&\n");
/***/ }),
/***/ "./src/main.js":
/*!*********************!*\
!*** ./src/main.js ***!
\*********************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.array.iterator.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_array_iterator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.promise.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_promise_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_object_assign_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.assign.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_object_assign_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es6_object_assign_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es7_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js */ \"./node_modules/_core-js@2.6.10@core-js/modules/es7.promise.finally.js\");\n/* harmony import */ var _Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es7_promise_finally_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_Users_joe_Documents_git_pingan_hklife_pingan_life_index_pro_node_modules_core_js_2_6_10_core_js_modules_es7_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vue_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue-i18n */ \"./node_modules/_vue-i18n@8.15.0@vue-i18n/dist/vue-i18n.esm.js\");\n/* harmony import */ var _App_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./App.vue */ \"./src/App.vue\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./router */ \"./src/router.js\");\n/* harmony import */ var _store_index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./store/index */ \"./src/store/index.js\");\n/* harmony import */ var vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! vue-awesome-swiper */ \"./node_modules/_vue-awesome-swiper@3.1.3@vue-awesome-swiper/dist/vue-awesome-swiper.js\");\n/* harmony import */ var vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var swiper_dist_css_swiper_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! swiper/dist/css/swiper.css */ \"./node_modules/_swiper@4.5.1@swiper/dist/css/swiper.css\");\n/* harmony import */ var swiper_dist_css_swiper_css__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(swiper_dist_css_swiper_css__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mock__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./mock */ \"./src/mock/index.js\");\n\n\n\n\n\n\n\n\n\n // require styles\n\n\nvue__WEBPACK_IMPORTED_MODULE_4__[\"default\"].use(vue_awesome_swiper__WEBPACK_IMPORTED_MODULE_9___default.a);\n\n_mock__WEBPACK_IMPORTED_MODULE_11__[\"default\"].bootstrap(); // import 'amfe-flexible';\n\nvue__WEBPACK_IMPORTED_MODULE_4__[\"default\"].config.productionTip = false; // Purecss\n// import Purecss from 'purecss'\n// Vue.use(Purecss);\n// 国际化\n\nvue__WEBPACK_IMPORTED_MODULE_4__[\"default\"].use(vue_i18n__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\nvar i18n = new vue_i18n__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n locale: localStorage.getItem(\"lang\") || 'tc',\n // 语言标识\n //this.$i18n.locale // 通过切换locale的值来实现语言切换\n messages: {\n 'tc': __webpack_require__(/*! @/common/lang/tc */ \"./src/common/lang/tc.js\"),\n // 繁体语言包\n 'zh': __webpack_require__(/*! @/common/lang/zh */ \"./src/common/lang/zh.js\"),\n // 简体语言包\n 'en': __webpack_require__(/*! @/common/lang/en */ \"./src/common/lang/en.js\") // 英文语言包\n\n }\n});\nnew vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n i18n: i18n,\n router: _router__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n store: _store_index__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n render: function render(h) {\n return h(_App_vue__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n },\n mounted: function mounted() {\n document.dispatchEvent(new Event('render-event'));\n }\n}).$mount('#app');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbWFpbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9tYWluLmpzPzU2ZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IFZ1ZUkxOG4gZnJvbSAndnVlLWkxOG4nO1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC52dWUnO1xuaW1wb3J0IHJvdXRlciBmcm9tICcuL3JvdXRlcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnLi9zdG9yZS9pbmRleCc7XG5cbmltcG9ydCBWdWVBd2Vzb21lU3dpcGVyIGZyb20gJ3Z1ZS1hd2Vzb21lLXN3aXBlcidcbi8vIHJlcXVpcmUgc3R5bGVzXG5pbXBvcnQgJ3N3aXBlci9kaXN0L2Nzcy9zd2lwZXIuY3NzJ1xuVnVlLnVzZShWdWVBd2Vzb21lU3dpcGVyKVxuXG5cbmltcG9ydCBNb2NrIGZyb20gJy4vbW9jaydcbk1vY2suYm9vdHN0cmFwKCk7XG5cbi8vIGltcG9ydCAnYW1mZS1mbGV4aWJsZSc7XG5cblZ1ZS5jb25maWcucHJvZHVjdGlvblRpcCA9IGZhbHNlXG5cbi8vIFB1cmVjc3Ncbi8vIGltcG9ydCBQdXJlY3NzIGZyb20gJ3B1cmVjc3MnXG4vLyBWdWUudXNlKFB1cmVjc3MpO1xuXG4vLyDlm73pmYXljJZcblZ1ZS51c2UoVnVlSTE4bilcbmNvbnN0IGkxOG4gPSBuZXcgVnVlSTE4bih7XG5cdGxvY2FsZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsYW5nXCIpIHx8ICd0YycsIC8vIOivreiogOagh+ivhlxuXHQvL3RoaXMuJGkxOG4ubG9jYWxlIC8vIOmAmui/h+WIh+aNomxvY2FsZeeahOWAvOadpeWunueOsOivreiogOWIh+aNolxuXHRtZXNzYWdlczoge1xuXHRcdCd0Yyc6IHJlcXVpcmUoJ0AvY29tbW9uL2xhbmcvdGMnKSwgLy8g57mB5L2T6K+t6KiA5YyFXG5cdFx0J3poJzogcmVxdWlyZSgnQC9jb21tb24vbGFuZy96aCcpLCAvLyDnroDkvZPor63oqIDljIVcblx0XHQnZW4nOiByZXF1aXJlKCdAL2NvbW1vbi9sYW5nL2VuJyksIC8vIOiLseaWh+ivreiogOWMhVxuXHR9XG59KVxuXG5uZXcgVnVlKHtcblx0aTE4bixcblx0cm91dGVyLFxuXHRzdG9yZSxcblx0cmVuZGVyOiBoID0+IGgoQXBwKSxcblx0bW91bnRlZDogKCkgPT4ge1xuXHRcdGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZW5kZXItZXZlbnQnKSk7XG5cdH1cbn0pLiRtb3VudCgnI2FwcCcpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVBBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/main.js\n");
/***/ }),
/***/ "./src/mock/data/user.js":
/*!*******************************!*\
!*** ./src/mock/data/user.js ***!
\*******************************/
/*! exports provided: LoginUsers, Users */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LoginUsers\", function() { return LoginUsers; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Users\", function() { return Users; });\n/* harmony import */ var mockjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mockjs */ \"./node_modules/_mockjs@1.1.0@mockjs/dist/mock.js\");\n/* harmony import */ var mockjs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(mockjs__WEBPACK_IMPORTED_MODULE_0__);\n\nvar LoginUsers = [{\n id: 1,\n username: 'admin',\n password: 'admin',\n avatar: 'https://raw.githubusercontent.com/taylorchen709/markdown-images/master/vueadmin/user.png',\n name: '张某某'\n}];\nvar Users = [];\n\nfor (var i = 0; i < 5; i++) {\n Users.push(mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.mock({\n id: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.guid(),\n province: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.province(),\n city: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.city(),\n fieldName: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.cname(),\n address: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.mock('@county(true)'),\n 'age|18-60': 1,\n birth: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.date(),\n sex: mockjs__WEBPACK_IMPORTED_MODULE_0___default.a.Random.integer(0, 1)\n }));\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9jay9kYXRhL3VzZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbW9jay9kYXRhL3VzZXIuanM/MWUxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTW9jayBmcm9tICdtb2NranMnO1xuY29uc3QgTG9naW5Vc2VycyA9IFtcbiAge1xuICAgIGlkOiAxLFxuICAgIHVzZXJuYW1lOiAnYWRtaW4nLFxuICAgIHBhc3N3b3JkOiAnYWRtaW4nLFxuICAgIGF2YXRhcjogJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90YXlsb3JjaGVuNzA5L21hcmtkb3duLWltYWdlcy9tYXN0ZXIvdnVlYWRtaW4vdXNlci5wbmcnLFxuICAgIG5hbWU6ICflvKDmn5Dmn5AnXG4gIH1cbl07XG5cbmNvbnN0IFVzZXJzID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gIFVzZXJzLnB1c2goTW9jay5tb2NrKHtcbiAgICBpZDogTW9jay5SYW5kb20uZ3VpZCgpLFxuICAgIHByb3ZpbmNlOiBNb2NrLlJhbmRvbS5wcm92aW5jZSgpLFxuICAgIGNpdHk6IE1vY2suUmFuZG9tLmNpdHkoKSxcbiAgICBmaWVsZE5hbWU6IE1vY2suUmFuZG9tLmNuYW1lKCksXG4gICAgYWRkcmVzczogTW9jay5tb2NrKCdAY291bnR5KHRydWUpJyksXG4gICAgJ2FnZXwxOC02MCc6IDEsXG4gICAgYmlydGg6IE1vY2suUmFuZG9tLmRhdGUoKSxcbiAgICBzZXg6IE1vY2suUmFuZG9tLmludGVnZXIoMCwgMSlcbiAgfSkpO1xufVxuXG5leHBvcnQgeyBMb2dpblVzZXJzLCBVc2VycyB9O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mock/data/user.js\n");
/***/ }),
/***/ "./src/mock/index.js":
/*!***************************!*\
!*** ./src/mock/index.js ***!
\***************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mock__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mock */ \"./src/mock/mock.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_mock__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9jay9pbmRleC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9tb2NrL2luZGV4LmpzPzI0NWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vY2sgZnJvbSAnLi9tb2NrJztcblxuZXhwb3J0IGRlZmF1bHQgbW9jaztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mock/index.js\n");
/***/ }),
/***/ "./src/mock/mock.js":
/*!**************************!*\
!*** ./src/mock/mock.js ***!
\**************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ \"./node_modules/_axios@0.19.0@axios/index.js\");\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios-mock-adapter */ \"./node_modules/_axios-mock-adapter@1.17.0@axios-mock-adapter/src/index.js\");\n/* harmony import */ var axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _data_user__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data/user */ \"./src/mock/data/user.js\");\n\n\n\nvar _Users = _data_user__WEBPACK_IMPORTED_MODULE_2__[\"Users\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * mock bootstrap\n */\n bootstrap: function bootstrap() {\n return; // 紧在dev环境下使用\n\n if (true) {\n return;\n }\n\n var mock = new axios_mock_adapter__WEBPACK_IMPORTED_MODULE_1___default.a(axios__WEBPACK_IMPORTED_MODULE_0___default.a); // mock success request\n\n mock.onGet('/success').reply(200, {\n msg: 'success'\n }); // mock error request\n\n mock.onGet('/error').reply(500, {\n msg: 'failure'\n }); // 拦截 get方法demo\n\n mock.onGet('/path1/path2/getdemo').reply(function (config) {\n // 拦截参数\n var _config$params = config.params,\n params1 = _config$params.params1,\n params2 = _config$params.params2;\n return new Promise(function (resolve, reject) {\n var content = {};\n var success = true;\n resolve([200, {\n code: 2000,\n msg: '请求成功',\n success: success,\n content: content\n }]);\n });\n }); // 拦截post方法demo\n\n mock.onPost('/path1/path2/postdemo').reply(function (config) {\n var _JSON$parse = JSON.parse(config.data),\n params1 = _JSON$parse.params1,\n params2 = _JSON$parse.params2;\n\n return new Promise(function (resolve, reject) {\n var content = {};\n var success = true;\n resolve([200, {\n code: 2000,\n msg: '请求成功',\n success: success,\n content: content\n }]);\n });\n });\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbW9jay9tb2NrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL21vY2svbW9jay5qcz85NTIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgTW9ja0FkYXB0ZXIgZnJvbSAnYXhpb3MtbW9jay1hZGFwdGVyJztcbmltcG9ydCB7XG4gIExvZ2luVXNlcnMsXG4gIFVzZXJzXG59IGZyb20gJy4vZGF0YS91c2VyJztcbmxldCBfVXNlcnMgPSBVc2VycztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAvKipcbiAgICogbW9jayBib290c3RyYXBcbiAgICovXG4gIGJvb3RzdHJhcCgpIHtcbiAgICByZXR1cm47XG4gICAgLy8g57Sn5ZyoZGV2546v5aKD5LiL5L2/55SoXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG1vY2sgPSBuZXcgTW9ja0FkYXB0ZXIoYXhpb3MpO1xuXG4gICAgLy8gbW9jayBzdWNjZXNzIHJlcXVlc3RcbiAgICBtb2NrLm9uR2V0KCcvc3VjY2VzcycpLnJlcGx5KDIwMCwge1xuICAgICAgbXNnOiAnc3VjY2VzcydcbiAgICB9KTtcblxuICAgIC8vIG1vY2sgZXJyb3IgcmVxdWVzdFxuICAgIG1vY2sub25HZXQoJy9lcnJvcicpLnJlcGx5KDUwMCwge1xuICAgICAgbXNnOiAnZmFpbHVyZSdcbiAgICB9KTtcblxuICAgIC8vIOaLpuaIqiBnZXTmlrnms5VkZW1vXG4gICAgbW9jay5vbkdldCgnL3BhdGgxL3BhdGgyL2dldGRlbW8nKS5yZXBseShjb25maWcgPT4ge1xuICAgICAgLy8g5oum5oiq5Y+C5pWwXG4gICAgICBsZXQge1xuICAgICAgICBwYXJhbXMxLFxuICAgICAgICBwYXJhbXMyXG4gICAgICB9ID0gY29uZmlnLnBhcmFtcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBjb250ZW50ID0ge307XG4gICAgICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZShbMjAwLCB7XG4gICAgICAgICAgY29kZTogMjAwMCxcbiAgICAgICAgICBtc2c6ICfor7fmsYLmiJDlip8nLFxuICAgICAgICAgIHN1Y2Nlc3MsXG4gICAgICAgICAgY29udGVudFxuICAgICAgICB9XSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIOaLpuaIqnBvc3Tmlrnms5VkZW1vXG4gICAgbW9jay5vblBvc3QoJy9wYXRoMS9wYXRoMi9wb3N0ZGVtbycpLnJlcGx5KGNvbmZpZyA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICBwYXJhbXMxLFxuICAgICAgICBwYXJhbXMyXG4gICAgICB9ID0gSlNPTi5wYXJzZShjb25maWcuZGF0YSk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgY29udGVudCA9IHt9O1xuICAgICAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIHJlc29sdmUoWzIwMCwge1xuICAgICAgICAgIGNvZGU6IDIwMDAsXG4gICAgICAgICAgbXNnOiAn6K+35rGC5oiQ5YqfJyxcbiAgICAgICAgICBzdWNjZXNzLFxuICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgfV0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBREE7QUFDQTtBQUlBO0FBQ0E7QUFEQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBQUE7QUFBQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBRUE7QUEzREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mock/mock.js\n");
/***/ }),
/***/ "./src/pages/index/index.js?vue&type=script&lang=js&":
/*!**************************************************!*\
!*** ./src/pages/index?vue&type=script&lang=js& ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/_babel-loader@8.0.6@babel-loader/lib!../../../node_modules/_eslint-loader@2.2.1@eslint-loader??ref--13-0!.?vue&type=script&lang=js& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_babel-loader@8.0.6@babel-loader/lib/index.js!./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js?!./src/pages/index/index.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_12_0_node_modules_babel_loader_8_0_6_babel_loader_lib_index_js_node_modules_eslint_loader_2_2_1_eslint_loader_index_js_ref_13_0_index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXguanM/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3BhZ2VzL2luZGV4PzQ5OTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMTItMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2JhYmVsLWxvYWRlckA4LjAuNkBiYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fZXNsaW50LWxvYWRlckAyLjIuMUBlc2xpbnQtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTEzLTAhLi9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/pages/index/index.js?vue&type=script&lang=js&\n");
/***/ }),
/***/ "./src/pages/index/index.vue":
/*!***********************************!*\
!*** ./src/pages/index/index.vue ***!
\***********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\");\n/* harmony import */ var _index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! .?vue&type=script&lang=js& */ \"./src/pages/index/index.js?vue&type=script&lang=js&\");\n/* empty/unused harmony star reexport *//* harmony import */ var _index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/_vue-loader@15.7.1@vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(_node_modules_vue_loader_15_7_1_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(\n _index_js_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"],\n false,\n null,\n \"1badc801\",\n null\n \n)\n\n/* hot reload */\nif (true) {\n var api = __webpack_require__(/*! ./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js */ \"./node_modules/_vue-hot-reload-api@2.3.4@vue-hot-reload-api/dist/index.js\")\n api.install(__webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\"))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1badc801')) {\n api.createRecord('1badc801', component.options)\n } else {\n api.reload('1badc801', component.options)\n }\n module.hot.accept(/*! ./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { /* harmony import */ _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\");\n(function () {\n api.rerender('1badc801', {\n render: _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n staticRenderFns: _index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]\n })\n })(__WEBPACK_OUTDATED_DEPENDENCIES__); }.bind(this))\n }\n}\ncomponent.options.__file = \"src/pages/index/index.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3BhZ2VzL2luZGV4L2luZGV4LnZ1ZT80NjNlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiYWRjODAxJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2luZGV4LmpzP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9pbmRleC5qcz92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9pbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0xYmFkYzgwMSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCIxYmFkYzgwMVwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9Vc2Vycy9qb2UvRG9jdW1lbnRzL2dpdC9waW5nYW4vaGtsaWZlL3Bpbmdhbi1saWZlLWluZGV4LXByby9ub2RlX21vZHVsZXMvX3Z1ZS1ob3QtcmVsb2FkLWFwaUAyLjMuNEB2dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzFiYWRjODAxJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFiYWRjODAxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFiYWRjODAxJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWJhZGM4MDEmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWJhZGM4MDEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9wYWdlcy9pbmRleC9pbmRleC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/pages/index/index.vue\n");
/***/ }),
/***/ "./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&":
/*!*********************************************************************************************!*\
!*** ./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& ***!
\*********************************************************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/_vue-style-loader@4.1.2@vue-style-loader??ref--8-oneOf-1-0!../../../node_modules/_css-loader@1.0.1@css-loader??ref--8-oneOf-1-1!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/_postcss-loader@3.0.0@postcss-loader/src??ref--8-oneOf-1-2!../../../node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true& */ \"./node_modules/_vue-style-loader@4.1.2@vue-style-loader/index.js?!./node_modules/_css-loader@1.0.1@css-loader/index.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/stylePostLoader.js!./node_modules/_postcss-loader@3.0.0@postcss-loader/src/index.js?!./node_modules/_sass-loader@7.3.1@sass-loader/dist/cjs.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\");\n/* harmony import */ var _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n /* harmony default export */ __webpack_exports__[\"default\"] = (_node_modules_vue_style_loader_4_1_2_vue_style_loader_index_js_ref_8_oneOf_1_0_node_modules_css_loader_1_0_1_css_loader_index_js_ref_8_oneOf_1_1_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_3_0_0_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_7_3_1_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1badc801_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0___default.a); //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MWJhZGM4MDEmbGFuZz1zY3NzJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/YzA3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLXN0eWxlLWxvYWRlckA0LjEuMkB2dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fY3NzLWxvYWRlckAxLjAuMUBjc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0xIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19wb3N0Y3NzLWxvYWRlckAzLjAuMEBwb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tOC1vbmVPZi0xLTIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19zYXNzLWxvYWRlckA3LjMuMUBzYXNzLWxvYWRlci9kaXN0L2Nqcy5qcz8/cmVmLS04LW9uZU9mLTEtMyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTFiYWRjODAxJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1zdHlsZS1sb2FkZXJANC4xLjJAdnVlLXN0eWxlLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2Nzcy1sb2FkZXJAMS4wLjFAY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS04LW9uZU9mLTEtMSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fcG9zdGNzcy1sb2FkZXJAMy4wLjBAcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPz9yZWYtLTgtb25lT2YtMS0yIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fc2Fzcy1sb2FkZXJANy4zLjFAc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tOC1vbmVPZi0xLTMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL19jYWNoZS1sb2FkZXJAMi4wLjFAY2FjaGUtbG9hZGVyL2Rpc3QvY2pzLmpzPz9yZWYtLTAtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbmRleC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0xYmFkYzgwMSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/pages/index/index.vue?vue&type=style&index=0&id=1badc801&lang=scss&scoped=true&\n");
/***/ }),
/***/ "./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&":
/*!******************************************************************************!*\
!*** ./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true& ***!
\******************************************************************************/
/*! exports provided: render, staticRenderFns */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!cache-loader?{\"cacheDirectory\":\"node_modules/.cache/vue-loader\",\"cacheIdentifier\":\"4cf02314-vue-loader-template\"}!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/_vue-loader@15.7.1@vue-loader/lib??vue-loader-options!./index.vue?vue&type=template&id=1badc801&scoped=true& */ \"./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"4cf02314-vue-loader-template\\\"}!./node_modules/_vue-loader@15.7.1@vue-loader/lib/loaders/templateLoader.js?!./node_modules/_cache-loader@2.0.1@cache-loader/dist/cjs.js?!./node_modules/_vue-loader@15.7.1@vue-loader/lib/index.js?!./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"render\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return _cache_loader_cacheDirectory_node_modules_cache_vue_loader_cacheIdentifier_4cf02314_vue_loader_template_node_modules_vue_loader_15_7_1_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_cache_loader_2_0_1_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_15_7_1_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_template_id_1badc801_scoped_true___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcGFnZXMvaW5kZXgvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiYWRjODAxJnNjb3BlZD10cnVlJi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9wYWdlcy9pbmRleC9pbmRleC52dWU/MWJhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLSFjYWNoZS1sb2FkZXI/e1xcXCJjYWNoZURpcmVjdG9yeVxcXCI6XFxcIm5vZGVfbW9kdWxlcy8uY2FjaGUvdnVlLWxvYWRlclxcXCIsXFxcImNhY2hlSWRlbnRpZmllclxcXCI6XFxcIjRjZjAyMzE0LXZ1ZS1sb2FkZXItdGVtcGxhdGVcXFwifSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX3Z1ZS1sb2FkZXJAMTUuNy4xQHZ1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvX2NhY2hlLWxvYWRlckAyLjAuMUBjYWNoZS1sb2FkZXIvZGlzdC9janMuanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9fdnVlLWxvYWRlckAxNS43LjFAdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYmFkYzgwMSZzY29wZWQ9dHJ1ZSZcIiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/pages/index/index.vue?vue&type=template&id=1badc801&scoped=true&\n");
/***/ }),
/***/ "./src/router.js":
/*!***********************!*\
!*** ./src/router.js ***!
\***********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.function.name */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.function.name.js\");\n/* harmony import */ var core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_function_name__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-router */ \"./node_modules/_vue-router@3.1.3@vue-router/dist/vue-router.esm.js\");\n/* harmony import */ var _pages_index_index_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/index/index.vue */ \"./src/pages/index/index.vue\");\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_2__[\"default\"].use(vue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n/**\n * 重写路由的push方法\n */\n\nvar routerPush = vue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype.push;\n\nvue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"].prototype.push = function push(location) {\n return routerPush.call(this, location).catch(function (error) {\n return error;\n });\n};\n\nvar routes = [{\n path: '/',\n name: 'index',\n component: _pages_index_index_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n meta: {\n title: '平安人寿保险官网'\n }\n}, {\n path: '/login',\n name: 'login',\n component: function component() {\n return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(3)]).then(__webpack_require__.bind(null, /*! ./pages/login/login.vue */ \"./src/pages/login/login.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/register',\n name: 'register',\n component: function component() {\n return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(5)]).then(__webpack_require__.bind(null, /*! ./pages/register/register.vue */ \"./src/pages/register/register.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/password/find',\n name: 'passwordFind',\n component: function component() {\n return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(8)]).then(__webpack_require__.bind(null, /*! ./pages/password-find/password-find.vue */ \"./src/pages/password-find/password-find.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/password/reset',\n name: 'passwordReset',\n component: function component() {\n return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(9)]).then(__webpack_require__.bind(null, /*! ./pages/password-reset/password-reset.vue */ \"./src/pages/password-reset/password-reset.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/infomation/improve',\n name: 'infomationImprove',\n component: function component() {\n return Promise.all(/*! import() */[__webpack_require__.e(0), __webpack_require__.e(7)]).then(__webpack_require__.bind(null, /*! ./pages/infomation-improve/infomation-improve.vue */ \"./src/pages/infomation-improve/infomation-improve.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/profile',\n name: 'profile',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 13).then(__webpack_require__.bind(null, /*! ./pages/profile/profile.vue */ \"./src/pages/profile/profile.vue\"));\n },\n meta: {\n title: '公司简介'\n }\n}, {\n path: '/terms',\n name: 'terms',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 15).then(__webpack_require__.bind(null, /*! ./pages/terms/terms.vue */ \"./src/pages/terms/terms.vue\"));\n },\n meta: {\n title: '使用条款'\n }\n}, {\n path: '/privacy',\n name: 'privacy',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 12).then(__webpack_require__.bind(null, /*! ./pages/privacy/privacy.vue */ \"./src/pages/privacy/privacy.vue\"));\n },\n meta: {\n title: '隐私政策'\n }\n}, {\n path: '/protocol',\n name: 'protocol',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 14).then(__webpack_require__.bind(null, /*! ./pages/protocol/protocol.vue */ \"./src/pages/protocol/protocol.vue\"));\n },\n meta: {\n title: '平安一賬通會員服務協議'\n }\n}, {\n path: '/news/list',\n name: 'newsList',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 2).then(__webpack_require__.bind(null, /*! ./pages/news-list/news-list.vue */ \"./src/pages/news-list/news-list.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/news/detail',\n name: 'newsDetail',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 10).then(__webpack_require__.bind(null, /*! ./pages/news-detail/news-detail.vue */ \"./src/pages/news-detail/news-detail.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/product',\n name: 'product',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 4).then(__webpack_require__.bind(null, /*! ./pages/product/product.vue */ \"./src/pages/product/product.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/custom/service',\n name: 'customService',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 1).then(__webpack_require__.bind(null, /*! ./pages/custom-service/custom-service.vue */ \"./src/pages/custom-service/custom-service.vue\"));\n },\n meta: {\n title: '保单查询'\n }\n}, {\n path: '/custom/product',\n name: 'customProduct',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 6).then(__webpack_require__.bind(null, /*! ./pages/custom-product/custom-product.vue */ \"./src/pages/custom-product/custom-product.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/demo',\n name: 'demo',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 11).then(__webpack_require__.bind(null, /*! ./pages/demo/index.vue */ \"./src/pages/demo/index.vue\"));\n },\n meta: {\n title: ''\n }\n}, {\n path: '/about',\n name: 'about',\n component: function component() {\n return __webpack_require__.e(/*! import() */ 16).then(__webpack_require__.bind(null, /*! ./pages/About.vue */ \"./src/pages/About.vue\"));\n },\n meta: {\n title: ''\n }\n}, // 404页面\n{\n path: '*',\n // * 表示上面路径匹配不到的都显示这个页面\n name: '404',\n component: _pages_index_index_vue__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n}]; // add route path\n\nroutes.forEach(function (route) {\n route.path = route.path || '/' + (route.name || '');\n});\nvar router = new vue_router__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n routes: routes // mode: 'history',\n\n});\nrouter.beforeEach(function (to, from, next) {\n var title = to.meta && to.meta.title;\n\n if (title) {\n document.title = title;\n } // const scrollTopList = [\n // \t\"newsList\", \"newsDetail\", \"protocol\", \"privacy\", \"terms\", \"paymentType\", \"reservation\"\n // ]\n\n\n document.documentElement.scrollTop = 0;\n document.body.scrollTop = 0;\n next();\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (router);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcm91dGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3JvdXRlci5qcz80MWNiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IEluZGV4IGZyb20gJy4vcGFnZXMvaW5kZXgvaW5kZXgudnVlJ1xuXG5WdWUudXNlKFJvdXRlcilcblxuLyoqXG4gKiDph43lhpnot6/nlLHnmoRwdXNo5pa55rOVXG4gKi9cbmNvbnN0IHJvdXRlclB1c2ggPSBSb3V0ZXIucHJvdG90eXBlLnB1c2hcblJvdXRlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2gobG9jYXRpb24pIHtcblx0cmV0dXJuIHJvdXRlclB1c2guY2FsbCh0aGlzLCBsb2NhdGlvbikuY2F0Y2goZXJyb3IgPT4gZXJyb3IpXG59XG5cbmNvbnN0IHJvdXRlcyA9IFtcblxuXHR7XG5cdFx0cGF0aDogJy8nLFxuXHRcdG5hbWU6ICdpbmRleCcsXG5cdFx0Y29tcG9uZW50OiBJbmRleCxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJ+W5s+WuieS6uuWvv+S/nemZqeWumOe9kSdcblx0XHR9XG5cdH0sXG5cdHtcblx0XHRwYXRoOiAnL2xvZ2luJyxcblx0XHRuYW1lOiAnbG9naW4nLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2xvZ2luL2xvZ2luLnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAnJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvcmVnaXN0ZXInLFxuXHRcdG5hbWU6ICdyZWdpc3RlcicsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcmVnaXN0ZXIvcmVnaXN0ZXIudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wYXNzd29yZC9maW5kJyxcblx0XHRuYW1lOiAncGFzc3dvcmRGaW5kJyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9wYXNzd29yZC1maW5kL3Bhc3N3b3JkLWZpbmQudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wYXNzd29yZC9yZXNldCcsXG5cdFx0bmFtZTogJ3Bhc3N3b3JkUmVzZXQnLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL3Bhc3N3b3JkLXJlc2V0L3Bhc3N3b3JkLXJlc2V0LnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAnJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvaW5mb21hdGlvbi9pbXByb3ZlJyxcblx0XHRuYW1lOiAnaW5mb21hdGlvbkltcHJvdmUnLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2luZm9tYXRpb24taW1wcm92ZS9pbmZvbWF0aW9uLWltcHJvdmUudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wcm9maWxlJyxcblx0XHRuYW1lOiAncHJvZmlsZScsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcHJvZmlsZS9wcm9maWxlLnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAn5YWs5Y+4566A5LuLJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvdGVybXMnLFxuXHRcdG5hbWU6ICd0ZXJtcycsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvdGVybXMvdGVybXMudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICfkvb/nlKjmnaHmrL4nXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9wcml2YWN5Jyxcblx0XHRuYW1lOiAncHJpdmFjeScsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcHJpdmFjeS9wcml2YWN5LnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAn6ZqQ56eB5pS/562WJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvcHJvdG9jb2wnLFxuXHRcdG5hbWU6ICdwcm90b2NvbCcsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvcHJvdG9jb2wvcHJvdG9jb2wudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICflubPlronkuIDos6zpgJrmnIPlk6HmnI3li5nljZTorbAnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9uZXdzL2xpc3QnLFxuXHRcdG5hbWU6ICduZXdzTGlzdCcsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvbmV3cy1saXN0L25ld3MtbGlzdC52dWUnKSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJydcblx0XHR9XG5cdH0sXG5cdHtcblx0XHRwYXRoOiAnL25ld3MvZGV0YWlsJyxcblx0XHRuYW1lOiAnbmV3c0RldGFpbCcsXG5cdFx0Y29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vcGFnZXMvbmV3cy1kZXRhaWwvbmV3cy1kZXRhaWwudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXG5cdHtcblx0XHRwYXRoOiAnL3Byb2R1Y3QnLFxuXHRcdG5hbWU6ICdwcm9kdWN0Jyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9wcm9kdWN0L3Byb2R1Y3QudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9jdXN0b20vc2VydmljZScsXG5cdFx0bmFtZTogJ2N1c3RvbVNlcnZpY2UnLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2N1c3RvbS1zZXJ2aWNlL2N1c3RvbS1zZXJ2aWNlLnZ1ZScpLFxuXHRcdG1ldGE6IHtcblx0XHRcdHRpdGxlOiAn5L+d5Y2V5p+l6K+iJ1xuXHRcdH1cblx0fSxcblx0e1xuXHRcdHBhdGg6ICcvY3VzdG9tL3Byb2R1Y3QnLFxuXHRcdG5hbWU6ICdjdXN0b21Qcm9kdWN0Jyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9jdXN0b20tcHJvZHVjdC9jdXN0b20tcHJvZHVjdC52dWUnKSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJydcblx0XHR9XG5cdH0sXG5cblx0e1xuXHRcdHBhdGg6ICcvZGVtbycsXG5cdFx0bmFtZTogJ2RlbW8nLFxuXHRcdGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL3BhZ2VzL2RlbW8vaW5kZXgudnVlJyksXG5cdFx0bWV0YToge1xuXHRcdFx0dGl0bGU6ICcnXG5cdFx0fVxuXHR9LFxuXHR7XG5cdFx0cGF0aDogJy9hYm91dCcsXG5cdFx0bmFtZTogJ2Fib3V0Jyxcblx0XHRjb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9BYm91dC52dWUnKSxcblx0XHRtZXRhOiB7XG5cdFx0XHR0aXRsZTogJydcblx0XHR9XG5cdH0sXG5cdC8vIDQwNOmhtemdolxuXHR7XG5cdFx0cGF0aDogJyonLCAvLyAqIOihqOekuuS4iumdoui3r+W+hOWMuemFjeS4jeWIsOeahOmDveaYvuekuui/meS4qumhtemdolxuXHRcdG5hbWU6ICc0MDQnLFxuXHRcdGNvbXBvbmVudDogSW5kZXhcblx0fSxcbl1cblxuLy8gYWRkIHJvdXRlIHBhdGhcbnJvdXRlcy5mb3JFYWNoKHJvdXRlID0+IHtcblx0cm91dGUucGF0aCA9IHJvdXRlLnBhdGggfHwgJy8nICsgKHJvdXRlLm5hbWUgfHwgJycpO1xufSk7XG5cbmNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuXHRyb3V0ZXMsXG5cdC8vIG1vZGU6ICdoaXN0b3J5Jyxcbn0pO1xuXG5yb3V0ZXIuYmVmb3JlRWFjaCgodG8sIGZyb20sIG5leHQpID0+IHtcblx0Y29uc3QgdGl0bGUgPSB0by5tZXRhICYmIHRvLm1ldGEudGl0bGU7XG5cdGlmICh0aXRsZSkge1xuXHRcdGRvY3VtZW50LnRpdGxlID0gdGl0bGU7XG5cdH1cblx0Ly8gY29uc3Qgc2Nyb2xsVG9wTGlzdCA9IFtcblx0Ly8gXHRcIm5ld3NMaXN0XCIsIFwibmV3c0RldGFpbFwiLCBcInByb3RvY29sXCIsIFwicHJpdmFjeVwiLCBcInRlcm1zXCIsIFwicGF5bWVudFR5cGVcIiwgXCJyZXNlcnZhdGlvblwiXG5cdC8vIF1cblx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG5cdGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gMDtcblx0bmV4dCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7Ozs7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFKQTtBQVNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/router.js\n");
/***/ }),
/***/ "./src/store/actions.js":
/*!******************************!*\
!*** ./src/store/actions.js ***!
\******************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// import request from '@/service'\n// export const banner = async (store, params) => {\n// return await request.get('/api/v1/get_banner', { params: params })\n// }\n// export const categories = async (store, params) => {\n// return await request.get('/japi/v1/categories', { params: params })\n// }\n// export const recommend = async (store, params) => {\n// return await request.post('/wapi/v1/query', params)\n// }\n// export const entries = async (store, params) => {\n// return await request.get('/tapi/v1/get_entry_by_rank', { params: params })\n// }\n// export const getListByLastTime = async (store, params) => {\n// return await request.get('/xapi/v1/getListByLastTime', { params: params })\n// }\n// export const increment = ({\n// \tcommit\n// }) => {\n// \tcommit('INCREMENT')\n// }\n// export const pcorphone = ({\n// \tcommit\n// }) => {\n// \tcommit('PCORPHONE')\n// }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvYWN0aW9ucy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9zdG9yZS9hY3Rpb25zLmpzPzYzZTAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHJlcXVlc3QgZnJvbSAnQC9zZXJ2aWNlJ1xuXG4vLyBleHBvcnQgY29uc3QgYmFubmVyID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcvYXBpL3YxL2dldF9iYW5uZXInLCB7IHBhcmFtczogcGFyYW1zIH0pXG4vLyB9XG5cbi8vIGV4cG9ydCBjb25zdCBjYXRlZ29yaWVzID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcvamFwaS92MS9jYXRlZ29yaWVzJywgeyBwYXJhbXM6IHBhcmFtcyB9KVxuLy8gfVxuXG4vLyBleHBvcnQgY29uc3QgcmVjb21tZW5kID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QucG9zdCgnL3dhcGkvdjEvcXVlcnknLCBwYXJhbXMpXG4vLyB9XG5cbi8vIGV4cG9ydCBjb25zdCBlbnRyaWVzID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcvdGFwaS92MS9nZXRfZW50cnlfYnlfcmFuaycsIHsgcGFyYW1zOiBwYXJhbXMgfSlcbi8vIH1cblxuLy8gZXhwb3J0IGNvbnN0IGdldExpc3RCeUxhc3RUaW1lID0gYXN5bmMgKHN0b3JlLCBwYXJhbXMpID0+IHtcbi8vICAgcmV0dXJuIGF3YWl0IHJlcXVlc3QuZ2V0KCcveGFwaS92MS9nZXRMaXN0QnlMYXN0VGltZScsIHsgcGFyYW1zOiBwYXJhbXMgfSlcbi8vIH1cblxuXG4vLyBleHBvcnQgY29uc3QgaW5jcmVtZW50ID0gKHtcbi8vIFx0Y29tbWl0XG4vLyB9KSA9PiB7XG4vLyBcdGNvbW1pdCgnSU5DUkVNRU5UJylcbi8vIH1cblxuLy8gZXhwb3J0IGNvbnN0IHBjb3JwaG9uZSA9ICh7XG4vLyBcdGNvbW1pdFxuLy8gfSkgPT4ge1xuLy8gXHRjb21taXQoJ1BDT1JQSE9ORScpXG4vLyB9XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/store/actions.js\n");
/***/ }),
/***/ "./src/store/index.js":
/*!****************************!*\
!*** ./src/store/index.js ***!
\****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/_vue@2.6.10@vue/dist/vue.runtime.esm.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ \"./node_modules/_vuex@3.1.1@vuex/dist/vuex.esm.js\");\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ \"./src/store/state.js\");\n/* harmony import */ var _mutations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mutations */ \"./src/store/mutations.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions */ \"./src/store/actions.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_actions__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nvue__WEBPACK_IMPORTED_MODULE_0__[\"default\"].use(vuex__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\nvar store = function store() {\n return new vuex__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Store({\n state: _state__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n mutations: _mutations__WEBPACK_IMPORTED_MODULE_3__,\n actions: _actions__WEBPACK_IMPORTED_MODULE_4__\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (store);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc3RvcmUvaW5kZXguanM/NDM2MCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWV4IGZyb20gJ3Z1ZXgnXG5pbXBvcnQgc3RhdGUgZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCAqIGFzIG11dGF0aW9ucyBmcm9tICcuL211dGF0aW9ucydcbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSAnLi9hY3Rpb25zJ1xuXG5WdWUudXNlKFZ1ZXgpXG5cbmNvbnN0IHN0b3JlID0gKCkgPT4gbmV3IFZ1ZXguU3RvcmUoe1xuICBzdGF0ZSxcbiAgbXV0YXRpb25zLFxuICBhY3Rpb25zXG59KVxuXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFDQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/store/index.js\n");
/***/ }),
/***/ "./src/store/mutations.js":
/*!********************************!*\
!*** ./src/store/mutations.js ***!
\********************************/
/*! exports provided: INCREMENT, IS_MOBILE, IS_SMALL_SCREEN, SET_USER_INFO */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"INCREMENT\", function() { return INCREMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IS_MOBILE\", function() { return IS_MOBILE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IS_SMALL_SCREEN\", function() { return IS_SMALL_SCREEN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SET_USER_INFO\", function() { return SET_USER_INFO; });\n/* harmony import */ var _utils_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/utils/utils.js */ \"./src/utils/utils.js\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ \"./node_modules/_node-libs-browser@2.2.1@node-libs-browser/mock/empty.js\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction INCREMENT(state) {\n state.counter++;\n}\nfunction IS_MOBILE(state, bool) {\n state.isMobile = bool;\n}\nfunction IS_SMALL_SCREEN(state, bool) {\n state.isSmallScreen = bool;\n}\nfunction SET_USER_INFO(state, val) {\n if (val) {\n Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"setCookie\"])(\"_user_profile\", encodeURIComponent(JSON.stringify(val)), 7200);\n state.userInfo = val;\n } else {\n Object(_utils_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"setCookie\"])(\"_user_profile\", \"\", 1);\n state.userInfo = null;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvbXV0YXRpb25zLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3N0b3JlL211dGF0aW9ucy5qcz8wNDM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNldENvb2tpZSwgZ2V0Q29va2llIH0gZnJvbSAnQC91dGlscy91dGlscy5qcydcbmltcG9ydCB7IHN0YXQgfSBmcm9tICdmcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJTkNSRU1FTlQoc3RhdGUpIHtcblx0c3RhdGUuY291bnRlcisrXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBJU19NT0JJTEUoc3RhdGUsIGJvb2wpIHtcblx0c3RhdGUuaXNNb2JpbGUgPSBib29sXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBJU19TTUFMTF9TQ1JFRU4oc3RhdGUsIGJvb2wpIHtcblx0c3RhdGUuaXNTbWFsbFNjcmVlbiA9IGJvb2xcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNFVF9VU0VSX0lORk8oc3RhdGUsIHZhbCkge1xuXHRpZiAodmFsKSB7XG5cdFx0c2V0Q29va2llKFwiX3VzZXJfcHJvZmlsZVwiLCBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodmFsKSksIDcyMDApO1xuXHRcdHN0YXRlLnVzZXJJbmZvID0gdmFsO1xuXHR9IGVsc2Uge1xuXHRcdHNldENvb2tpZShcIl91c2VyX3Byb2ZpbGVcIiwgXCJcIiwgMSk7XG5cdFx0c3RhdGUudXNlckluZm8gPSBudWxsO1xuXHR9XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/store/mutations.js\n");
/***/ }),
/***/ "./src/store/state.js":
/*!****************************!*\
!*** ./src/store/state.js ***!
\****************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n counter: 2,\n // 例子\n isMobile: false,\n //是否手机访问\n isSmallScreen: false,\n // 是否小屏幕 (PC时,小屏幕机导航栏会改变))\n userInfo: {\n sid: \"\",\n name: \"\",\n hadFullInfo: \"\"\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc3RvcmUvc3RhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc3RvcmUvc3RhdGUuanM/ZmNjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG5cdGNvdW50ZXI6IDIsIC8vIOS+i+WtkFxuXHRpc01vYmlsZTogZmFsc2UsIC8v5piv5ZCm5omL5py66K6/6ZeuXG5cdGlzU21hbGxTY3JlZW46IGZhbHNlLCAvLyDmmK/lkKblsI/lsY/luZUgKFBD5pe277yM5bCP5bGP5bmV5py65a+86Iiq5qCP5Lya5pS55Y+YKSlcblxuXHR1c2VySW5mbyA6IHtcblx0XHRzaWQgOiBcIlwiLFxuXHRcdG5hbWUgOiBcIlwiLFxuXHRcdGhhZEZ1bGxJbmZvOiBcIlwiXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFMQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/store/state.js\n");
/***/ }),
/***/ "./src/utils/utils.js":
/*!****************************!*\
!*** ./src/utils/utils.js ***!
\****************************/
/*! exports provided: REGEXPS, checkMobile, param2Obj, getCookie, setCookie, delCookie, getEnv, setTitle, addQuery, getPath, getQuery, getObjByListKeyValue, formatBr, debounce, throttle */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"REGEXPS\", function() { return REGEXPS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkMobile\", function() { return checkMobile; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"param2Obj\", function() { return param2Obj; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCookie\", function() { return getCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setCookie\", function() { return setCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"delCookie\", function() { return delCookie; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getEnv\", function() { return getEnv; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setTitle\", function() { return setTitle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addQuery\", function() { return addQuery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPath\", function() { return getPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getQuery\", function() { return getQuery; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getObjByListKeyValue\", function() { return getObjByListKeyValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatBr\", function() { return formatBr; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"debounce\", function() { return debounce; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"throttle\", function() { return throttle; });\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es6.object.keys */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.object.keys.js\");\n/* harmony import */ var core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_keys__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom.iterable */ \"./node_modules/_core-js@2.6.10@core-js/modules/web.dom.iterable.js\");\n/* harmony import */ var core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_iterable__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es6.regexp.match */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.match.js\");\n/* harmony import */ var core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_match__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es6.regexp.constructor */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.constructor.js\");\n/* harmony import */ var core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_constructor__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es6.regexp.replace */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.replace.js\");\n/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es6.regexp.split */ \"./node_modules/_core-js@2.6.10@core-js/modules/es6.regexp.split.js\");\n/* harmony import */ var core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_split__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n// 正在表达式\nvar REGEXPS = {\n \"mobile\": /^1\\d{10}$/\n}; // 验证手机\n\nfunction checkMobile(str) {\n return REGEXPS.mobile.test(str);\n}\n/**\n * 链接参数转换为obj\n * 入参 完整链接\n * @param {*} url\n */\n\nfunction param2Obj(url) {\n var search = url.split('?')[1];\n\n if (!search) {\n return {};\n }\n\n return JSON.parse('{\"' + decodeURIComponent(search).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}');\n} //获取cookie、\n\nfunction getCookie(name) {\n var arr,\n reg = new RegExp(\"(^| )\" + name + \"=([^;]*)(;|$)\");\n if (arr = document.cookie.match(reg)) return arr[2];else return null;\n} //设置cookie\n\nfunction setCookie(c_name, value, second) {\n var exdate = new Date();\n exdate.setTime(exdate.getTime() + second * 1000);\n document.cookie = c_name + \"=\" + escape(value) + (second == null ? \"\" : \";expires=\" + exdate.toGMTString());\n}\n; //删除cookie\n\nfunction delCookie(name) {\n var exp = new Date();\n exp.setTime(exp.getTime() - 1);\n var cval = getCookie(name);\n if (cval != null) document.cookie = name + \"=\" + cval + \";expires=\" + exp.toGMTString();\n}\n;\n/**\n * 获取环境信息\n * @return {Object} 环境信息对象\n */\n\nfunction getEnv() {\n var nav = window.navigator;\n var env = {\n \"iphone\": false,\n \"ipad\": false,\n \"android\": false,\n \"pc\": false,\n \"ios\": false,\n \"ver\": \"0\"\n };\n var ua = nav.userAgent;\n var android = ua.match(/(Android)\\s+([\\d.]+)/);\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n\n if (ipad) {\n env.ipad = ipad[1] && true || false;\n env.ver = ipad[2] && ipad[2].replace(/-/g, \".\") || \"\";\n env.ios = true;\n } else if (iphone) {\n env.iphone = iphone[1] && true || false;\n env.ver = iphone[2] && iphone[2].replace(/-/g, \".\") || \"\";\n env.ios = true;\n } else if (android) {\n env.android = android[1] && true || false;\n env.ver = android[2];\n } else {\n env.pc = true;\n }\n\n return env;\n}\n/**\n * 设定页面 title\n * @param {[type]} title [description]\n */\n\nfunction setTitle(title) {\n if (!title) {\n return;\n }\n\n document.title = title; // if (ENV.ios && navigator.userAgent.toLowerCase().indexOf(\"micromessenger\") !== -1) {\n // 修复微信端IOS无法修改document.title的情况\n\n if (getEnv().ios && (navigator.userAgent.toLowerCase().indexOf(\"micromessenger\") !== -1 || navigator.userAgent.toLowerCase().indexOf(\"alipay\") !== -1)) {\n //修复IOS微信端和支付宝无法修改document.title的情况\n var $iframe = document.createElement('iframe');\n $iframe.className = \"C-hiddenIframe\";\n $iframe.src = \"/\" + location.pathname.split('/')[1] + \"/favicon.ico\";\n $iframe.style.visibility = 'hidden';\n $iframe.style.width = '1px';\n $iframe.style.height = '1px';\n\n $iframe.onload = function onIframeLoad() {\n setTimeout(function () {\n $iframe.onload = null;\n onIframeLoad = null;\n document.body.removeChild($iframe);\n $iframe = null;\n }, 0);\n };\n\n document.body.appendChild($iframe);\n }\n} // 为链接添加参数\n\nfunction addQuery(url, query) {\n query = query || {};\n\n query = function (query) {\n var q = [];\n Object.keys(query).forEach(function (_q) {\n q.push(_q + '=' + query[_q]);\n });\n return q.join('&');\n }(query);\n\n if (url.indexOf('?') !== -1) {\n url += '&' + query;\n } else {\n url += '?' + query;\n }\n\n return url;\n}\n/**\n * 获得当前页面的path\n * @return {String} 页面path\n */\n\nfunction getPath() {\n var path = window.location.hash;\n path = path || \"#/\";\n path = path === \"#/\" ? \"#/index\" : path;\n path = path.split(\"?\");\n return path[0];\n} // 获取 url 参数\n\nfunction getQuery(name) {\n return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, \"\"])[1].replace(/\\+/g, '%20')) || null;\n}\n/**\n * 从数组中获取 key未value的对象\n * @param {*} value\n * @param {*} key\n * @param {*} list\n */\n\nfunction getObjByListKeyValue(value, key, list) {\n var result = null;\n list.forEach(function (element) {\n if (element[key + \"\"] == value) {\n result = element;\n }\n });\n return result;\n}\n/**\n * 把 \\n换行符转换成<br>\n * 转换后需要用 v-html渲染\n * 用{{}}会当成字符串把 html渲染出来\n */\n\nfunction formatBr(str) {\n str = str.replace(/\\n/g, '<br/>');\n return str;\n}\n;\n/**\n * @desc 函数防抖\n * @param func 函数\n * @param wait 延迟执行毫秒数\n * @param immediate true 表立即执行,false 表非立即执行\n */\n\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this;\n var args = arguments;\n if (timeout) clearTimeout(timeout);\n\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(function () {\n timeout = null;\n }, wait);\n if (callNow) func.apply(context, args);\n } else {\n timeout = setTimeout(function () {\n func.apply(context, args);\n }, wait);\n }\n };\n}\n/**\n * @desc 函数节流\n * @param func 函数\n * @param wait 延迟执行毫秒数\n * @param type 1 表时间戳版,2 表定时器版\n * 时间戳版的函数触发是在时间段内开始的时候,而定时器版的函数触发是在时间段内结束的时候。\n */\n\nfunction throttle(func, wait, type) {\n if (type === 1) {\n var previous = 0;\n } else if (type === 2) {\n var timeout;\n }\n\n return function () {\n var context = this;\n var args = arguments;\n\n if (type === 1) {\n var now = Date.now();\n\n if (now - previous > wait) {\n func.apply(context, args);\n previous = now;\n }\n } else if (type === 2) {\n if (!timeout) {\n timeout = setTimeout(function () {\n timeout = null;\n func.apply(context, args);\n }, wait);\n }\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbHMvdXRpbHMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvdXRpbHMuanM/ZmE3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyDmraPlnKjooajovr7lvI9cbmV4cG9ydCBjb25zdCBSRUdFWFBTID0ge1xuICBcIm1vYmlsZVwiOiAvXjFcXGR7MTB9JC9cbn1cblxuLy8g6aqM6K+B5omL5py6XG5leHBvcnQgZnVuY3Rpb24gY2hlY2tNb2JpbGUoc3RyKSB7XG4gIHJldHVybiBSRUdFWFBTLm1vYmlsZS50ZXN0KHN0cik7XG59XG5cbi8qKlxuICog6ZO+5o6l5Y+C5pWw6L2s5o2i5Li6b2JqXG4gKiDlhaXlj4Ig5a6M5pW06ZO+5o6lXG4gKiBAcGFyYW0geyp9IHVybFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyYW0yT2JqKHVybCkge1xuICBjb25zdCBzZWFyY2ggPSB1cmwuc3BsaXQoJz8nKVsxXVxuICBpZiAoIXNlYXJjaCkge1xuICAgIHJldHVybiB7fVxuICB9XG4gIHJldHVybiBKU09OLnBhcnNlKFxuICAgICd7XCInICtcbiAgICBkZWNvZGVVUklDb21wb25lbnQoc2VhcmNoKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgLnJlcGxhY2UoLyYvZywgJ1wiLFwiJylcbiAgICAgIC5yZXBsYWNlKC89L2csICdcIjpcIicpICtcbiAgICAnXCJ9J1xuICApXG59XG5cblxuXG4vL+iOt+WPlmNvb2tpZeOAgVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7XG4gIHZhciBhcnIsIHJlZyA9IG5ldyBSZWdFeHAoXCIoXnwgKVwiICsgbmFtZSArIFwiPShbXjtdKikoO3wkKVwiKTtcbiAgaWYgKGFyciA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChyZWcpKVxuICAgIHJldHVybiAoYXJyWzJdKTtcbiAgZWxzZVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vL+iuvue9rmNvb2tpZVxuZXhwb3J0IGZ1bmN0aW9uIHNldENvb2tpZShjX25hbWUsIHZhbHVlLCBzZWNvbmQpIHtcbiAgdmFyIGV4ZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGV4ZGF0ZS5zZXRUaW1lKGV4ZGF0ZS5nZXRUaW1lKCkgKyBzZWNvbmQgKiAxMDAwKTtcbiAgZG9jdW1lbnQuY29va2llID0gY19uYW1lICsgXCI9XCIgKyBlc2NhcGUodmFsdWUpICsgKChzZWNvbmQgPT0gbnVsbCkgPyBcIlwiIDogXCI7ZXhwaXJlcz1cIiArIGV4ZGF0ZS50b0dNVFN0cmluZygpKTtcbn07XG5cbi8v5Yig6ZmkY29va2llXG5leHBvcnQgZnVuY3Rpb24gZGVsQ29va2llKG5hbWUpIHtcbiAgdmFyIGV4cCA9IG5ldyBEYXRlKCk7XG4gIGV4cC5zZXRUaW1lKGV4cC5nZXRUaW1lKCkgLSAxKTtcbiAgdmFyIGN2YWwgPSBnZXRDb29raWUobmFtZSk7XG4gIGlmIChjdmFsICE9IG51bGwpXG4gICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgY3ZhbCArIFwiO2V4cGlyZXM9XCIgKyBleHAudG9HTVRTdHJpbmcoKTtcbn07XG5cblxuLyoqXG4gKiDojrflj5bnjq/looPkv6Hmga9cbiAqIEByZXR1cm4ge09iamVjdH0g546v5aKD5L+h5oGv5a+56LGhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnYoKSB7XG4gIHZhciBuYXYgPSB3aW5kb3cubmF2aWdhdG9yO1xuICB2YXIgZW52ID0ge1xuICAgIFwiaXBob25lXCI6IGZhbHNlLFxuICAgIFwiaXBhZFwiOiBmYWxzZSxcbiAgICBcImFuZHJvaWRcIjogZmFsc2UsXG4gICAgXCJwY1wiOiBmYWxzZSxcbiAgICBcImlvc1wiOiBmYWxzZSxcbiAgICBcInZlclwiOiBcIjBcIlxuICB9O1xuXG4gIHZhciB1YSA9IG5hdi51c2VyQWdlbnQ7XG4gIHZhciBhbmRyb2lkID0gdWEubWF0Y2goLyhBbmRyb2lkKVxccysoW1xcZC5dKykvKTtcbiAgdmFyIGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPUylcXHMoW1xcZF9dKykvKTtcbiAgaWYgKGlwYWQpIHtcbiAgICBlbnYuaXBhZCA9IGlwYWRbMV0gJiYgdHJ1ZSB8fCBmYWxzZTtcbiAgICBlbnYudmVyID0gaXBhZFsyXSAmJiBpcGFkWzJdLnJlcGxhY2UoLy0vZywgXCIuXCIpIHx8IFwiXCI7XG4gICAgZW52LmlvcyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoaXBob25lKSB7XG4gICAgZW52LmlwaG9uZSA9IGlwaG9uZVsxXSAmJiB0cnVlIHx8IGZhbHNlO1xuICAgIGVudi52ZXIgPSBpcGhvbmVbMl0gJiYgaXBob25lWzJdLnJlcGxhY2UoLy0vZywgXCIuXCIpIHx8IFwiXCI7XG4gICAgZW52LmlvcyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoYW5kcm9pZCkge1xuICAgIGVudi5hbmRyb2lkID0gYW5kcm9pZFsxXSAmJiB0cnVlIHx8IGZhbHNlO1xuICAgIGVudi52ZXIgPSBhbmRyb2lkWzJdO1xuICB9IGVsc2Uge1xuICAgIGVudi5wYyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZW52O1xufVxuXG4vKipcbiAqIOiuvuWumumhtemdoiB0aXRsZVxuICogQHBhcmFtIHtbdHlwZV19IHRpdGxlIFtkZXNjcmlwdGlvbl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRpdGxlKHRpdGxlKSB7XG4gIGlmICghdGl0bGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcbiAgLy8gaWYgKEVOVi5pb3MgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJtaWNyb21lc3NlbmdlclwiKSAhPT0gLTEpIHtcbiAgLy8g5L+u5aSN5b6u5L+h56uvSU9T5peg5rOV5L+u5pS5ZG9jdW1lbnQudGl0bGXnmoTmg4XlhrVcbiAgaWYgKGdldEVudigpLmlvcyAmJiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJtaWNyb21lc3NlbmdlclwiKSAhPT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJhbGlwYXlcIikgIT09IC0xKSkge1xuICAgIC8v5L+u5aSNSU9T5b6u5L+h56uv5ZKM5pSv5LuY5a6d5peg5rOV5L+u5pS5ZG9jdW1lbnQudGl0bGXnmoTmg4XlhrVcbiAgICB2YXIgJGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICRpZnJhbWUuY2xhc3NOYW1lID0gXCJDLWhpZGRlbklmcmFtZVwiO1xuICAgICRpZnJhbWUuc3JjID0gXCIvXCIgKyBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpWzFdICsgXCIvZmF2aWNvbi5pY29cIjtcbiAgICAkaWZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAkaWZyYW1lLnN0eWxlLndpZHRoID0gJzFweCc7XG4gICAgJGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnMXB4JztcbiAgICAkaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uIG9uSWZyYW1lTG9hZCgpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAkaWZyYW1lLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIG9uSWZyYW1lTG9hZCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoJGlmcmFtZSk7XG4gICAgICAgICRpZnJhbWUgPSBudWxsO1xuICAgICAgfSwgMCk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCRpZnJhbWUpO1xuICB9XG59XG5cbi8vIOS4uumTvuaOpea3u+WKoOWPguaVsFxuZXhwb3J0IGZ1bmN0aW9uIGFkZFF1ZXJ5KHVybCwgcXVlcnkpIHtcbiAgcXVlcnkgPSBxdWVyeSB8fCB7fVxuICBxdWVyeSA9IChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICB2YXIgcSA9IFtdXG4gICAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKF9xKSB7XG4gICAgICBxLnB1c2goX3EgKyAnPScgKyBxdWVyeVtfcV0pXG4gICAgfSlcbiAgICByZXR1cm4gcS5qb2luKCcmJylcbiAgfSkocXVlcnkpXG4gIGlmICh1cmwuaW5kZXhPZignPycpICE9PSAtMSkge1xuICAgIHVybCArPSAnJicgKyBxdWVyeVxuICB9IGVsc2Uge1xuICAgIHVybCArPSAnPycgKyBxdWVyeVxuICB9XG4gIHJldHVybiB1cmxcbn1cblxuXG4vKipcbiAqIOiOt+W+l+W9k+WJjemhtemdoueahHBhdGhcbiAqIEByZXR1cm4ge1N0cmluZ30g6aG16Z2icGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCgpIHtcbiAgdmFyIHBhdGggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgcGF0aCA9IHBhdGggfHwgXCIjL1wiO1xuICBwYXRoID0gcGF0aCA9PT0gXCIjL1wiID8gXCIjL2luZGV4XCIgOiBwYXRoO1xuICBwYXRoID0gcGF0aC5zcGxpdChcIj9cIik7XG4gIHJldHVybiBwYXRoWzBdO1xufVxuXG4vLyDojrflj5YgdXJsIOWPguaVsFxuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5KG5hbWUpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgobmV3IFJlZ0V4cCgnWz98Jl0nICsgbmFtZSArICc9JyArICcoW14mO10rPykoJnwjfDt8JCknKS5leGVjKGxvY2F0aW9uLmhyZWYpIHx8IFssIFwiXCJdKVsxXS5yZXBsYWNlKC9cXCsvZywgJyUyMCcpKSB8fCBudWxsO1xufVxuXG4vKipcbiAqIOS7juaVsOe7hOS4reiOt+WPliBrZXnmnKp2YWx1ZeeahOWvueixoVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7Kn0gbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqQnlMaXN0S2V5VmFsdWUodmFsdWUsIGtleSwgbGlzdCkge1xuICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgbGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGlmIChlbGVtZW50W2tleSArIFwiXCJdID09IHZhbHVlKSB7XG4gICAgICByZXN1bHQgPSBlbGVtZW50O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICog5oqKIFxcbuaNouihjOespui9rOaNouaIkDxicj5cbiAqIOi9rOaNouWQjumcgOimgeeUqCB2LWh0bWzmuLLmn5NcbiAqIOeUqHt7fX3kvJrlvZPmiJDlrZfnrKbkuLLmioogaHRtbOa4suafk+WHuuadpVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QnIoc3RyKSB7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXG4vZywgJzxici8+JylcbiAgcmV0dXJuIHN0clxufTtcblxuXG4vKipcbiAqIEBkZXNjIOWHveaVsOmYsuaKllxuICogQHBhcmFtIGZ1bmMg5Ye95pWwXG4gKiBAcGFyYW0gd2FpdCDlu7bov5/miafooYzmr6vnp5LmlbBcbiAqIEBwYXJhbSBpbW1lZGlhdGUgdHJ1ZSDooajnq4vljbPmiafooYzvvIxmYWxzZSDooajpnZ7nq4vljbPmiafooYxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICBsZXQgdGltZW91dDtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICBsZXQgYXJncyA9IGFyZ3VtZW50cztcblxuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgdmFyIGNhbGxOb3cgPSAhdGltZW91dDtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICB9LCB3YWl0KVxuICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICB9LCB3YWl0KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzYyDlh73mlbDoioLmtYFcbiAqIEBwYXJhbSBmdW5jIOWHveaVsFxuICogQHBhcmFtIHdhaXQg5bu26L+f5omn6KGM5q+r56eS5pWwXG4gKiBAcGFyYW0gdHlwZSAxIOihqOaXtumXtOaIs+eJiO+8jDIg6KGo5a6a5pe25Zmo54mIXG4gKiDml7bpl7TmiLPniYjnmoTlh73mlbDop6blj5HmmK/lnKjml7bpl7TmrrXlhoXlvIDlp4vnmoTml7blgJnvvIzogIzlrprml7blmajniYjnmoTlh73mlbDop6blj5HmmK/lnKjml7bpl7TmrrXlhoXnu5PmnZ/nmoTml7blgJnjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIHR5cGUpIHtcbiAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IDIpIHtcbiAgICB2YXIgdGltZW91dDtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGxldCBjb250ZXh0ID0gdGhpcztcbiAgICBsZXQgYXJncyA9IGFyZ3VtZW50cztcbiAgICBpZiAodHlwZSA9PT0gMSkge1xuICAgICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgIGlmIChub3cgLSBwcmV2aW91cyA+IHdhaXQpIHtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAyKSB7XG4gICAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncylcbiAgICAgICAgfSwgd2FpdClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVFBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBR0E7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFHQTs7Ozs7OztBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/utils/utils.js\n");
/***/ }),
/***/ 0:
/*!***************************!*\
!*** multi ./src/main.js ***!
\***************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(/*! ./src/main.js */"./src/main.js");
/***/ })
/******/ });