/* Minification failed. Returning unminified contents.
(1293,29-30): run-time error JS1009: Expected '}': [
(1293,42-43): run-time error JS1006: Expected ')': :
(1293,42): run-time error JS1004: Expected ';'
(1294,44): run-time error JS1004: Expected ';'
(1294,44-45): run-time error JS1195: Expected expression: :
(1295,44): run-time error JS1004: Expected ';'
(1295,44-45): run-time error JS1195: Expected expression: :
(1297,25-26): run-time error JS1195: Expected expression: )
(1301,9-10): run-time error JS1006: Expected ')': }
(1300,14): run-time error JS1004: Expected ';'
(1301,10-11): run-time error JS1195: Expected expression: )
(1301,11-12): run-time error JS1195: Expected expression: .
(1306,25-26): run-time error JS1009: Expected '}': [
(1306,38-39): run-time error JS1006: Expected ')': :
(1306,38): run-time error JS1004: Expected ';'
(1307,40): run-time error JS1004: Expected ';'
(1307,40-41): run-time error JS1195: Expected expression: :
(1308,40): run-time error JS1004: Expected ';'
(1308,40-41): run-time error JS1195: Expected expression: :
(1310,21-22): run-time error JS1195: Expected expression: )
(1312,13-20): run-time error JS1006: Expected ')': console
(1313,10-11): run-time error JS1195: Expected expression: )
(1317,5-13): run-time error JS1194: Expected ',' or ']': function
(1317,5-13): run-time error JS1006: Expected ')': function
(1096,36): run-time error JS1004: Expected ';'
(1317,27): run-time error JS1004: Expected ';'
(1385,33-34): run-time error JS1009: Expected '}': [
(1385,46-47): run-time error JS1006: Expected ')': :
(1385,46): run-time error JS1004: Expected ';'
(1386,48): run-time error JS1004: Expected ';'
(1386,48-49): run-time error JS1195: Expected expression: :
(1387,45): run-time error JS1004: Expected ';'
(1387,45-46): run-time error JS1195: Expected expression: :
(1389,29-30): run-time error JS1195: Expected expression: )
(1393,13-14): run-time error JS1006: Expected ')': }
(1392,18): run-time error JS1004: Expected ';'
(1393,14-15): run-time error JS1195: Expected expression: )
(1394,13-14): run-time error JS1195: Expected expression: .
(1399,29-30): run-time error JS1009: Expected '}': [
(1399,42-43): run-time error JS1006: Expected ')': :
(1399,42): run-time error JS1004: Expected ';'
(1400,44): run-time error JS1004: Expected ';'
(1400,44-45): run-time error JS1195: Expected expression: :
(1401,41): run-time error JS1004: Expected ';'
(1401,41-42): run-time error JS1195: Expected expression: :
(1403,25-26): run-time error JS1195: Expected expression: )
(1405,17-19): run-time error JS1006: Expected ')': if
(1405,51): run-time error JS1004: Expected ';'
(1408,19-23): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(1412,14-15): run-time error JS1195: Expected expression: )
(1413,5-6): run-time error JS1002: Syntax error: }
(1737,29-30): run-time error JS1009: Expected '}': [
(1737,42-43): run-time error JS1006: Expected ')': :
(1737,42): run-time error JS1004: Expected ';'
(1738,44): run-time error JS1004: Expected ';'
(1738,44-45): run-time error JS1195: Expected expression: :
(1739,42): run-time error JS1004: Expected ';'
(1739,42-43): run-time error JS1195: Expected expression: :
(1741,25-26): run-time error JS1195: Expected expression: )
(1749,9-10): run-time error JS1006: Expected ')': }
(1747,14): run-time error JS1004: Expected ';'
(1749,10-11): run-time error JS1195: Expected expression: )
(1749,11-12): run-time error JS1195: Expected expression: .
(1754,25-26): run-time error JS1009: Expected '}': [
(1754,38-39): run-time error JS1006: Expected ')': :
(1754,38): run-time error JS1004: Expected ';'
(1755,40): run-time error JS1004: Expected ';'
(1755,40-41): run-time error JS1195: Expected expression: :
(1756,38): run-time error JS1004: Expected ';'
(1756,38-39): run-time error JS1195: Expected expression: :
(1758,21-22): run-time error JS1195: Expected expression: )
(1761,13-19): run-time error JS1006: Expected ')': $scope
(1763,10): run-time error JS1004: Expected ';'
(1763,10-11): run-time error JS1195: Expected expression: )
(1764,5-6): run-time error JS1002: Syntax error: }
(2024,29-30): run-time error JS1009: Expected '}': [
(2024,42-43): run-time error JS1006: Expected ')': :
(2024,42): run-time error JS1004: Expected ';'
(2025,44): run-time error JS1004: Expected ';'
(2025,44-45): run-time error JS1195: Expected expression: :
(2026,43): run-time error JS1004: Expected ';'
(2026,43-44): run-time error JS1195: Expected expression: :
(2028,25-26): run-time error JS1195: Expected expression: )
(2034,13-19): run-time error JS1006: Expected ')': $scope
(2036,10-11): run-time error JS1195: Expected expression: )
(2036,11-12): run-time error JS1195: Expected expression: .
(2041,25-26): run-time error JS1009: Expected '}': [
(2041,38-39): run-time error JS1006: Expected ')': :
(2041,38): run-time error JS1004: Expected ';'
(2042,40): run-time error JS1004: Expected ';'
(2042,40-41): run-time error JS1195: Expected expression: :
(2043,39): run-time error JS1004: Expected ';'
(2043,39-40): run-time error JS1195: Expected expression: :
(2045,21-22): run-time error JS1195: Expected expression: )
(2047,13-15): run-time error JS1006: Expected ')': if
(2047,47): run-time error JS1004: Expected ';'
(2050,15-19): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2055,9-10): run-time error JS1002: Syntax error: }
(2055,10-11): run-time error JS1195: Expected expression: )
(2056,5-6): run-time error JS1002: Syntax error: }
(2169,37-38): run-time error JS1009: Expected '}': [
(2169,50-51): run-time error JS1006: Expected ')': :
(2169,50): run-time error JS1004: Expected ';'
(2170,52): run-time error JS1004: Expected ';'
(2170,52-53): run-time error JS1195: Expected expression: :
(2171,51): run-time error JS1004: Expected ';'
(2171,51-52): run-time error JS1195: Expected expression: :
(2173,33-34): run-time error JS1195: Expected expression: )
(2177,21-27): run-time error JS1006: Expected ')': $scope
(2178,18-19): run-time error JS1195: Expected expression: )
(2178,19-20): run-time error JS1195: Expected expression: .
(2183,33-34): run-time error JS1009: Expected '}': [
(2183,46-47): run-time error JS1006: Expected ')': :
(2183,46): run-time error JS1004: Expected ';'
(2184,48): run-time error JS1004: Expected ';'
(2184,48-49): run-time error JS1195: Expected expression: :
(2185,47): run-time error JS1004: Expected ';'
(2185,47-48): run-time error JS1195: Expected expression: :
(2187,29-30): run-time error JS1195: Expected expression: )
(2189,21-23): run-time error JS1006: Expected ')': if
(2189,55): run-time error JS1004: Expected ';'
(2191,23-27): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2197,18-19): run-time error JS1195: Expected expression: )
(2199,9-10): run-time error JS1006: Expected ')': }
(2258,33-34): run-time error JS1009: Expected '}': [
(2258,46-47): run-time error JS1006: Expected ')': :
(2258,46): run-time error JS1004: Expected ';'
(2259,48): run-time error JS1004: Expected ';'
(2259,48-49): run-time error JS1195: Expected expression: :
(2260,41): run-time error JS1004: Expected ';'
(2260,41-42): run-time error JS1195: Expected expression: :
(2262,29-30): run-time error JS1195: Expected expression: )
(2268,17-23): run-time error JS1006: Expected ')': $scope
(2269,14-15): run-time error JS1195: Expected expression: )
(2269,15-16): run-time error JS1195: Expected expression: .
(2274,29-30): run-time error JS1009: Expected '}': [
(2274,42-43): run-time error JS1006: Expected ')': :
(2274,42): run-time error JS1004: Expected ';'
(2275,44): run-time error JS1004: Expected ';'
(2275,44-45): run-time error JS1195: Expected expression: :
(2276,37): run-time error JS1004: Expected ';'
(2276,37-38): run-time error JS1195: Expected expression: :
(2278,25-26): run-time error JS1195: Expected expression: )
(2280,17-19): run-time error JS1006: Expected ')': if
(2280,51): run-time error JS1004: Expected ';'
(2282,19-23): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2288,13-14): run-time error JS1002: Syntax error: }
(2288,14-15): run-time error JS1195: Expected expression: )
(2289,9-10): run-time error JS1002: Syntax error: }
(2380,5-6): run-time error JS1002: Syntax error: }
(2380,6-7): run-time error JS1195: Expected expression: ,
(2380,12): run-time error JS1004: Expected ';'
(2380,12-13): run-time error JS1195: Expected expression: )
(2407,33-34): run-time error JS1009: Expected '}': [
(2407,46-47): run-time error JS1006: Expected ')': :
(2407,46): run-time error JS1004: Expected ';'
(2408,48): run-time error JS1004: Expected ';'
(2408,48-49): run-time error JS1195: Expected expression: :
(2409,40): run-time error JS1004: Expected ';'
(2409,40-41): run-time error JS1195: Expected expression: :
(2410,40): run-time error JS1004: Expected ';'
(2410,40-41): run-time error JS1195: Expected expression: :
(2412,29-30): run-time error JS1195: Expected expression: )
(2416,13-14): run-time error JS1006: Expected ')': }
(2415,18): run-time error JS1004: Expected ';'
(2416,14-15): run-time error JS1195: Expected expression: )
(2416,15-16): run-time error JS1195: Expected expression: .
(2421,29-30): run-time error JS1009: Expected '}': [
(2421,42-43): run-time error JS1006: Expected ')': :
(2421,42): run-time error JS1004: Expected ';'
(2422,44): run-time error JS1004: Expected ';'
(2422,44-45): run-time error JS1195: Expected expression: :
(2423,36): run-time error JS1004: Expected ';'
(2423,36-37): run-time error JS1195: Expected expression: :
(2424,36): run-time error JS1004: Expected ';'
(2424,36-37): run-time error JS1195: Expected expression: :
(2426,25-26): run-time error JS1195: Expected expression: )
(2428,17-19): run-time error JS1006: Expected ')': if
(2428,51): run-time error JS1004: Expected ';'
(2430,19-23): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2433,14-15): run-time error JS1195: Expected expression: )
(2435,5-6): run-time error JS1002: Syntax error: }
(2441,1-2): run-time error JS1002: Syntax error: }
(2441,2-3): run-time error JS1195: Expected expression: ]
(2441,3-4): run-time error JS1195: Expected expression: )
(2700,29-30): run-time error JS1009: Expected '}': [
(2700,42-43): run-time error JS1006: Expected ')': :
(2700,42): run-time error JS1004: Expected ';'
(2701,44): run-time error JS1004: Expected ';'
(2701,44-45): run-time error JS1195: Expected expression: :
(2702,44): run-time error JS1004: Expected ';'
(2702,44-45): run-time error JS1195: Expected expression: :
(2704,25-26): run-time error JS1195: Expected expression: )
(2710,13-19): run-time error JS1006: Expected ')': $scope
(2711,10): run-time error JS1004: Expected ';'
(2711,10-11): run-time error JS1195: Expected expression: )
(2711,11-12): run-time error JS1195: Expected expression: .
(2716,25-26): run-time error JS1009: Expected '}': [
(2716,38-39): run-time error JS1006: Expected ')': :
(2716,38): run-time error JS1004: Expected ';'
(2717,40): run-time error JS1004: Expected ';'
(2717,40-41): run-time error JS1195: Expected expression: :
(2718,40): run-time error JS1004: Expected ';'
(2718,40-41): run-time error JS1195: Expected expression: :
(2720,21-22): run-time error JS1195: Expected expression: )
(2722,13-15): run-time error JS1006: Expected ')': if
(2722,47): run-time error JS1004: Expected ';'
(2724,15-19): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2730,10-11): run-time error JS1194: Expected ',' or ']': )
(2731,5-6): run-time error JS1002: Syntax error: }
(2733,1-2): run-time error JS1002: Syntax error: }
(2733,2-3): run-time error JS1195: Expected expression: ]
(2733,3-4): run-time error JS1195: Expected expression: )
(2830,29-30): run-time error JS1009: Expected '}': [
(2830,42-43): run-time error JS1006: Expected ')': :
(2830,42): run-time error JS1004: Expected ';'
(2831,44): run-time error JS1004: Expected ';'
(2831,44-45): run-time error JS1195: Expected expression: :
(2832,38): run-time error JS1004: Expected ';'
(2832,38-39): run-time error JS1195: Expected expression: :
(2834,25-26): run-time error JS1195: Expected expression: )
(2839,13-19): run-time error JS1006: Expected ')': $scope
(2840,10): run-time error JS1004: Expected ';'
(2840,10-11): run-time error JS1195: Expected expression: )
(2840,11-12): run-time error JS1195: Expected expression: .
(2845,25-26): run-time error JS1009: Expected '}': [
(2845,38-39): run-time error JS1006: Expected ')': :
(2845,38): run-time error JS1004: Expected ';'
(2846,40): run-time error JS1004: Expected ';'
(2846,40-41): run-time error JS1195: Expected expression: :
(2847,34): run-time error JS1004: Expected ';'
(2847,34-35): run-time error JS1195: Expected expression: :
(2849,21-22): run-time error JS1195: Expected expression: )
(2852,13-15): run-time error JS1006: Expected ')': if
(2852,47): run-time error JS1004: Expected ';'
(2855,15-19): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2862,5-6): run-time error JS1002: Syntax error: }
(2864,1-2): run-time error JS1002: Syntax error: }
(2864,2-3): run-time error JS1195: Expected expression: )
(2949,29-30): run-time error JS1009: Expected '}': [
(2949,42-43): run-time error JS1006: Expected ')': :
(2949,42): run-time error JS1004: Expected ';'
(2950,44): run-time error JS1004: Expected ';'
(2950,44-45): run-time error JS1195: Expected expression: :
(2951,38): run-time error JS1004: Expected ';'
(2951,38-39): run-time error JS1195: Expected expression: :
(2953,25-26): run-time error JS1195: Expected expression: )
(2958,13-19): run-time error JS1006: Expected ')': $scope
(2959,10): run-time error JS1004: Expected ';'
(2959,10-11): run-time error JS1195: Expected expression: )
(2959,11-12): run-time error JS1195: Expected expression: .
(2964,25-26): run-time error JS1009: Expected '}': [
(2964,38-39): run-time error JS1006: Expected ')': :
(2964,38): run-time error JS1004: Expected ';'
(2965,40): run-time error JS1004: Expected ';'
(2965,40-41): run-time error JS1195: Expected expression: :
(2966,34): run-time error JS1004: Expected ';'
(2966,34-35): run-time error JS1195: Expected expression: :
(2968,21-22): run-time error JS1195: Expected expression: )
(2970,13-15): run-time error JS1006: Expected ')': if
(2970,47): run-time error JS1004: Expected ';'
(2973,15-19): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2979,5-6): run-time error JS1002: Syntax error: }
(2980,1-2): run-time error JS1002: Syntax error: }
(2980,2-3): run-time error JS1195: Expected expression: )
(3546,37-38): run-time error JS1009: Expected '}': [
(3546,50-51): run-time error JS1006: Expected ')': :
(3546,50): run-time error JS1004: Expected ';'
(3547,52): run-time error JS1004: Expected ';'
(3547,52-53): run-time error JS1195: Expected expression: :
(3548,54): run-time error JS1004: Expected ';'
(3548,54-55): run-time error JS1195: Expected expression: :
(3549,49): run-time error JS1004: Expected ';'
(3549,49-50): run-time error JS1195: Expected expression: :
(3551,33-34): run-time error JS1195: Expected expression: )
(3555,23-27): run-time error JS1006: Expected ')': else
(3555,22): run-time error JS1004: Expected ';'
(3561,33-34): run-time error JS1009: Expected '}': [
(3561,46-47): run-time error JS1006: Expected ')': :
(3561,46): run-time error JS1004: Expected ';'
(3562,48): run-time error JS1004: Expected ';'
(3562,48-49): run-time error JS1195: Expected expression: :
(3563,50): run-time error JS1004: Expected ';'
(3563,50-51): run-time error JS1195: Expected expression: :
(3564,45): run-time error JS1004: Expected ';'
(3564,45-46): run-time error JS1195: Expected expression: :
(3566,29-30): run-time error JS1195: Expected expression: )
(3571,18-19): run-time error JS1195: Expected expression: )
(3571,19-20): run-time error JS1195: Expected expression: .
(3576,33-34): run-time error JS1009: Expected '}': [
(3576,46-47): run-time error JS1006: Expected ')': :
(3576,46): run-time error JS1004: Expected ';'
(3577,48): run-time error JS1004: Expected ';'
(3577,48-49): run-time error JS1195: Expected expression: :
(3578,50): run-time error JS1004: Expected ';'
(3578,50-51): run-time error JS1195: Expected expression: :
(3580,29-30): run-time error JS1195: Expected expression: )
(3583,21-23): run-time error JS1006: Expected ')': if
(3583,55): run-time error JS1004: Expected ';'
(3585,23-27): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(3591,18-19): run-time error JS1194: Expected ',' or ']': )
(3592,13-14): run-time error JS1002: Syntax error: }
(3595,9-10): run-time error JS1002: Syntax error: }
(3616,33-34): run-time error JS1009: Expected '}': [
(3616,46-47): run-time error JS1006: Expected ')': :
(3616,46): run-time error JS1004: Expected ';'
(3617,48): run-time error JS1004: Expected ';'
(3617,48-49): run-time error JS1195: Expected expression: :
(3618,48): run-time error JS1004: Expected ';'
(3618,48-49): run-time error JS1195: Expected expression: :
(3619,45): run-time error JS1004: Expected ';'
(3619,45-46): run-time error JS1195: Expected expression: :
(3621,29-30): run-time error JS1195: Expected expression: )
(3625,13-14): run-time error JS1006: Expected ')': }
(3624,18): run-time error JS1004: Expected ';'
(3625,14-15): run-time error JS1195: Expected expression: )
(3625,15-16): run-time error JS1195: Expected expression: .
(3630,29-30): run-time error JS1009: Expected '}': [
(3630,42-43): run-time error JS1006: Expected ')': :
(3630,42): run-time error JS1004: Expected ';'
(3631,44): run-time error JS1004: Expected ';'
(3631,44-45): run-time error JS1195: Expected expression: :
(3632,44): run-time error JS1004: Expected ';'
(3632,44-45): run-time error JS1195: Expected expression: :
(3634,25-26): run-time error JS1195: Expected expression: )
(3637,17-24): run-time error JS1006: Expected ')': console
(3638,14-15): run-time error JS1195: Expected expression: )
(3639,9-10): run-time error JS1002: Syntax error: }
(3712,37-38): run-time error JS1009: Expected '}': [
(3712,50-51): run-time error JS1006: Expected ')': :
(3712,50): run-time error JS1004: Expected ';'
(3713,52): run-time error JS1004: Expected ';'
(3713,52-53): run-time error JS1195: Expected expression: :
(3714,49): run-time error JS1004: Expected ';'
(3714,49-50): run-time error JS1195: Expected expression: :
(3715,49): run-time error JS1004: Expected ';'
(3715,49-50): run-time error JS1195: Expected expression: :
(3717,33-34): run-time error JS1195: Expected expression: )
(3721,17-18): run-time error JS1006: Expected ')': }
(3720,22): run-time error JS1004: Expected ';'
(3721,18-19): run-time error JS1195: Expected expression: )
(3722,17-18): run-time error JS1195: Expected expression: .
(3727,33-34): run-time error JS1009: Expected '}': [
(3727,46-47): run-time error JS1006: Expected ')': :
(3727,46): run-time error JS1004: Expected ';'
(3728,48): run-time error JS1004: Expected ';'
(3728,48-49): run-time error JS1195: Expected expression: :
(3729,45): run-time error JS1004: Expected ';'
(3729,45-46): run-time error JS1195: Expected expression: :
(3731,29-30): run-time error JS1195: Expected expression: )
(3734,21-23): run-time error JS1006: Expected ')': if
(3734,55): run-time error JS1004: Expected ';'
(3737,23-27): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(3741,18-19): run-time error JS1195: Expected expression: )
(3742,9-10): run-time error JS1002: Syntax error: }
(4094,33-34): run-time error JS1009: Expected '}': [
(4094,46-47): run-time error JS1006: Expected ')': :
(4094,46): run-time error JS1004: Expected ';'
(4095,48): run-time error JS1004: Expected ';'
(4095,48-49): run-time error JS1195: Expected expression: :
(4096,46): run-time error JS1004: Expected ';'
(4096,46-47): run-time error JS1195: Expected expression: :
(4097,45): run-time error JS1004: Expected ';'
(4097,45-46): run-time error JS1195: Expected expression: :
(4099,29-30): run-time error JS1195: Expected expression: )
(4106,13-14): run-time error JS1006: Expected ')': }
(4104,18): run-time error JS1004: Expected ';'
(4106,14-15): run-time error JS1195: Expected expression: )
(4106,15-16): run-time error JS1195: Expected expression: .
(4111,29-30): run-time error JS1009: Expected '}': [
(4111,42-43): run-time error JS1006: Expected ')': :
(4111,42): run-time error JS1004: Expected ';'
(4112,44): run-time error JS1004: Expected ';'
(4112,44-45): run-time error JS1195: Expected expression: :
(4113,42): run-time error JS1004: Expected ';'
(4113,42-43): run-time error JS1195: Expected expression: :
(4115,25-26): run-time error JS1195: Expected expression: )
(4118,17-23): run-time error JS1006: Expected ')': $scope
(4120,14): run-time error JS1004: Expected ';'
(4120,14-15): run-time error JS1195: Expected expression: )
(4121,9-10): run-time error JS1002: Syntax error: }
(4294,37-38): run-time error JS1009: Expected '}': [
(4294,50-51): run-time error JS1006: Expected ')': :
(4294,50): run-time error JS1004: Expected ';'
(4295,52): run-time error JS1004: Expected ';'
(4295,52-53): run-time error JS1195: Expected expression: :
(4296,49): run-time error JS1004: Expected ';'
(4296,49-50): run-time error JS1195: Expected expression: :
(4297,49): run-time error JS1004: Expected ';'
(4297,49-50): run-time error JS1195: Expected expression: :
(4299,33-34): run-time error JS1195: Expected expression: )
(4303,21-27): run-time error JS1006: Expected ')': $scope
(4305,18-19): run-time error JS1195: Expected expression: )
(4305,19-20): run-time error JS1195: Expected expression: .
(4310,33-34): run-time error JS1009: Expected '}': [
(4310,46-47): run-time error JS1006: Expected ')': :
(4310,46): run-time error JS1004: Expected ';'
(4311,48): run-time error JS1004: Expected ';'
(4311,48-49): run-time error JS1195: Expected expression: :
(4312,45): run-time error JS1004: Expected ';'
(4312,45-46): run-time error JS1195: Expected expression: :
(4314,29-30): run-time error JS1195: Expected expression: )
(4317,21-23): run-time error JS1006: Expected ')': if
(4317,55): run-time error JS1004: Expected ';'
(4320,23-27): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(4325,18): run-time error JS1004: Expected ';'
(4325,18-19): run-time error JS1195: Expected expression: )
(4326,13-14): run-time error JS1002: Syntax error: }
(4326,15-19): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(4329,9-10): run-time error JS1002: Syntax error: }
(4428,41-42): run-time error JS1009: Expected '}': [
(4428,54-55): run-time error JS1006: Expected ')': :
(4428,54): run-time error JS1004: Expected ';'
(4429,56): run-time error JS1004: Expected ';'
(4429,56-57): run-time error JS1195: Expected expression: :
(4430,55): run-time error JS1004: Expected ';'
(4430,55-56): run-time error JS1195: Expected expression: :
(4431,53): run-time error JS1004: Expected ';'
(4431,53-54): run-time error JS1195: Expected expression: :
(4433,37-38): run-time error JS1195: Expected expression: )
(4437,25-31): run-time error JS1006: Expected ')': $scope
(4438,22-23): run-time error JS1195: Expected expression: )
(4438,23-24): run-time error JS1195: Expected expression: .
(4443,37-38): run-time error JS1009: Expected '}': [
(4443,50-51): run-time error JS1006: Expected ')': :
(4443,50): run-time error JS1004: Expected ';'
(4444,52): run-time error JS1004: Expected ';'
(4444,52-53): run-time error JS1195: Expected expression: :
(4445,51): run-time error JS1004: Expected ';'
(4445,51-52): run-time error JS1195: Expected expression: :
(4447,33-34): run-time error JS1195: Expected expression: )
(4449,25-27): run-time error JS1006: Expected ')': if
(4449,59): run-time error JS1004: Expected ';'
(4451,27-31): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(4457,22-23): run-time error JS1195: Expected expression: )
(4459,13-14): run-time error JS1006: Expected ')': }
(4516,37-38): run-time error JS1009: Expected '}': [
(4516,50-51): run-time error JS1006: Expected ')': :
(4516,50): run-time error JS1004: Expected ';'
(4517,52): run-time error JS1004: Expected ';'
(4517,52-53): run-time error JS1195: Expected expression: :
(4518,45): run-time error JS1004: Expected ';'
(4518,45-46): run-time error JS1195: Expected expression: :
(4519,49): run-time error JS1004: Expected ';'
(4519,49-50): run-time error JS1195: Expected expression: :
(4521,33-34): run-time error JS1195: Expected expression: )
(4526,21-27): run-time error JS1006: Expected ')': $scope
(4527,18-19): run-time error JS1195: Expected expression: )
(4527,19-20): run-time error JS1195: Expected expression: .
(4532,33-34): run-time error JS1009: Expected '}': [
(4532,46-47): run-time error JS1006: Expected ')': :
(4532,46): run-time error JS1004: Expected ';'
(4533,48): run-time error JS1004: Expected ';'
(4533,48-49): run-time error JS1195: Expected expression: :
(4534,41): run-time error JS1004: Expected ';'
(4534,41-42): run-time error JS1195: Expected expression: :
(4536,29-30): run-time error JS1195: Expected expression: )
(4539,21-23): run-time error JS1006: Expected ')': if
(4539,55): run-time error JS1004: Expected ';'
(4541,23-27): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(4547,17-18): run-time error JS1002: Syntax error: }
(4547,18-19): run-time error JS1195: Expected expression: )
(4548,13-14): run-time error JS1002: Syntax error: }
(4622,9-10): run-time error JS1002: Syntax error: }
(4622,10-11): run-time error JS1195: Expected expression: ,
(4622,16): run-time error JS1004: Expected ';'
(4622,16-17): run-time error JS1195: Expected expression: )
(4649,37-38): run-time error JS1009: Expected '}': [
(4649,50-51): run-time error JS1006: Expected ')': :
(4649,50): run-time error JS1004: Expected ';'
(4650,52): run-time error JS1004: Expected ';'
(4650,52-53): run-time error JS1195: Expected expression: :
(4651,44): run-time error JS1004: Expected ';'
(4651,44-45): run-time error JS1195: Expected expression: :
(4652,44): run-time error JS1004: Expected ';'
(4652,44-45): run-time error JS1195: Expected expression: :
(4653,49): run-time error JS1004: Expected ';'
(4653,49-50): run-time error JS1195: Expected expression: :
(4655,33-34): run-time error JS1195: Expected expression: )
(4659,17-18): run-time error JS1006: Expected ')': }
(4664,33-34): run-time error JS1009: Expected '}': [
(4664,46-47): run-time error JS1006: Expected ')': :
(4664,46): run-time error JS1004: Expected ';'
(4665,48): run-time error JS1004: Expected ';'
(4665,48-49): run-time error JS1195: Expected expression: :
(4666,40): run-time error JS1004: Expected ';'
(4666,40-41): run-time error JS1195: Expected expression: :
(4667,40): run-time error JS1004: Expected ';'
(4667,40-41): run-time error JS1195: Expected expression: :
(4669,29-30): run-time error JS1195: Expected expression: )
(4677,18-19): run-time error JS1195: Expected expression: )
(4679,9-10): run-time error JS1002: Syntax error: }
(4687,5-6): run-time error JS1002: Syntax error: }
(4688,1-2): run-time error JS1195: Expected expression: ]
(4688,2-3): run-time error JS1195: Expected expression: )
(4327,17-23): run-time error JS1018: 'return' statement outside of function: return
(175,297-304): run-time error JS1019: Can't have 'break' outside of loop: break a
 */
/*
 AngularJS v1.6.2
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(z){'use strict';function M(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.6.2/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var f=encodeURIComponent,e;e=arguments[d];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=f(e)}return new b(c)}}function sa(a){if(null==a||Va(a))return!1;if(C(a)||E(a)||D&&a instanceof
D)return!0;var b="length"in Object(a)&&a.length;return Y(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"===typeof a.item)}function q(a,b,d){var c,f;if(a)if(y(a))for(c in a)"prototype"!==c&&"length"!==c&&"name"!==c&&a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else if(C(a)||sa(a)){var e="object"!==typeof a;c=0;for(f=a.length;c<f;c++)(e||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==q)a.forEach(b,d,a);else if(Dc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&
b.call(d,a[c],c,a);else for(c in a)ua.call(a,c)&&b.call(d,a[c],c,a);return a}function Ec(a,b,d){for(var c=Object.keys(a).sort(),f=0;f<c.length;f++)b.call(d,a[c[f]],c[f]);return c}function Fc(a){return function(b,d){a(d,b)}}function je(){return++qb}function Sb(a,b,d){for(var c=a.$$hashKey,f=0,e=b.length;f<e;++f){var g=b[f];if(F(g)||y(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],n=g[m];d&&F(n)?ga(n)?a[m]=new Date(n.valueOf()):Wa(n)?a[m]=new RegExp(n):n.nodeName?a[m]=n.cloneNode(!0):
Tb(n)?a[m]=n.clone():(F(a[m])||(a[m]=C(n)?[]:{}),Sb(a[m],[n],!0)):a[m]=n}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function R(a){return Sb(a,va.call(arguments,1),!1)}function ke(a){return Sb(a,va.call(arguments,1),!0)}function Z(a){return parseInt(a,10)}function Ub(a,b){return R(Object.create(a),b)}function w(){}function Xa(a){return a}function ma(a){return function(){return a}}function Vb(a){return y(a.toString)&&a.toString!==na}function x(a){return"undefined"===typeof a}function v(a){return"undefined"!==
typeof a}function F(a){return null!==a&&"object"===typeof a}function Dc(a){return null!==a&&"object"===typeof a&&!Gc(a)}function E(a){return"string"===typeof a}function Y(a){return"number"===typeof a}function ga(a){return"[object Date]"===na.call(a)}function y(a){return"function"===typeof a}function Wa(a){return"[object RegExp]"===na.call(a)}function Va(a){return a&&a.window===a}function Ya(a){return a&&a.$evalAsync&&a.$watch}function Ia(a){return"boolean"===typeof a}function le(a){return a&&Y(a.length)&&
me.test(na.call(a))}function Tb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function ne(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function wa(a){return P(a.nodeName||a[0]&&a[0].nodeName)}function Za(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function xa(a,b){function d(a,b){var d=b.$$hashKey,e;if(C(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(Dc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&
(b[e]=c(a[e]));else for(e in a)ua.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!F(a))return a;var b=e.indexOf(a);if(-1!==b)return g[b];if(Va(a)||Ya(a))throw Fa("cpws");var b=!1,c=f(a);void 0===c&&(c=C(a)?[]:Object.create(Gc(a)),b=!0);e.push(a);g.push(c);return b?d(a,c):c}function f(a){switch(na.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(c(a.buffer),
a.byteOffset,a.length);case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(y(a.cloneNode))return a.cloneNode(!0)}
var e=[],g=[];if(b){if(le(b)||"[object ArrayBuffer]"===na.call(b))throw Fa("cpta");if(a===b)throw Fa("cpi");C(b)?b.length=0:q(b,function(a,d){"$$hashKey"!==d&&delete b[d]});e.push(a);g.push(b);return d(a,b)}return c(a)}function qa(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d===typeof b&&"object"===d)if(C(a)){if(!C(b))return!1;if((d=a.length)===b.length){for(c=0;c<d;c++)if(!qa(a[c],b[c]))return!1;return!0}}else{if(ga(a))return ga(b)?qa(a.getTime(),
b.getTime()):!1;if(Wa(a))return Wa(b)?a.toString()===b.toString():!1;if(Ya(a)||Ya(b)||Va(a)||Va(b)||C(b)||ga(b)||Wa(b))return!1;d=W();for(c in a)if("$"!==c.charAt(0)&&!y(a[c])){if(!qa(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&v(b[c])&&!y(b[c]))return!1;return!0}return!1}function $a(a,b,d){return a.concat(va.call(b,d))}function ab(a,b){var d=2<arguments.length?va.call(arguments,2):[];return!y(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,
$a(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Hc(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Va(b)?d="$WINDOW":b&&z.document===b?d="$DOCUMENT":Ya(b)&&(d="$SCOPE");return d}function bb(a,b){if(!x(a))return Y(b)||(b=b?2:null),JSON.stringify(a,Hc,b)}function Ic(a){return E(a)?JSON.parse(a):a}function Jc(a,b){a=a.replace(oe,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return da(d)?b:d}function Wb(a,
b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=Jc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function ya(a){a=D(a).clone();try{a.empty()}catch(b){}var d=D("<div>").append(a).html();try{return a[0].nodeType===Ja?P(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+P(b)})}catch(c){return P(d)}}function Kc(a){try{return decodeURIComponent(a)}catch(b){}}function Lc(a){var b={};q((a||"").split("&"),function(a){var c,f,e;a&&(f=a=a.replace(/\+/g,"%20"),
c=a.indexOf("="),-1!==c&&(f=a.substring(0,c),e=a.substring(c+1)),f=Kc(f),v(f)&&(e=v(e)?Kc(e):!0,ua.call(b,f)?C(b[f])?b[f].push(e):b[f]=[b[f],e]:b[f]=e))});return b}function Xb(a){var b=[];q(a,function(a,c){C(a)?q(a,function(a){b.push(ka(c,!0)+(!0===a?"":"="+ka(a,!0)))}):b.push(ka(c,!0)+(!0===a?"":"="+ka(a,!0)))});return b.length?b.join("&"):""}function cb(a){return ka(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ka(a,b){return encodeURIComponent(a).replace(/%40/gi,
"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function pe(a,b){var d,c,f=Ka.length;for(c=0;c<f;++c)if(d=Ka[c]+b,E(d=a.getAttribute(d)))return d;return null}function qe(a,b){var d,c,f={};q(Ka,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});q(Ka,function(b){b+="app";var f;!d&&(f=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=f,c=f.getAttribute(b))});d&&(re?(f.strictDi=null!==pe(d,"strict-di"),
b(d,c?[c]:[],f)):z.console.error("Angular: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match."))}function Mc(a,b,d){F(d)||(d={});d=R({strictDi:!1},d);var c=function(){a=D(a);if(a.injector()){var c=a[0]===z.document?"document":ya(a);throw Fa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);
b.unshift("ng");c=db(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},f=/^NG_ENABLE_DEBUG_INFO!/,e=/^NG_DEFER_BOOTSTRAP!/;z&&f.test(z.name)&&(d.debugInfoEnabled=!0,z.name=z.name.replace(f,""));if(z&&!e.test(z.name))return c();z.name=z.name.replace(e,"");$.resumeBootstrap=function(a){q(a,function(a){b.push(a)});return c()};y($.resumeDeferredBootstrap)&&$.resumeDeferredBootstrap()}function se(){z.name=
"NG_ENABLE_DEBUG_INFO!"+z.name;z.location.reload()}function te(a){a=$.element(a).injector();if(!a)throw Fa("test");return a.get("$$testability")}function Nc(a,b){b=b||"_";return a.replace(ue,function(a,c){return(c?b:"")+a.toLowerCase()})}function ve(){var a;if(!Oc){var b=rb();(ta=x(b)?z.jQuery:b?z[b]:void 0)&&ta.fn.on?(D=ta,R(ta.fn,{scope:Oa.scope,isolateScope:Oa.isolateScope,controller:Oa.controller,injector:Oa.injector,inheritedData:Oa.inheritedData}),a=ta.cleanData,ta.cleanData=function(b){for(var c,
f=0,e;null!=(e=b[f]);f++)(c=ta._data(e,"events"))&&c.$destroy&&ta(e).triggerHandler("$destroy");a(b)}):D=X;$.element=D;Oc=!0}}function eb(a,b,d){if(!a)throw Fa("areq",b||"?",d||"required");return a}function sb(a,b,d){d&&C(a)&&(a=a[a.length-1]);eb(y(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function La(a,b){if("hasOwnProperty"===a)throw Fa("badname",b);}function Pc(a,b,d){if(!b)return a;b=b.split(".");for(var c,f=a,e=b.length,g=0;g<e;g++)c=
b[g],a&&(a=(f=a)[c]);return!d&&y(a)?ab(f,a):a}function tb(a){for(var b=a[0],d=a[a.length-1],c,f=1;b!==d&&(b=b.nextSibling);f++)if(c||a[f]!==b)c||(c=D(va.call(a,0,f))),c.push(b);return c||a}function W(){return Object.create(null)}function Yb(a){if(null==a)return"";switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=!Vb(a)||C(a)||ga(a)?bb(a):a.toString()}return a}function we(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=M("$injector"),c=M("ng");a=b(a,"angular",Object);a.$$minErr=
a.$$minErr||M;return b(a,"module",function(){var a={};return function(e,g,h){if("hasOwnProperty"===e)throw c("badname","module");g&&a.hasOwnProperty(e)&&(a[e]=null);return b(a,e,function(){function a(b,d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return J}}function b(a,d,f){f||(f=c);return function(b,c){c&&y(c)&&(c.$$moduleName=e);f.push([a,d,arguments]);return J}}if(!g)throw d("nomod",e);var c=[],f=[],p=[],r=a("$injector","invoke","push",f),J={_invokeQueue:c,_configBlocks:f,_runBlocks:p,
requires:g,name:e,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator",f),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:r,run:function(a){p.push(a);return this}};h&&r(h);return J})}})}
function ra(a,b){if(C(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(F(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function xe(a){var b=[];return JSON.stringify(a,function(a,c){c=Hc(a,c);if(F(c)){if(0<=b.indexOf(c))return"...";b.push(c)}return c})}function ye(a){R(a,{bootstrap:Mc,copy:xa,extend:R,merge:ke,equals:qa,element:D,forEach:q,injector:db,noop:w,bind:ab,toJson:bb,fromJson:Ic,identity:Xa,isUndefined:x,isDefined:v,isString:E,isFunction:y,
isObject:F,isNumber:Y,isElement:Tb,isArray:C,version:ze,isDate:ga,lowercase:P,uppercase:ub,callbacks:{$$counter:0},getTestability:te,reloadWithDebugInfo:se,$$minErr:M,$$csp:Ga,$$encodeUriSegment:cb,$$encodeUriQuery:ka,$$stringify:Yb});Zb=we(z);Zb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Ae});a.provider("$compile",Qc).directive({a:Be,input:Rc,textarea:Rc,form:Ce,script:De,select:Ee,option:Fe,ngBind:Ge,ngBindHtml:He,ngBindTemplate:Ie,ngClass:Je,ngClassEven:Ke,ngClassOdd:Le,
ngCloak:Me,ngController:Ne,ngForm:Oe,ngHide:Pe,ngIf:Qe,ngInclude:Re,ngInit:Se,ngNonBindable:Te,ngPluralize:Ue,ngRepeat:Ve,ngShow:We,ngStyle:Xe,ngSwitch:Ye,ngSwitchWhen:Ze,ngSwitchDefault:$e,ngOptions:af,ngTransclude:bf,ngModel:cf,ngList:df,ngChange:ef,pattern:Sc,ngPattern:Sc,required:Tc,ngRequired:Tc,minlength:Uc,ngMinlength:Uc,maxlength:Vc,ngMaxlength:Vc,ngValue:ff,ngModelOptions:gf}).directive({ngInclude:hf}).directive(vb).directive(Wc);a.provider({$anchorScroll:jf,$animate:kf,$animateCss:lf,$$animateJs:mf,
$$animateQueue:nf,$$AnimateRunner:of,$$animateAsyncRun:pf,$browser:qf,$cacheFactory:rf,$controller:sf,$document:tf,$$isDocumentHidden:uf,$exceptionHandler:vf,$filter:Xc,$$forceReflow:wf,$interpolate:xf,$interval:yf,$http:zf,$httpParamSerializer:Af,$httpParamSerializerJQLike:Bf,$httpBackend:Cf,$xhrFactory:Df,$jsonpCallbacks:Ef,$location:Ff,$log:Gf,$parse:Hf,$rootScope:If,$q:Jf,$$q:Kf,$sce:Lf,$sceDelegate:Mf,$sniffer:Nf,$templateCache:Of,$templateRequest:Pf,$$testability:Qf,$timeout:Rf,$window:Sf,$$rAF:Tf,
$$jqLite:Uf,$$Map:Vf,$$cookieReader:Wf})}])}function fb(a,b){return b.toUpperCase()}function wb(a){return a.replace(Xf,fb)}function Yc(a){a=a.nodeType;return 1===a||!a||9===a}function Zc(a,b){var d,c,f=b.createDocumentFragment(),e=[];if($b.test(a)){d=f.appendChild(b.createElement("div"));c=(Yf.exec(a)||["",""])[1].toLowerCase();c=ha[c]||ha._default;d.innerHTML=c[1]+a.replace(Zf,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;e=$a(e,d.childNodes);d=f.firstChild;d.textContent=""}else e.push(b.createTextNode(a));
f.textContent="";f.innerHTML="";q(e,function(a){f.appendChild(a)});return f}function X(a){if(a instanceof X)return a;var b;E(a)&&(a=S(a),b=!0);if(!(this instanceof X)){if(b&&"<"!==a.charAt(0))throw ac("nosel");return new X(a)}if(b){b=z.document;var d;a=(d=$f.exec(a))?[b.createElement(d[1])]:(d=Zc(a,b))?d.childNodes:[];bc(this,a)}else y(a)?$c(a):bc(this,a)}function cc(a){return a.cloneNode(!0)}function xb(a,b){b||gb(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,f=d.length;c<f;c++)gb(d[c])}
function ad(a,b,d,c){if(v(c))throw ac("offargs");var f=(c=yb(a))&&c.events,e=c&&c.handle;if(e)if(b){var g=function(b){var c=f[b];v(d)&&Za(c||[],d);v(d)&&c&&0<c.length||(a.removeEventListener(b,e),delete f[b])};q(b.split(" "),function(a){g(a);zb[a]&&g(zb[a])})}else for(b in f)"$destroy"!==b&&a.removeEventListener(b,e),delete f[b]}function gb(a,b){var d=a.ng339,c=d&&hb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),ad(a)),delete hb[d],a.ng339=void 0))}function yb(a,
b){var d=a.ng339,d=d&&hb[d];b&&!d&&(a.ng339=d=++ag,d=hb[d]={events:{},data:{},handle:void 0});return d}function dc(a,b,d){if(Yc(a)){var c,f=v(d),e=!f&&b&&!F(b),g=!b;a=(a=yb(a,!e))&&a.data;if(f)a[wb(b)]=d;else{if(g)return a;if(e)return a&&a[wb(b)];for(c in b)a[wb(c)]=b[c]}}}function Ab(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Bb(a,b){b&&a.setAttribute&&q(b.split(" "),function(b){a.setAttribute("class",S((" "+(a.getAttribute("class")||
"")+" ").replace(/[\n\t]/g," ").replace(" "+S(b)+" "," ")))})}function Cb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(b.split(" "),function(a){a=S(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",S(d))}}function bc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function bd(a,b){return Db(a,"$"+(b||"ngController")+
"Controller")}function Db(a,b,d){9===a.nodeType&&(a=a.documentElement);for(b=C(b)?b:[b];a;){for(var c=0,f=b.length;c<f;c++)if(v(d=D.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function cd(a){for(xb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Eb(a,b){b||xb(a);var d=a.parentNode;d&&d.removeChild(a)}function bg(a,b){b=b||z;if("complete"===b.document.readyState)b.setTimeout(a);else D(b).on("load",a)}function $c(a){function b(){z.document.removeEventListener("DOMContentLoaded",
b);z.removeEventListener("load",b);a()}"complete"===z.document.readyState?z.setTimeout(a):(z.document.addEventListener("DOMContentLoaded",b),z.addEventListener("load",b))}function dd(a,b){var d=Fb[b.toLowerCase()];return d&&ed[wa(a)]&&d}function cg(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var e=b[d||c.type],g=e?e.length:0;if(g){if(x(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=
!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=e.specialHandlerWrapper||dg;1<g&&(e=ra(e));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,e[l])}};d.elem=a;return d}function dg(a,b,d){d.call(a,b)}function eg(a,b,d){var c=b.relatedTarget;c&&(c===a||fg.call(a,c))||d.call(a,b)}function Uf(){this.$get=function(){return R(X,{hasClass:function(a,b){a.attr&&(a=a[0]);return Ab(a,b)},addClass:function(a,
b){a.attr&&(a=a[0]);return Cb(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return Bb(a,b)}})}}function Pa(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"===d||"object"===d&&null!==a?a.$$hashKey=d+":"+(b||je)():d+":"+a}function fd(){this._keys=[];this._values=[];this._lastKey=NaN;this._lastIndex=-1}function gd(a){a=Function.prototype.toString.call(a).replace(gg,"");return a.match(hg)||a.match(ig)}function jg(a){return(a=gd(a))?"function("+
(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function db(a,b){function d(a){return function(b,c){if(F(b))q(b,Fc(a));else return a(b,c)}}function c(a,b){La(a,"service");if(y(b)||C(b))b=p.instantiate(b);if(!b.$get)throw za("pget",a);return n[a+"Provider"]=b}function f(a,b){return function(){var c=O.invoke(b,this);if(x(c))throw za("undef",a);return c}}function e(a,b,d){return c(a,{$get:!1!==d?f(a,b):b})}function g(a){eb(x(a)||C(a),"modulesToLoad","not an array");var b=[],c;q(a,function(a){function d(a){var b,
c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=p.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.set(a,!0);try{E(a)?(c=Zb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):y(a)?b.push(p.invoke(a)):C(a)?b.push(p.invoke(a)):sb(a,"module")}catch(e){throw C(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1===e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),za("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===
k)throw za("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e),a[b]}catch(f){throw a[b]===k&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=db.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!==typeof l)throw za("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);C(a)&&(a=a[a.length-1]);d=a;if(Ha||"function"!==typeof d)d=!1;else{var f=d.$$ngIsClass;
Ia(f)||(f=d.$$ngIsClass=/^(?:class\b|constructor\()/.test(Function.prototype.toString.call(d)));d=f}return d?(c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=C(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,a))},get:d,annotate:db.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Gb,n={$provide:{provider:d(c),factory:d(e),service:d(function(a,
b){return e(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return e(a,ma(b),!1)}),constant:d(function(a,b){La(a,"constant");n[a]=b;r[a]=b}),decorator:function(a,b){var c=p.get(a+"Provider"),d=c.$get;c.$get=function(){var a=O.invoke(d,c);return O.invoke(b,null,{$delegate:a})}}}},p=n.$injector=h(n,function(a,b){$.isString(b)&&l.push(b);throw za("unpr",l.join(" <- "));}),r={},J=h(r,function(a,b){var c=p.get(a+"Provider",b);return O.invoke(c.$get,c,void 0,a)}),O=J;n.$injectorProvider=
{$get:ma(J)};var u=g(a),O=J.get("$injector");O.strictDi=b;q(u,function(a){a&&O.invoke(a)});return O}function jf(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function f(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===wa(a))return b=a,!0});return b}function e(a){if(a){a.scrollIntoView();var c;c=g.yOffset;y(c)?c=c():Tb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Y(c)||(c=
0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=E(a)?a:Y(a)?a.toString():d.hash();var b;a?(b=h.getElementById(a))?e(b):(b=f(h.getElementsByName(a)))?e(b):"top"===a&&e(null):e(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||bg(function(){c.$evalAsync(g)})});return g}]}function ib(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;C(a)&&(a=a.join(" "));C(b)&&(b=b.join(" "));return a+" "+b}function kg(a){E(a)&&
(a=a.split(" "));var b=W();q(a,function(a){a.length&&(b[a]=!0)});return b}function ea(a){return F(a)?a:{}}function lg(a,b,d,c){function f(a){try{a.apply(null,va.call(arguments,1))}finally{if(J--,0===J)for(;O.length;)try{O.pop()()}catch(b){d.error(b)}}}function e(){ia=null;h()}function g(){u=A();u=x(u)?null:u;qa(u,B)&&(u=B);H=B=u}function h(){var a=H;g();if(V!==k.url()||a!==u)V=k.url(),H=u,q(K,function(a){a(k.url(),u)})}var k=this,l=a.location,m=a.history,n=a.setTimeout,p=a.clearTimeout,r={};k.isMock=
!1;var J=0,O=[];k.$$completeOutstandingRequest=f;k.$$incOutstandingRequestCount=function(){J++};k.notifyWhenNoOutstandingRequests=function(a){0===J?a():O.push(a)};var u,H,V=l.href,t=b.find("base"),ia=null,A=c.history?function(){try{return m.state}catch(a){}}:w;g();k.url=function(b,d,e){x(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=H===e;if(V===b&&(!c.history||f))return k;var h=V&&Aa(V)===Aa(b);V=b;H=e;!c.history||h&&f?(h||(ia=b),d?l.replace(b):h?(d=l,e=b.indexOf("#"),
e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(ia=b)):(m[d?"replaceState":"pushState"](e,"",b),g());ia&&(ia=b);return k}return ia||l.href.replace(/%27/g,"'")};k.state=function(){return u};var K=[],I=!1,B=null;k.onUrlChange=function(b){if(!I){if(c.history)D(a).on("popstate",e);D(a).on("hashchange",e);I=!0}K.push(b);return b};k.$$applicationDestroyed=function(){D(a).off("hashchange popstate",e)};k.$$checkUrlChange=h;k.baseHref=function(){var a=t.attr("href");return a?a.replace(/^(https?:)?\/\/[^/]*/,
""):""};k.defer=function(a,b){var c;J++;c=n(function(){delete r[c];f(a)},b||0);r[c]=!0;return c};k.defer.cancel=function(a){return r[a]?(delete r[a],p(a),f(w),!0):!1}}function qf(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new lg(a,c,b,d)}]}function rf(){this.$get=function(){function a(a,c){function f(a){a!==n&&(p?p===a&&(p=a.n):p=a,e(a.n,a.p),e(a,n),n=a,n.n=null)}function e(a,b){a!==b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw M("$cacheFactory")("iid",a);var g=0,h=
R({},c,{id:a}),k=W(),l=c&&c.capacity||Number.MAX_VALUE,m=W(),n=null,p=null;return b[a]={put:function(a,b){if(!x(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});f(c)}a in k||g++;k[a]=b;g>l&&this.remove(p.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;f(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b===n&&(n=b.p);b===p&&(p=b.n);e(b.n,b.p);delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=W();g=0;m=W();n=p=null},destroy:function(){m=
h=k=null;delete b[a]},info:function(){return R({},h,{size:g})}}}var b={};a.info=function(){var a={};q(b,function(b,f){a[f]=b.info()});return a};a.get=function(a){return b[a]};return a}}function Of(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Qc(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*([\w$]*)\s*$/,e=W();q(a,function(a,f){if(a in n)e[f]=n[a];else{var g=a.match(d);if(!g)throw fa("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");
e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f};g[4]&&(n[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==P(b))throw fa("baddir",a);if(a!==a.trim())throw fa("baddir",a);}function f(a){var b=a.require||a.controller&&a.name;!C(b)&&F(b)&&q(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var e={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,h=/(([\w-]+)(?::([^;]+))?;?)/,k=ne("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,
m=/^(on[a-z]+|formaction)$/,n=W();this.directive=function V(b,d){eb(b,"name");La(b,"directive");E(b)?(c(b),eb(d,"directiveFactory"),e.hasOwnProperty(b)||(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];q(e[b],function(e,g){try{var h=a.invoke(e);y(h)?h={compile:ma(h)}:!h.compile&&h.link&&(h.compile=ma(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=f(h);var k=h,l=h.restrict;if(l&&(!E(l)||!/[EACM]/.test(l)))throw fa("badrestrict",l,b);k.restrict=
l||"EA";h.$$moduleName=e.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),e[b].push(d)):q(b,Fc(V));return this};this.component=function(a,b){function c(a){function e(b){return y(b)||C(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:mg(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};
q(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}var d=b.controller||function(){};q(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,y(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return v(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return v(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var p=!0;this.debugInfoEnabled=function(a){return v(a)?
(p=a,this):p};var r=!1;this.preAssignBindingsEnabled=function(a){return v(a)?(r=a,this):r};var J=10;this.onChangesTtl=function(a){return arguments.length?(J=a,this):J};var O=!0;this.commentDirectivesEnabled=function(a){return arguments.length?(O=a,this):O};var u=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(u=a,this):u};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,
b,c,f,n,I,B,L,N,G){function T(){try{if(!--za)throw ea=void 0,fa("infchng",J);B.$apply(function(){for(var a=[],b=0,c=ea.length;b<c;++b)try{ea[b]()}catch(d){a.push(d)}ea=void 0;if(a.length)throw a;})}finally{za++}}function s(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function Q(a,b,c){xa.innerHTML="<span "+b+">";b=xa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function Ma(a,
b){try{a.addClass(b)}catch(c){}}function ba(a,b,c,d,e){a instanceof D||(a=D(a));var f=Na(a,b,a,c,d,e);ba.$$addScopeClass(a);var g=null;return function(b,c,d){if(!a)throw fa("multilink");eb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==wa(d)&&na.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==g?D(ha(g,D("<div>").append(a).html())):
c?Oa.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);ba.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);c||(a=f=null);return d}}function Na(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,n,p,r;if(K)for(r=Array(c.length),m=0;m<h.length;m+=3)f=h[m],r[f]=c[f];else r=c;m=0;for(n=h.length;m<n;)k=r[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),ba.$$addScopeInfo(D(k),l)):l=a,p=c.transcludeOnThisElement?ja(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ja(a,b):null,c(f,l,
k,d,p)):f&&f(a,k.childNodes,void 0,e)}for(var h=[],k=C(a)||a instanceof D,l,m,n,p,K,r=0;r<a.length;r++){l=new s;11===Ha&&M(a,r,k);m=fc(a[r],[],l,0===r?d:void 0,e);(f=m.length?X(m,a[r],l,b,c,null,[],[],f):null)&&f.scope&&ba.$$addScopeClass(l.$$element);l=f&&f.terminal||!(n=a[r].childNodes)||!n.length?null:Na(n,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(r,f,l),p=!0,K=K||f;f=null}return p?g:null}function M(a,b,c){var d=a[b],e=d.parentNode,f;if(d.nodeType===
Ja)for(;;){f=e?d.nextSibling:a[b+1];if(!f||f.nodeType!==Ja)break;d.nodeValue+=f.nodeValue;f.parentNode&&f.parentNode.removeChild(f);c&&f===a[b+1]&&a.splice(b+1,1)}}function ja(a,b,c){function d(e,f,g,h,k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var e=d.$$slots=W(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?ja(a,b.$$slots[f],c):null;return d}function fc(a,b,c,d,e){var f=c.$attr,g;switch(a.nodeType){case 1:g=wa(a);Y(b,
Ba(g),"E",d,e);for(var k,l,m,n,p=a.attributes,K=0,r=p&&p.length;K<r;K++){var A=!1,B=!1;k=p[K];l=k.name;m=k.value;k=Ba(l);(n=Ka.test(k))&&(l=l.replace(hd,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()}));(k=k.match(La))&&Z(k[1])&&(A=l,B=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));k=Ba(l.toLowerCase());f[k]=l;if(n||!c.hasOwnProperty(k))c[k]=m,dd(a,k)&&(c[k]=!0);ra(a,b,m,k,n);Y(b,k,"A",d,e,A,B)}"input"===g&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete",
"off");if(!Ga)break;f=a.className;F(f)&&(f=f.animVal);if(E(f)&&""!==f)for(;a=h.exec(f);)k=Ba(a[2]),Y(b,k,"C",d,e)&&(c[k]=S(a[3])),f=f.substr(a.index+a[0].length);break;case Ja:ma(b,a.nodeValue);break;case 8:if(!Fa)break;jb(a,b,c,d,e)}b.sort(ka);return b}function jb(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=Ba(f[1]);Y(b,h,"M",d,e)&&(c[h]=S(f[2]))}}catch(k){}}function id(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw fa("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&
e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return D(d)}function jd(a,b,c){return function(d,e,f,g,h){e=id(e[0],b,c);return a(d,e,f,g,h)}}function gc(a,b,c,d,e,f){var g;return a?ba(b,c,d,e,f):function(){g||(g=ba(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function X(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=jd(a,c,d));a.require=t.require;a.directiveName=L;if(B===t||t.$$isolateScope)a=sa(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=jd(b,c,d));b.require=
t.require;b.directiveName=L;if(B===t||t.$$isolateScope)b=sa(b,{isolateScope:!0});k.push(b)}}function n(a,e,f,g,l){function m(a,b,c,d){var e;Ya(a)||(d=c,c=b,b=a,a=void 0);V&&(e=N);c||(c=V?L.parent():L);if(d){var f=l.$$slots[d];if(f)return f(a,b,e,c,Q);if(x(f))throw fa("noslot",d,ya(L));}else return l(a,b,e,c,Q)}var p,t,u,G,J,N,T,L;b===f?(g=d,L=d.$$element):(L=D(f),g=new s(L,d));J=e;B?G=e.$new(!0):K&&(J=e.$parent);l&&(T=m,T.$$boundTransclude=l,T.isSlotFilled=function(a){return!!l.$$slots[a]});A&&(N=
ca(L,g,T,A,G,e,B));B&&(ba.$$addScopeInfo(L,G,!0,!(I&&(I===B||I===B.$$originalDirective))),ba.$$addScopeClass(L,!0),G.$$isolateBindings=B.$$isolateBindings,t=oa(e,g,G,G.$$isolateBindings,B),t.removeWatches&&G.$on("$destroy",t.removeWatches));for(p in N){t=A[p];u=N[p];var Hb=t.$$bindings.bindToController;if(r){u.bindingInfo=Hb?oa(J,g,u.instance,Hb,t):{};var O=u();O!==u.instance&&(u.instance=O,L.data("$"+t.name+"Controller",O),u.bindingInfo.removeWatches&&u.bindingInfo.removeWatches(),u.bindingInfo=
oa(J,g,u.instance,Hb,t))}else u.instance=u(),L.data("$"+t.name+"Controller",u.instance),u.bindingInfo=oa(J,g,u.instance,Hb,t)}q(A,function(a,b){var c=a.require;a.bindToController&&!C(c)&&F(c)&&R(N[b].instance,U(b,c,L,N))});q(N,function(a){var b=a.instance;if(y(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(y(b.$onInit))try{b.$onInit()}catch(e){c(e)}y(b.$doCheck)&&(J.$watch(function(){b.$doCheck()}),b.$doCheck());y(b.$onDestroy)&&J.$on("$destroy",function(){b.$onDestroy()})});
p=0;for(t=h.length;p<t;p++)u=h[p],ta(u,u.isolateScope?G:e,L,g,u.require&&U(u.directiveName,u.require,L,N),T);var Q=e;B&&(B.template||null===B.templateUrl)&&(Q=G);a&&a(Q,f.childNodes,void 0,l);for(p=k.length-1;0<=p;p--)u=k[p],ta(u,u.isolateScope?G:e,L,g,u.require&&U(u.directiveName,u.require,L,N),T);q(N,function(a){a=a.instance;y(a.$postLink)&&a.$postLink()})}l=l||{};for(var p=-Number.MAX_VALUE,K=l.newScopeDirective,A=l.controllerDirectives,B=l.newIsolateScopeDirective,I=l.templateDirective,u=l.nonTlbTranscludeDirective,
J=!1,N=!1,V=l.hasElementTranscludeDirective,G=d.$$element=D(b),t,L,T,O=e,Q,v=!1,Ma=!1,w,z=0,E=a.length;z<E;z++){t=a[z];var Na=t.$$start,M=t.$$end;Na&&(G=id(b,Na,M));T=void 0;if(p>t.priority)break;if(w=t.scope)t.templateUrl||(F(w)?($("new/isolated scope",B||K,t,G),B=t):$("new/isolated scope",B,t,G)),K=K||t;L=t.name;if(!v&&(t.replace&&(t.templateUrl||t.template)||t.transclude&&!t.$$tlb)){for(w=z+1;v=a[w++];)if(v.transclude&&!v.$$tlb||v.replace&&(v.templateUrl||v.template)){Ma=!0;break}v=!0}!t.templateUrl&&
t.controller&&(A=A||W(),$("'"+L+"' controller",A[L],t,G),A[L]=t);if(w=t.transclude)if(J=!0,t.$$tlb||($("transclusion",u,t,G),u=t),"element"===w)V=!0,p=t.priority,T=G,G=d.$$element=D(ba.$$createComment(L,d[L])),b=G[0],la(f,va.call(T,0),b),T[0].$$parentNode=T[0].parentNode,O=gc(Ma,T,e,p,g&&g.name,{nonTlbTranscludeDirective:u});else{var ja=W();if(F(w)){T=[];var P=W(),jb=W();q(w,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;P[a]=b;ja[b]=null;jb[b]=c});q(G.contents(),function(a){var b=P[Ba(wa(a))];
b?(jb[b]=!0,ja[b]=ja[b]||[],ja[b].push(a)):T.push(a)});q(jb,function(a,b){if(!a)throw fa("reqslot",b);});for(var ec in ja)ja[ec]&&(ja[ec]=gc(Ma,ja[ec],e))}else T=D(cc(b)).contents();G.empty();O=gc(Ma,T,e,void 0,void 0,{needsNewScope:t.$$isolateScope||t.$$newScope});O.$$slots=ja}if(t.template)if(N=!0,$("template",I,t,G),I=t,w=y(t.template)?t.template(G,d):t.template,w=Ea(w),t.replace){g=t;T=$b.test(w)?kd(ha(t.templateNamespace,S(w))):[];b=T[0];if(1!==T.length||1!==b.nodeType)throw fa("tplrt",L,"");
la(f,G,b);E={$attr:{}};w=fc(b,[],E);var Y=a.splice(z+1,a.length-(z+1));(B||K)&&aa(w,B,K);a=a.concat(w).concat(Y);da(d,E);E=a.length}else G.html(w);if(t.templateUrl)N=!0,$("template",I,t,G),I=t,t.replace&&(g=t),n=ga(a.splice(z,a.length-z),G,d,f,J&&O,h,k,{controllerDirectives:A,newScopeDirective:K!==t&&K,newIsolateScopeDirective:B,templateDirective:I,nonTlbTranscludeDirective:u}),E=a.length;else if(t.compile)try{Q=t.compile(G,d,O);var Z=t.$$originalDirective||t;y(Q)?m(null,ab(Z,Q),Na,M):Q&&m(ab(Z,Q.pre),
ab(Z,Q.post),Na,M)}catch(ea){c(ea,ya(G))}t.terminal&&(n.terminal=!0,p=Math.max(p,t.priority))}n.scope=K&&!0===K.scope;n.transcludeOnThisElement=J;n.templateOnThisElement=N;n.transclude=O;l.hasElementTranscludeDirective=V;return n}function U(a,b,c,d){var e;if(E(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw fa("ctreq",b,a);}else if(C(b))for(e=
[],g=0,f=b.length;g<f;g++)e[g]=U(a,b[g],c,d);else F(b)&&(e={},q(b,function(b,f){e[f]=U(a,b,c,d)}));return e||null}function ca(a,b,c,d,e,f,g){var h=W(),k;for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},n=l.controller;"@"===n&&(n=b[l.name]);m=I(n,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function aa(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Ub(a[d],{$$isolateScope:b,$$newScope:c})}function Y(b,c,f,g,h,k,l){if(c===
h)return null;var m=null;if(e.hasOwnProperty(c)){h=a.get(c+"Directive");for(var n=0,p=h.length;n<p;n++)if(c=h[n],(x(g)||g>c.priority)&&-1!==c.restrict.indexOf(f)){k&&(c=Ub(c,{$$start:k,$$end:l}));if(!c.$$bindings){var K=m=c,r=c.name,A={isolateScope:null,bindToController:null};F(K.scope)&&(!0===K.bindToController?(A.bindToController=d(K.scope,r,!0),A.isolateScope={}):A.isolateScope=d(K.scope,r,!1));F(K.bindToController)&&(A.bindToController=d(K.bindToController,r,!0));if(A.bindToController&&!K.controller)throw fa("noctrl",
r);m=m.$$bindings=A;F(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function Z(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=c[d],b.multiElement)return!0;return!1}function da(a,b){var c=b.$attr,d=a.$attr;q(a,function(d,e){"$"!==e.charAt(0)&&(b[e]&&b[e]!==d&&(d=d.length?d+(("style"===e?";":" ")+b[e]):b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}
function ga(a,b,d,e,g,h,k,l){var m=[],n,p,K=b[0],r=a.shift(),u=Ub(r,{templateUrl:null,transclude:null,replace:null,$$originalDirective:r}),t=y(r.templateUrl)?r.templateUrl(b,d):r.templateUrl,B=r.templateNamespace;b.empty();f(t).then(function(c){var f,A;c=Ea(c);if(r.replace){c=$b.test(c)?kd(ha(B,S(c))):[];f=c[0];if(1!==c.length||1!==f.nodeType)throw fa("tplrt",r.name,t);c={$attr:{}};la(e,b,f);var I=fc(f,[],c);F(r.scope)&&aa(I,!0);a=I.concat(a);da(d,c)}else f=K,b.html(c);a.unshift(u);n=X(a,f,d,g,b,
r,h,k,l);q(e,function(a,c){a===f&&(e[c]=b[0])});for(p=Na(b[0].childNodes,g);m.length;){c=m.shift();A=m.shift();var G=m.shift(),J=m.shift(),I=b[0];if(!c.$$destroyed){if(A!==K){var N=A.className;l.hasElementTranscludeDirective&&r.replace||(I=cc(f));la(G,D(A),I);Ma(D(I),N)}A=n.transcludeOnThisElement?ja(c,n.transclude,J):J;n(p,c,I,e,A)}}m=null}).catch(function(a){a instanceof Error&&c(a)});return function(a,b,c,d,e){a=e;b.$$destroyed||(m?m.push(b,c,d,a):(n.transcludeOnThisElement&&(a=ja(b,n.transclude,
e)),n(p,b,c,d,a)))}}function ka(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function $(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw fa("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ya(d));}function ma(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&ba.$$addBindingClass(a);return function(a,c){var e=c.parent();b||ba.$$addBindingClass(e);ba.$$addBindingInfo(e,d.expressions);
a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ha(a,b){a=P(a||"html");switch(a){case "svg":case "math":var c=z.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function pa(a,b){if("srcdoc"===b)return L.HTML;var c=wa(a);if("src"===b||"ngSrc"===b){if(-1===["img","video","audio","source","track"].indexOf(c))return L.RESOURCE_URL}else if("xlinkHref"===b||"form"===c&&"action"===b||"link"===c&&"href"===b)return L.RESOURCE_URL}function ra(a,
c,d,e,f){var g=pa(a,e),h=k[e]||f,l=b(d,!f,g,h);if(l){if("multiple"===e&&"select"===wa(a))throw fa("selmulti",ya(a));if(m.test(e))throw fa("nodomevents");c.push({priority:100,compile:function(){return{pre:function(a,c,f){c=f.$$observers||(f.$$observers=W());var k=f[e];k!==d&&(l=k&&b(k,!0,g,h),d=k);l&&(f[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(f.$$observers&&f.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!==b?f.$updateClass(a,b):f.$set(e,a)}))}}}})}}function la(a,b,c){var d=b[0],e=
b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]===d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=z.document.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);D.hasData(d)&&(D.data(c,D.data(d)),D(d).off("$destroy"));D.cleanData(a.querySelectorAll("*"));for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function sa(a,b){return R(function(){return a.apply(null,arguments)},
a,b)}function ta(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ya(d))}}function oa(a,c,d,e,f){function g(b,c,e){!y(d.$onChanges)||c===e||c!==c&&e!==e||(ea||(a.$$postDigest(T),ea=[]),m||(m={},ea.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Ib(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;q(e,function(e,h){var m=e.attrName,p=e.optional,r,A,u,B;switch(e.mode){case "@":p||ua.call(c,m)||(d[h]=c[m]=void 0);p=c.$observe(m,function(a){if(E(a)||Ia(a))g(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=
a;r=c[m];E(r)?d[h]=b(r)(a):Ia(r)&&(d[h]=r);l[h]=new Ib(hc,d[h]);k.push(p);break;case "=":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;A=n(c[m]);B=A.literal?qa:function(a,b){return a===b||a!==a&&b!==b};u=A.assign||function(){r=d[h]=A(a);throw fa("nonassign",c[m],m,f.name);};r=d[h]=A(a);p=function(b){B(b,d[h])||(B(b,r)?u(a,b=d[h]):d[h]=b);return r=b};p.$stateful=!0;p=e.collection?a.$watchCollection(c[m],p):a.$watch(n(c[m],p),null,A.literal);k.push(p);break;case "<":if(!ua.call(c,m)){if(p)break;
c[m]=void 0}if(p&&!c[m])break;A=n(c[m]);var I=A.literal,G=d[h]=A(a);l[h]=new Ib(hc,d[h]);p=a.$watch(A,function(a,b){if(b===a){if(b===G||I&&qa(b,G))return;b=G}g(h,a,b);d[h]=a},I);k.push(p);break;case "&":A=c.hasOwnProperty(m)?n(c[m]):w;if(A===w&&p)break;d[h]=function(b){return A(a,b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Da=/^\w/,xa=z.document.createElement("div"),Fa=O,Ga=u,za=J,ea;s.prototype={$normalize:Ba,$addClass:function(a){a&&
0<a.length&&N.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&N.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=ld(a,b);c&&c.length&&N.addClass(this.$$element,c);(c=ld(b,a))&&c.length&&N.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=dd(this.$$element[0],a),g=md[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Nc(a,"-"));f=wa(this.$$element);if("a"===f&&("href"===a||"xlinkHref"===
a)||"img"===f&&"src"===a)this[a]=b=G(b,"src"===a);else if("img"===f&&"srcset"===a&&v(b)){for(var f="",g=S(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+G(S(g[m]),!0),f=f+(" "+S(g[m+1]));g=S(g[2*l]).split(/\s/);f+=G(S(g[0]),!0);2===g.length&&(f+=" "+S(g[1]));this[a]=b=f}!1!==d&&(null===b||x(b)?this.$$element.removeAttr(e):Da.test(e)?this.$$element.attr(e,b):Q(this.$$element[0],e,b));(a=this.$$observers)&&q(a[h],function(a){try{a(b)}catch(d){c(d)}})},
$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=W()),e=d[a]||(d[a]=[]);e.push(b);B.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||x(c[a])||b(c[a])});return function(){Za(e,b)}}};var Aa=b.startSymbol(),Ca=b.endSymbol(),Ea="{{"===Aa&&"}}"===Ca?Xa:function(a){return a.replace(/\{\{/g,Aa).replace(/}}/g,Ca)},Ka=/^ngAttr[A-Z]/,La=/^(.+)Start$/;ba.$$addBindingInfo=p?function(a,b){var c=a.data("$binding")||[];C(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:w;ba.$$addBindingClass=
p?function(a){Ma(a,"ng-binding")}:w;ba.$$addScopeInfo=p?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:w;ba.$$addScopeClass=p?function(a,b){Ma(a,b?"ng-isolate-scope":"ng-scope")}:w;ba.$$createComment=function(a,b){var c="";p&&(c=" "+(a||"")+": ",b&&(c+=b+" "));return z.document.createComment(c)};return ba}]}function Ib(a,b){this.previousValue=a;this.currentValue=b}function Ba(a){return a.replace(hd,"").replace(ng,fb)}function ld(a,b){var d="",c=a.split(/\s+/),
f=b.split(/\s+/),e=0;a:for(;e<c.length;e++){for(var g=c[e],h=0;h<f.length;h++)if(g===f[h])continue a;d+=(0<d.length?" ":"")+g}return d}function kd(a){a=D(a);var b=a.length;if(1>=b)return a;for(;b--;){var d=a[b];(8===d.nodeType||d.nodeType===Ja&&""===d.nodeValue.trim())&&og.call(a,b,1)}return a}function mg(a,b){if(b&&E(b))return b;if(E(a)){var d=nd.exec(a);if(d)return d[3]}}function sf(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,c){La(b,"controller");F(b)?
R(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function f(a,b,c,d){if(!a||!F(a.$scope))throw M("$controller")("noscp",d,b);a.$scope[b]=c}return function(e,g,h,k){var l,m,n;h=!0===h;k&&E(k)&&(n=k);if(E(e)){k=e.match(nd);if(!k)throw od("ctrlfmt",e);m=k[1];n=n||k[3];e=a.hasOwnProperty(m)?a[m]:Pc(g.$scope,m,!0)||(b?Pc(c,m,!0):void 0);if(!e)throw od("ctrlreg",m);sb(e,m,!0)}if(h)return h=(C(e)?e[e.length-1]:e).prototype,l=Object.create(h||null),n&&f(g,n,
l,m||e.name),R(function(){var a=d.invoke(e,l,g,m);a!==l&&(F(a)||y(a))&&(l=a,n&&f(g,n,l,m||e.name));return l},{instance:l,identifier:n});l=d.instantiate(e,g,m);n&&f(g,n,l,m||e.name);return l}}]}function tf(){this.$get=["$window",function(a){return D(a.document)}]}function uf(){this.$get=["$document","$rootScope",function(a,b){function d(){f=c.hidden}var c=a[0],f=c&&c.hidden;a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return f}}]}function vf(){this.$get=
["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function ic(a){return F(a)?ga(a)?a.toISOString():bb(a):a}function Af(){this.$get=function(){return function(a){if(!a)return"";var b=[];Ec(a,function(a,c){null===a||x(a)||(C(a)?q(a,function(a){b.push(ka(c)+"="+ka(ic(a)))}):b.push(ka(c)+"="+ka(ic(a))))});return b.join("&")}}}function Bf(){this.$get=function(){return function(a){function b(a,f,e){null===a||x(a)||(C(a)?q(a,function(a,c){b(a,f+"["+(F(a)?c:"")+"]")}):F(a)&&!ga(a)?Ec(a,
function(a,c){b(a,f+(e?"":"[")+c+(e?"":"]"))}):d.push(ka(f)+"="+ka(ic(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function jc(a,b){if(E(a)){var d=a.replace(pg,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(pd))||(c=(c=d.match(qg))&&rg[c[0]].test(d));c&&(a=Ic(d))}}return a}function qd(a){var b=W(),d;E(a)?q(a.split("\n"),function(a){d=a.indexOf(":");var f=P(S(a.substr(0,d)));a=S(a.substr(d+1));f&&(b[f]=b[f]?b[f]+", "+a:a)}):F(a)&&q(a,function(a,d){var e=P(d),g=S(a);e&&
(b[e]=b[e]?b[e]+", "+g:g)});return b}function rd(a){var b;return function(d){b||(b=qd(a));return d?(d=b[P(d)],void 0===d&&(d=null),d):b}}function sd(a,b,d,c){if(y(c))return c(a,b,d);q(c,function(c){a=c(a,b,d)});return a}function zf(){var a=this.defaults={transformResponse:[jc],transformRequest:[function(a){return F(a)&&"[object File]"!==na.call(a)&&"[object Blob]"!==na.call(a)&&"[object FormData]"!==na.call(a)?bb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ra(kc),put:ra(kc),
patch:ra(kc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return v(a)?(b=!!a,this):b};var d=this.interceptors=[];this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(c,f,e,g,h,k,l,m){function n(b){function d(a,b){for(var c=0,e=b.length;c<e;){var f=b[c++],g=b[c++];a=a.then(f,g)}b.length=0;return a}function e(a,b){var c,
d={};q(a,function(a,e){y(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}function f(a){var b=R({},a);b.data=sd(a.data,a.headers,a.status,g.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}if(!F(b))throw M("$http")("badreq",b);if(!E(m.valueOf(b.url)))throw M("$http")("badreq",b.url);var g=R({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam},b);g.headers=function(b){var c=
a.headers,d=R({},b.headers),f,g,h,c=R({},c.common,c[P(b.method)]);a:for(f in c){g=P(f);for(h in d)if(P(h)===g)continue a;d[f]=c[f]}return e(d,ra(b))}(b);g.method=ub(g.method);g.paramSerializer=E(g.paramSerializer)?l.get(g.paramSerializer):g.paramSerializer;c.$$incOutstandingRequestCount();var h=[],n=[];b=k.resolve(g);q(u,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&n.push(a.response,a.responseError)});b=d(b,h);b=b.then(function(b){var c=
b.headers,d=sd(b.data,rd(c),void 0,b.transformRequest);x(d)&&q(c,function(a,b){"content-type"===P(b)&&delete c[b]});x(b.withCredentials)&&!x(a.withCredentials)&&(b.withCredentials=a.withCredentials);return p(b,d).then(f,f)});b=d(b,n);return b=b.finally(function(){c.$$completeOutstandingRequest(w)})}function p(c,d){function g(a){if(a){var c={};q(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function l(a,c,d,e){function f(){p(c,a,d,e)}N&&
(200<=a&&300>a?N.put(Q,[a,c,qd(d),e]):N.remove(Q));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function p(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?B.resolve:B.reject)({data:a,status:b,headers:rd(d),config:c,statusText:e})}function K(a){p(a.data,a.status,ra(a.headers()),a.statusText)}function u(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var B=k.defer(),L=B.promise,N,G,T=c.headers,s="jsonp"===P(c.method),Q=c.url;s?Q=m.getTrustedResourceUrl(Q):E(Q)||(Q=m.valueOf(Q));Q=r(Q,
c.paramSerializer(c.params));s&&(Q=J(Q,c.jsonpCallbackParam));n.pendingRequests.push(c);L.then(u,u);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(N=F(c.cache)?c.cache:F(a.cache)?a.cache:O);N&&(G=N.get(Q),v(G)?G&&y(G.then)?G.then(K,K):C(G)?p(G[1],G[0],ra(G[2]),G[3]):p(G,200,{},"OK"):N.put(Q,L));x(G)&&((G=td(c.url)?e()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(T[c.xsrfHeaderName||a.xsrfHeaderName]=G),f(c.method,Q,d,l,T,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),
g(c.uploadEventHandlers)));return L}function r(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}function J(a,b){if(/[&?][^=]+=JSON_CALLBACK/.test(a))throw ud("badjsonp",a);if((new RegExp("[&?]"+b+"=")).test(a))throw ud("badjsonp",b,a);return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var O=g("$http");a.paramSerializer=E(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var u=[];q(d,function(a){u.unshift(E(a)?l.get(a):l.invoke(a))});n.pendingRequests=[];(function(a){q(arguments,
function(a){n[a]=function(b,c){return n(R({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){n[a]=function(b,c,d){return n(R({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function Df(){this.$get=function(){return function(){return new z.XMLHttpRequest}}}function Cf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return sg(a,c,a.defer,b,d[0])}]}function sg(a,b,d,c,f){function e(a,
b,d){a=a.replace("JSON_CALLBACK",b);var e=f.createElement("script"),m=null;e.type="text/javascript";e.src=a;e.async=!0;m=function(a){e.removeEventListener("load",m);e.removeEventListener("error",m);f.body.removeChild(e);e=null;var g=-1,r="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),r=a.type,g="error"===a.type?404:200);d&&d(g,r)};e.addEventListener("load",m);e.addEventListener("error",m);f.body.appendChild(e);return m}return function(f,h,k,l,m,n,p,r,J,O){function u(){V&&V();t&&
t.abort()}h=h||a.url();if("jsonp"===P(f))var H=c.createCallback(h),V=e(h,H,function(a,b){var e=200===a&&c.getResponse(H);v(A)&&d.cancel(A);V=t=null;l(a,e,"",b);c.removeCallback(H)});else{var t=b(f,h);t.open(f,h,!0);q(m,function(a,b){v(a)&&t.setRequestHeader(b,a)});t.onload=function(){var a=t.statusText||"",b="response"in t?t.response:t.responseText,c=1223===t.status?204:t.status;0===c&&(c=b?200:"file"===oa(h).protocol?404:0);var e=t.getAllResponseHeaders();v(A)&&d.cancel(A);V=t=null;l(c,b,e,a)};f=
function(){v(A)&&d.cancel(A);V=t=null;l(-1,null,null,"")};t.onerror=f;t.onabort=f;t.ontimeout=f;q(J,function(a,b){t.addEventListener(b,a)});q(O,function(a,b){t.upload.addEventListener(b,a)});p&&(t.withCredentials=!0);if(r)try{t.responseType=r}catch(s){if("json"!==r)throw s;}t.send(x(k)?null:k)}if(0<n)var A=d(u,n);else n&&y(n.then)&&n.then(u)}}function xf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler",
"$sce",function(d,c,f){function e(a){return"\\\\\\"+a}function g(c){return c.replace(n,a).replace(p,b)}function h(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function k(e,k,n,p){function H(a){try{var b=a;a=n?f.getTrusted(n,b):f.valueOf(b);return p&&!v(a)?a:Yb(a)}catch(d){c(Ca.interr(e,d))}}if(!e.length||-1===e.indexOf(a)){var q;k||(k=g(e),q=ma(k),q.exp=e,q.expressions=[],q.$$watchDelegate=h);return q}p=!!p;var t,s,A=0,K=[],I=[];q=e.length;for(var B=[],L=[];A<q;)if(-1!==(t=e.indexOf(a,
A))&&-1!==(s=e.indexOf(b,t+l)))A!==t&&B.push(g(e.substring(A,t))),A=e.substring(t+l,s),K.push(A),I.push(d(A,H)),A=s+m,L.push(B.length),B.push("");else{A!==q&&B.push(g(e.substring(A)));break}n&&1<B.length&&Ca.throwNoconcat(e);if(!k||K.length){var N=function(a){for(var b=0,c=K.length;b<c;b++){if(p&&x(a[b]))return;B[L[b]]=a[b]}return B.join("")};return R(function(a){var b=0,d=K.length,f=Array(d);try{for(;b<d;b++)f[b]=I[b](a);return N(f)}catch(g){c(Ca.interr(e,g))}},{exp:e,expressions:K,$$watchDelegate:function(a,
b){var c;return a.$watchGroup(I,function(d,e){var f=N(d);y(b)&&b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,n=new RegExp(a.replace(/./g,e),"g"),p=new RegExp(b.replace(/./g,e),"g");k.startSymbol=function(){return a};k.endSymbol=function(){return b};return k}]}function yf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,f){function e(e,k,l,m){function n(){p?e.apply(null,r):e(u)}var p=4<arguments.length,r=p?va.call(arguments,4):[],J=b.setInterval,q=b.clearInterval,
u=0,H=v(m)&&!m,V=(H?c:d).defer(),t=V.promise;l=v(l)?l:0;t.$$intervalId=J(function(){H?f.defer(n):a.$evalAsync(n);V.notify(u++);0<l&&u>=l&&(V.resolve(u),q(t.$$intervalId),delete g[t.$$intervalId]);H||a.$apply()},k);g[t.$$intervalId]=V;return t}var g={};e.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].promise.catch(w),g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return e}]}function lc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=
cb(a[b]);return a.join("/")}function vd(a,b){var d=oa(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=Z(d.port)||tg[d.protocol]||null}function wd(a,b){if(ug.test(a))throw kb("badpath",a);var d="/"!==a.charAt(0);d&&(a="/"+a);var c=oa(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=Lc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function mc(a,b){return a.slice(0,b.length)===
b}function la(a,b){if(mc(b,a))return b.substr(a.length)}function Aa(a){var b=a.indexOf("#");return-1===b?a:a.substr(0,b)}function lb(a){return a.replace(/(#.+)|#$/,"$1")}function nc(a,b,d){this.$$html5=!0;d=d||"";vd(a,this);this.$$parse=function(a){var d=la(b,a);if(!E(d))throw kb("ipthprfx",a,b);wd(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Xb(this.$$search),d=this.$$hash?"#"+cb(this.$$hash):"";this.$$url=lc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+
this.$$url.substr(1);this.$$urlUpdatedByLocation=!0};this.$$parseLinkUrl=function(c,f){if(f&&"#"===f[0])return this.hash(f.slice(1)),!0;var e,g;v(e=la(a,c))?(g=e,g=d&&v(e=la(d,e))?b+(la("/",e)||e):a+g):v(e=la(b,c))?g=b+e:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function oc(a,b,d){vd(a,this);this.$$parse=function(c){var f=la(a,c)||la(b,c),e;x(f)||"#"!==f.charAt(0)?this.$$html5?e=f:(e="",x(f)&&(a=c,this.replace())):(e=la(d,f),x(e)&&(e=f));wd(e,this);c=this.$$path;var f=a,g=/^\/[A-Z]:(\/.*)/;mc(e,
f)&&(e=e.replace(f,""));g.exec(e)||(c=(e=g.exec(c))?e[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=Xb(this.$$search),f=this.$$hash?"#"+cb(this.$$hash):"";this.$$url=lc(this.$$path)+(b?"?"+b:"")+f;this.$$absUrl=a+(this.$$url?d+this.$$url:"");this.$$urlUpdatedByLocation=!0};this.$$parseLinkUrl=function(b,d){return Aa(a)===Aa(b)?(this.$$parse(b),!0):!1}}function xd(a,b,d){this.$$html5=!0;oc.apply(this,arguments);this.$$parseLinkUrl=function(c,f){if(f&&"#"===f[0])return this.hash(f.slice(1)),
!0;var e,g;a===Aa(c)?e=c:(g=la(b,c))?e=a+d+g:b===c+"/"&&(e=b);e&&this.$$parse(e);return!!e};this.$$compose=function(){var b=Xb(this.$$search),f=this.$$hash?"#"+cb(this.$$hash):"";this.$$url=lc(this.$$path)+(b?"?"+b:"")+f;this.$$absUrl=a+d+this.$$url;this.$$urlUpdatedByLocation=!0}}function Jb(a){return function(){return this[a]}}function yd(a,b){return function(d){if(x(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Ff(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};
this.hashPrefix=function(b){return v(b)?(a=b,this):a};this.html5Mode=function(a){if(Ia(a))return b.enabled=a,this;if(F(a)){Ia(a.enabled)&&(b.enabled=a.enabled);Ia(a.requireBase)&&(b.requireBase=a.requireBase);if(Ia(a.rewriteLinks)||E(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,f,e,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=
f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var n=c.url(),p;if(b.enabled){if(!m&&b.requireBase)throw kb("nobase");p=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(m||"/");m=f.history?nc:xd}else p=Aa(n),m=oc;var r=p.substr(0,Aa(p).lastIndexOf("/")+1);l=new m(p,r,"#"+a);l.$$parseLinkUrl(n,n);l.$$state=c.state();var J=/^\s*(javascript|mailto):/i;e.on("click",function(a){var f=b.rewriteLinks;if(f&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&
2!==a.which&&2!==a.button){for(var h=D(a.target);"a"!==wa(h[0]);)if(h[0]===e[0]||!(h=h.parent())[0])return;if(!E(f)||!x(h.attr(f))){var f=h.prop("href"),k=h.attr("href")||h.attr("xlink:href");F(f)&&"[object SVGAnimatedString]"===f.toString()&&(f=oa(f.animVal).href);J.test(f)||!f||h.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(f,k)||(a.preventDefault(),l.absUrl()!==c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}});lb(l.absUrl())!==lb(n)&&c.url(l.absUrl(),!0);var q=!0;
c.onUrlChange(function(a,b){mc(a,r)?(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=lb(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(q=!1,k(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(q||l.$$urlUpdatedByLocation){l.$$urlUpdatedByLocation=!1;var a=lb(c.url()),b=lb(l.absUrl()),e=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&f.history&&e!==l.$$state;if(q||m)q=
!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,e).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=e):(m&&h(b,g,e===l.$$state?null:l.$$state),k(a,e)))})}l.$$replace=!1});return l}]}function Gf(){var a=!0,b=this;this.debugEnabled=function(b){return v(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&
(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function f(a){var b=d.console||{},f=b[a]||b.log||w;a=!1;try{a=!!f.apply}catch(k){}return a?function(){var a=[];q(arguments,function(b){a.push(c(b))});return f.apply(b,a)}:function(a,b){f(a,null==b?"":b)}}return{log:f("log"),info:f("info"),warn:f("warn"),error:f("error"),debug:function(){var c=f("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function vg(a){return a+""}function wg(a,b){return"undefined"!==typeof a?a:b}function zd(a,b){return"undefined"===
typeof a?b:"undefined"===typeof b?a:a+b}function U(a,b){var d,c,f;switch(a.type){case s.Program:d=!0;q(a.body,function(a){U(a.expression,b);d=d&&a.expression.constant});a.constant=d;break;case s.Literal:a.constant=!0;a.toWatch=[];break;case s.UnaryExpression:U(a.argument,b);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case s.BinaryExpression:U(a.left,b);U(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:U(a.left,
b);U(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:U(a.test,b);U(a.alternate,b);U(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=!1;a.toWatch=[a];break;case s.MemberExpression:U(a.object,b);a.computed&&U(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case s.CallExpression:d=
f=a.filter?!b(a.callee.name).$stateful:!1;c=[];q(a.arguments,function(a){U(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=f?c:[a];break;case s.AssignmentExpression:U(a.left,b);U(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case s.ArrayExpression:d=!0;c=[];q(a.elements,function(a){U(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case s.ObjectExpression:d=!0;c=[];q(a.properties,function(a){U(a.value,
b);d=d&&a.value.constant&&!a.computed;a.value.constant||c.push.apply(c,a.value.toWatch);a.computed&&(U(a.key,b),a.key.constant||c.push.apply(c,a.key.toWatch))});a.constant=d;a.toWatch=c;break;case s.ThisExpression:a.constant=!1;a.toWatch=[];break;case s.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Ad(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Bd(a){return a.type===s.Identifier||a.type===s.MemberExpression}function Cd(a){if(1===
a.body.length&&Bd(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function Dd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function Ed(a,b){this.astBuilder=a;this.$filter=b}function Fd(a,b){this.astBuilder=a;this.$filter=b}function pc(a){return y(a.valueOf)?a.valueOf():xg.call(a)}function Hf(){var a=
W(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral=function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(f){function e(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||c||(a=pc(a),"object"!==typeof a)?a===b||a!==a&&b!==b:!1}function g(a,b,c,d,f){var g=d.inputs,h;if(1===g.length){var k=e,g=g[0];return a.$watch(function(a){var b=g(a);e(b,k,d.literal)||(h=d(a,void 0,void 0,[b]),k=b&&pc(b));return h},b,c,f)}for(var l=
[],m=[],n=0,I=g.length;n<I;n++)l[n]=e,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,f=g.length;c<f;c++){var k=g[c](a);if(b||(b=!e(k,l[c],d.literal)))m[c]=k,l[c]=k&&pc(k)}b&&(h=d(a,void 0,void 0,m));return h},b,c,f)}function h(a,b,c,d,e){function f(a){return d(a)}function h(a,c,d){l=a;y(b)&&b(a,c,d);v(a)&&d.$$postDigest(function(){v(l)&&k()})}var k,l;return k=d.inputs?g(a,h,c,d,e):a.$watch(f,h,c)}function k(a,b,c,d){function e(a){var b=!0;q(a,function(a){v(a)||(b=!1)});return b}var f,g;return f=
a.$watch(function(a){return d(a)},function(a,c,d){g=a;y(b)&&b(a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function l(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function m(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==k&&c!==h?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return v(e)?c:e},d=!a.inputs;a.$$watchDelegate&&a.$$watchDelegate!==g?(c.$$watchDelegate=a.$$watchDelegate,c.inputs=a.inputs):b.$stateful||
(c.$$watchDelegate=g,c.inputs=a.inputs?a.inputs:[a]);return c}var n={csp:Ga().noUnsafeEval,literals:xa(b),isIdentifierStart:y(d)&&d,isIdentifierContinue:y(c)&&c};return function(b,c){var d,e,u;switch(typeof b){case "string":return u=b=b.trim(),d=a[u],d||(":"===b.charAt(0)&&":"===b.charAt(1)&&(e=!0,b=b.substring(2)),d=new qc(n),d=(new rc(d,f,n)).parse(b),d.constant?d.$$watchDelegate=l:e?d.$$watchDelegate=d.literal?k:h:d.inputs&&(d.$$watchDelegate=g),a[u]=d),m(d,c);case "function":return m(b,c);default:return m(w,
c)}}}]}function Jf(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Gd(function(a){b.$evalAsync(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return v(b)?(a=b,this):a}}function Kf(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Gd(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return v(b)?(a=b,this):a}}function Gd(a,b,d){function c(){return new f}function f(){var a=this.promise=new e;this.resolve=function(b){k(a,
b)};this.reject=function(b){m(a,b)};this.notify=function(b){p(a,b)}}function e(){this.$$state={status:0}}function g(){for(;!v&&t.length;){var a=t.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):x(c)?"undefined":"string"!==typeof c?xe(c):c);a.value instanceof Error?b(a.value,c):b(c)}}}function h(b){!d||b.pending||2!==b.status||b.pur||(0===v&&0===t.length&&a(g),t.push(b));!b.processScheduled&&b.pending&&(b.processScheduled=
!0,++v,a(function(){var c,e,f;f=b.pending;b.processScheduled=!1;b.pending=void 0;try{for(var h=0,l=f.length;h<l;++h){b.pur=!0;e=f[h][0];c=f[h][b.status];try{y(c)?k(e,c(b.value)):1===b.status?k(e,b.value):m(e,b.value)}catch(n){m(e,n)}}}finally{--v,d&&0===v&&a(g)}}))}function k(a,b){a.$$state.status||(b===a?n(a,H("qcycle",b)):l(a,b))}function l(a,b){function c(b){g||(g=!0,l(a,b))}function d(b){g||(g=!0,n(a,b))}function e(b){p(a,b)}var f,g=!1;try{if(F(b)||y(b))f=b.then;y(f)?(a.$$state.status=-1,f.call(b,
c,d,e)):(a.$$state.value=b,a.$$state.status=1,h(a.$$state))}catch(k){d(k)}}function m(a,b){a.$$state.status||n(a,b)}function n(a,b){a.$$state.value=b;a.$$state.status=2;h(a.$$state)}function p(c,d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,f=0,g=e.length;f<g;f++){c=e[f][0];a=e[f][3];try{p(c,y(a)?a(d):d)}catch(h){b(h)}}})}function r(a){var b=new e;m(b,a);return b}function J(a,b,c){var d=null;try{y(c)&&(d=c())}catch(e){return r(e)}return d&&y(d.then)?d.then(function(){return b(a)},
r):b(a)}function s(a,b,c,d){var f=new e;k(f,a);return f.then(b,c,d)}function u(a){if(!y(a))throw H("norslvr",a);var b=new e;a(function(a){k(b,a)},function(a){m(b,a)});return b}var H=M("$q",TypeError),v=0,t=[];R(e.prototype,{then:function(a,b,c){if(x(a)&&x(b)&&x(c))return this;var d=new e;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&h(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return J(b,
w,a)},function(b){return J(b,r,a)},b)}});var w=s;u.prototype=e.prototype;u.defer=c;u.reject=r;u.when=s;u.resolve=w;u.all=function(a){var b=new e,c=0,d=C(a)?[]:{};q(a,function(a,e){c++;s(a).then(function(a){d[e]=a;--c||k(b,d)},function(a){m(b,a)})});0===c&&k(b,d);return b};u.race=function(a){var b=c();q(a,function(a){s(a).then(b.resolve,b.reject)});return b.promise};return u}function Tf(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||
a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,f=!!d,e=f?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};e.supported=f;return e}]}function If(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++qb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=M("$rootScope"),c=null,f=null;this.digestTtl=
function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(e,g,h){function k(a){a.currentScope.$$destroyed=!0}function l(a){9===Ha&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++qb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=
this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function n(a){if(H.$$phase)throw d("inprog",H.$$phase);H.$$phase=a}function p(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function r(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function J(){}function s(){for(;ia.length;)try{ia.shift()()}catch(a){e(a)}f=null}function u(){null===f&&(f=h.defer(function(){H.$apply(s)}))}
m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!==this)&&d.$on("$destroy",k);return d},$watch:function(a,b,d,e){var f=g(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l={fn:b,last:J,get:f,exp:e||a,eq:!!d};
c=null;y(b)||(l.fn=w);k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;p(this,1);return function(){var a=Za(k,l);0<=a&&(p(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=
c;b(e,a===c?e:d,f)});q(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!x(e)){if(F(e))if(sa(e))for(f!==n&&(f=n,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==p&&(f=p={},t=0,l++);a=0;for(b in e)ua.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===
g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++,f)ua.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],p={},r=!0,t=0;return this.$watch(m,function(){r?(r=!1,b(e,e,d)):b(e,h,d);if(k)if(F(e))if(sa(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ua.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,k,l,m,p,r,u=b,q,w=[],x,ia;n("$digest");h.$$checkUrlChange();this===H&&null!==f&&
(h.defer.cancel(f),s());c=null;do{r=!1;q=this;for(p=0;p<v.length;p++){try{ia=v[p],ia.scope.$eval(ia.expression,ia.locals)}catch(z){e(z)}c=null}v.length=0;a:do{if(p=q.$$watchers)for(p.$$digestWatchIndex=p.length;p.$$digestWatchIndex--;)try{if(a=p[p.$$digestWatchIndex])if(m=a.get,(g=m(q))!==(k=a.last)&&!(a.eq?qa(g,k):da(g)&&da(k)))r=!0,c=a,a.last=a.eq?xa(g,null):g,l=a.fn,l(g,k===J?g:k,q),5>u&&(x=4-u,w[x]||(w[x]=[]),w[x].push({msg:y(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:k}));
else if(a===c){r=!1;break a}}catch(D){e(D)}if(!(p=q.$$watchersCount&&q.$$childHead||q!==this&&q.$$nextSibling))for(;q!==this&&!(p=q.$$nextSibling);)q=q.$parent}while(q=p);if((r||v.length)&&!u--)throw H.$$phase=null,d("infdig",b,w);}while(r||v.length);for(H.$$phase=null;A<t.length;)try{t[A++]()}catch(E){e(E)}t.length=A=0;h.$$checkUrlChange()},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===H&&h.$$applicationDestroyed();p(this,-this.$$watchersCount);
for(var b in this.$$listenerCount)r(this,this.$$listenerCount[b],b);a&&a.$$childHead===this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail===this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=w;this.$on=this.$watch=this.$watchGroup=function(){return w};this.$$listeners={};this.$$nextSibling=
null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){H.$$phase||v.length||h.defer(function(){v.length&&H.$digest()});v.push({scope:this,expression:g(a),locals:b})},$$postDigest:function(a){t.push(a)},$apply:function(a){try{n("$apply");try{return this.$eval(a)}finally{H.$$phase=null}}catch(b){e(b)}finally{try{H.$digest()}catch(c){throw e(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&ia.push(b);a=g(a);u()},$on:function(a,b){var c=this.$$listeners[a];
c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,r(e,1,a))}},$emit:function(a,b){var c=[],d,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=$a([h],arguments,1),l,m;do{d=f.$$listeners[a]||c;h.currentScope=f;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,
k)}catch(n){e(n)}else d.splice(l,1),l--,m--;if(g)return h.currentScope=null,h;f=f.$parent}while(f);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,f={name:a,targetScope:this,preventDefault:function(){f.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return f;for(var g=$a([f],arguments,1),h,k;c=d;){f.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){e(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&
c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}f.currentScope=null;return f}};var H=new m,v=H.$$asyncQueue=[],t=H.$$postDigestQueue=[],ia=H.$$applyAsyncQueue=[],A=0;return H}]}function Ae(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return v(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return v(a)?(b=a,this):b};this.$get=function(){return function(d,
c){var f=c?b:a,e;e=oa(d).href;return""===e||e.match(f)?d:"unsafe:"+e}}}function yg(a){if("self"===a)return a;if(E(a)){if(-1<a.indexOf("***"))throw Da("iwcard",a);a=Hd(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if(Wa(a))return new RegExp("^"+a.source+"$");throw Da("imatcher");}function Id(a){var b=[];v(a)&&q(a,function(a){b.push(yg(a))});return b}function Mf(){this.SCE_CONTEXTS=pa;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&
(a=Id(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=Id(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?td(b):!!a.exec(b.href)}function f(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var e=function(a){throw Da("unsafe");};d.has("$sanitize")&&
(e=d.get("$sanitize"));var g=f(),h={};h[pa.HTML]=f(g);h[pa.CSS]=f(g);h[pa.URL]=f(g);h[pa.JS]=f(g);h[pa.RESOURCE_URL]=f(h[pa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Da("icontext",a,b);if(null===b||x(b)||""===b)return b;if("string"!==typeof b)throw Da("itype",a);return new c(b)},getTrusted:function(d,f){if(null===f||x(f)||""===f)return f;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&f instanceof g)return f.$$unwrapTrustedValue();if(d===pa.RESOURCE_URL){var g=oa(f.toString()),
n,p,r=!1;n=0;for(p=a.length;n<p;n++)if(c(a[n],g)){r=!0;break}if(r)for(n=0,p=b.length;n<p;n++)if(c(b[n],g)){r=!1;break}if(r)return f;throw Da("insecurl",f.toString());}if(d===pa.HTML)return e(f);throw Da("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Lf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ha)throw Da("iequirks");var c=ra(pa);c.isEnabled=function(){return a};c.trustAs=
d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Xa);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var f=c.parseAs,e=c.getTrusted,g=c.trustAs;q(pa,function(a,b){var d=P(b);c[("parse_as_"+d).replace(sc,fb)]=function(b){return f(a,b)};c[("get_trusted_"+d).replace(sc,fb)]=function(b){return e(a,b)};c[("trust_as_"+d).replace(sc,fb)]=function(b){return g(a,b)}});return c}]}
function Nf(){this.$get=["$window","$document",function(a,b){var d={},c=!((!a.nw||!a.nw.process)&&a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,f=Z((/android (\d+)/.exec(P((a.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},h=g.body&&g.body.style,k=!1,l=!1;h&&(k=!!("transition"in h||"webkitTransition"in h),l=!!("animation"in h||"webkitAnimation"in h));return{history:!(!c||
4>f||e),hasEvent:function(a){if("input"===a&&Ha)return!1;if(x(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ga(),transitions:k,animations:l,android:f}}]}function Pf(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(b,d,c,f,e){function g(h,k){g.totalPendingRequests++;if(!E(h)||x(d.get(h)))h=e.getTrustedResourceUrl(h);var l=c.defaults&&c.defaults.transformResponse;C(l)?l=l.filter(function(a){return a!==
jc}):l===jc&&(l=null);return c.get(h,R({cache:d,transformResponse:l},a)).finally(function(){g.totalPendingRequests--}).then(function(a){d.put(h,a.data);return a.data},function(a){k||(a=zg("tpload",h,a.status,a.statusText),b(a));return f.reject(a)})}g.totalPendingRequests=0;return g}]}function Qf(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];q(a,function(a){var c=$.element(a).data("$binding");c&&
q(c,function(c){d?(new RegExp("(^|\\s)"+Hd(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!==c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Rf(){this.$get=["$rootScope","$browser",
"$q","$$q","$exceptionHandler",function(a,b,d,c,f){function e(e,k,l){y(e)||(l=k,k=e,e=w);var m=va.call(arguments,3),n=v(l)&&!l,p=(n?c:d).defer(),r=p.promise,q;q=b.defer(function(){try{p.resolve(e.apply(null,m))}catch(b){p.reject(b),f(b)}finally{delete g[r.$$timeoutId]}n||a.$apply()},k);r.$$timeoutId=q;g[q]=p;return r}var g={};e.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].promise.catch(w),g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):
!1};return e}]}function oa(a){Ha&&(ca.setAttribute("href",a),a=ca.href);ca.setAttribute("href",a);return{href:ca.href,protocol:ca.protocol?ca.protocol.replace(/:$/,""):"",host:ca.host,search:ca.search?ca.search.replace(/^\?/,""):"",hash:ca.hash?ca.hash.replace(/^#/,""):"",hostname:ca.hostname,port:ca.port,pathname:"/"===ca.pathname.charAt(0)?ca.pathname:"/"+ca.pathname}}function td(a){a=E(a)?oa(a):a;return a.protocol===Jd.protocol&&a.host===Jd.host}function Sf(){this.$get=ma(z)}function Kd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}
var d=a[0]||{},c={},f="";return function(){var a,g,h,k,l;try{a=d.cookie||""}catch(m){a=""}if(a!==f)for(f=a,a=f.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),x(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function Wf(){this.$get=Kd}function Xc(a){function b(d,c){if(F(d)){var f={};q(d,function(a,c){f[c]=b(c,a)});return f}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",
Ld);b("date",Md);b("filter",Ag);b("json",Bg);b("limitTo",Cg);b("lowercase",Dg);b("number",Nd);b("orderBy",Od);b("uppercase",Eg)}function Ag(){return function(a,b,d,c){if(!sa(a)){if(null==a)return a;throw M("filter")("notarray",a);}c=c||"$";var f;switch(tc(b)){case "function":break;case "boolean":case "null":case "number":case "string":f=!0;case "object":b=Fg(b,d,c,f);break;default:return a}return Array.prototype.filter.call(a,b)}}function Fg(a,b,d,c){var f=F(a)&&d in a;!0===b?b=qa:y(b)||(b=function(a,
b){if(x(a))return!1;if(null===a||null===b)return a===b;if(F(b)||F(a)&&!Vb(a))return!1;a=P(""+a);b=P(""+b);return-1!==a.indexOf(b)});return function(e){return f&&!F(e)?Ea(e,a[d],b,d,!1):Ea(e,a,b,d,c)}}function Ea(a,b,d,c,f,e){var g=tc(a),h=tc(b);if("string"===h&&"!"===b.charAt(0))return!Ea(a,b.substring(1),d,c,f);if(C(a))return a.some(function(a){return Ea(a,b,d,c,f)});switch(g){case "object":var k;if(f){for(k in a)if("$"!==k.charAt(0)&&Ea(a[k],b,d,c,!0))return!0;return e?!1:Ea(a,b,d,c,!1)}if("object"===
h){for(k in b)if(e=b[k],!y(e)&&!x(e)&&(g=k===c,!Ea(g?a:a[k],e,d,c,g,g)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function tc(a){return null===a?"null":typeof a}function Ld(a){var b=a.NUMBER_FORMATS;return function(a,c,f){x(c)&&(c=b.CURRENCY_SYM);x(f)&&(f=b.PATTERNS[1].maxFrac);return null==a?a:Pd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,f).replace(/\u00A4/g,c)}}function Nd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Pd(a,b.PATTERNS[0],b.GROUP_SEP,
b.DECIMAL_SEP,c)}}function Gg(a){var b=0,d,c,f,e,g;-1<(c=a.indexOf(Qd))&&(a=a.replace(Qd,""));0<(f=a.search(/e/i))?(0>c&&(c=f),c+=+a.slice(f+1),a=a.substring(0,f)):0>c&&(c=a.length);for(f=0;a.charAt(f)===uc;f++);if(f===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===uc;)g--;c-=f;d=[];for(e=0;f<=g;f++,e++)d[e]=+a.charAt(f)}c>Rd&&(d=d.splice(0,Rd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function Hg(a,b,d,c){var f=a.d,e=f.length-a.i;b=x(b)?Math.min(Math.max(d,e),c):+b;d=b+a.i;c=f[d];if(0<d){f.splice(Math.max(a.i,
d));for(var g=d;g<f.length;g++)f[g]=0}else for(e=Math.max(0,e),a.i=1,f.length=Math.max(1,d=b+1),f[0]=0,g=1;g<d;g++)f[g]=0;if(5<=c)if(0>d-1){for(c=0;c>d;c--)f.unshift(0),a.i++;f.unshift(1);a.i++}else f[d-1]++;for(;e<Math.max(0,b);e++)f.push(0);if(b=f.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))f.unshift(b),a.i++}function Pd(a,b,d,c,f){if(!E(a)&&!Y(a)||isNaN(a))return"";var e=!isFinite(a),g=!1,h=Math.abs(a)+"",k="";if(e)k="\u221e";else{g=Gg(h);Hg(g,f,b.minFrac,b.maxFrac);
k=g.d;h=g.i;f=g.e;e=[];for(g=k.reduce(function(a,b){return a&&!b},!0);0>h;)k.unshift(0),h++;0<h?e=k.splice(h,k.length):(e=k,k=[0]);h=[];for(k.length>=b.lgSize&&h.unshift(k.splice(-b.lgSize,k.length).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize,k.length).join(""));k.length&&h.unshift(k.join(""));k=h.join(d);e.length&&(k+=c+e.join(""));f&&(k+="e+"+f)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+k+b.posSuf}function Kb(a,b,d,c){var f="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,f="-");for(a=""+a;a.length<
b;)a=uc+a;d&&(a=a.substr(a.length-b));return f+a}function aa(a,b,d,c,f){d=d||0;return function(e){e=e["get"+a]();if(0<d||e>-d)e+=d;0===e&&-12===d&&(e=12);return Kb(e,b,c,f)}}function mb(a,b,d){return function(c,f){var e=c["get"+a](),g=ub((d?"STANDALONE":"")+(b?"SHORT":"")+a);return f[g][e]}}function Sd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Td(a){return function(b){var d=Sd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-
+d;b=1+Math.round(b/6048E5);return Kb(b,a)}}function vc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Md(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var e=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(e=Z(b[9]+b[10]),g=Z(b[9]+b[11]));h.call(a,Z(b[1]),Z(b[2])-1,Z(b[3]));e=Z(b[4]||0)-e;g=Z(b[5]||0)-g;h=Z(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,e,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
return function(c,d,e){var g="",h=[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;E(c)&&(c=Ig.test(c)?Z(c):b(c));Y(c)&&(c=new Date(c));if(!ga(c)||!isFinite(c.getTime()))return c;for(;d;)(l=Jg.exec(d))?(h=$a(h,l,1),d=h.pop()):(h.push(d),d=null);var m=c.getTimezoneOffset();e&&(m=Jc(e,m),c=Wb(c,e,!0));q(h,function(b){k=Kg[b];g+=k?k(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Bg(){return function(a,b){x(b)&&(b=2);return bb(a,b)}}function Cg(){return function(a,
b,d){b=Infinity===Math.abs(Number(b))?Number(b):Z(b);if(da(b))return a;Y(a)&&(a=a.toString());if(!sa(a))return a;d=!d||isNaN(d)?0:Z(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?wc(a,d,d+b):0===d?wc(a,b,a.length):wc(a,Math.max(0,d+b),d)}}function wc(a,b,d){return E(a)?a.slice(b,d):va.call(a,b,d)}function Od(a){function b(b){return b.map(function(b){var c=1,d=Xa;if(y(b))d=b;else if(E(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var f=
d(),d=function(a){return a[f]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,k=b.type;if(d===k){var k=a.value,l=b.value;"string"===d?(k=k.toLowerCase(),l=l.toLowerCase()):"object"===d&&(F(k)&&(k=a.index),F(l)&&(l=b.index));k!==l&&(c=k<l?-1:1)}else c=d<k?-1:1;return c}return function(a,e,g,h){if(null==a)return a;if(!sa(a))throw M("orderBy")("notarray",a);C(e)||(e=[e]);0===e.length&&
(e=["+"]);var k=b(e),l=g?-1:1,m=y(h)?h:c;a=Array.prototype.map.call(a,function(a,b){return{value:a,tieBreaker:{value:b,type:"number",index:b},predicateValues:k.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("object"===c)a:{if(y(e.valueOf)&&(e=e.valueOf(),d(e)))break a;Vb(e)&&(e=e.toString(),d(e))}return{value:e,type:c,index:b}})}});a.sort(function(a,b){for(var c=0,d=k.length;c<d;c++){var e=m(a.predicateValues[c],b.predicateValues[c]);if(e)return e*k[c].descending*
l}return m(a.tieBreaker,b.tieBreaker)*l});return a=a.map(function(a){return a.value})}}function Qa(a){y(a)&&(a={link:a});a.restrict=a.restrict||"AC";return ma(a)}function Lb(a,b,d,c,f){this.$$controls=[];this.$error={};this.$$success={};this.$pending=void 0;this.$name=f(b.name||b.ngForm||"")(d);this.$dirty=!1;this.$valid=this.$pristine=!0;this.$submitted=this.$invalid=!1;this.$$parentForm=Mb;this.$$element=a;this.$$animate=c;Ud(this)}function Ud(a){a.$$classCache={};a.$$classCache[Vd]=!(a.$$classCache[nb]=
a.$$element.hasClass(nb))}function Wd(a){function b(a,b,c){c&&!a.$$classCache[b]?(a.$$animate.addClass(a.$$element,b),a.$$classCache[b]=!0):!c&&a.$$classCache[b]&&(a.$$animate.removeClass(a.$$element,b),a.$$classCache[b]=!1)}function d(a,c,d){c=c?"-"+Nc(c,"-"):"";b(a,nb+c,!0===d);b(a,Vd+c,!1===d)}var c=a.set,f=a.unset;a.clazz.prototype.$setValidity=function(a,g,h){x(g)?(this.$pending||(this.$pending={}),c(this.$pending,a,h)):(this.$pending&&f(this.$pending,a,h),Xd(this.$pending)&&(this.$pending=void 0));
Ia(g)?g?(f(this.$error,a,h),c(this.$$success,a,h)):(c(this.$error,a,h),f(this.$$success,a,h)):(f(this.$error,a,h),f(this.$$success,a,h));this.$pending?(b(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,d(this,"",null)):(b(this,"ng-pending",!1),this.$valid=Xd(this.$error),this.$invalid=!this.$valid,d(this,"",this.$valid));g=this.$pending&&this.$pending[a]?void 0:this.$error[a]?!1:this.$$success[a]?!0:null;d(this,a,g);this.$$parentForm.$setValidity(a,g,this)}}function Xd(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;
return!0}function xc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function Ra(a,b,d,c,f,e){var g=P(b[0].type);if(!f.android){var h=!1;b.on("compositionstart",function(){h=!0});b.on("compositionend",function(){h=!1;l()})}var k,l=function(a){k&&(e.defer.cancel(k),k=null);if(!h){var f=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(f=S(f));(c.$viewValue!==f||""===f&&c.$$hasNativeValidators)&&c.$setViewValue(f,a)}};if(f.hasEvent("input"))b.on("input",l);else{var m=
function(a,b,c){k||(k=e.defer(function(){k=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(f.hasEvent("paste"))b.on("paste cut",m)}b.on("change",l);if(Yd[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!k){var b=this.validity,c=b.badInput,d=b.typeMismatch;k=e.defer(function(){k=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?
"":c.$viewValue;b.val()!==a&&b.val(a)}}function Nb(a,b){return function(d,c){var f,e;if(ga(d))return d;if(E(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(Lg.test(d))return new Date(d);a.lastIndex=0;if(f=a.exec(d))return f.shift(),e=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},q(f,function(a,c){c<b.length&&(e[b[c]]=+a)}),new Date(e.yyyy,
e.MM-1,e.dd,e.HH,e.mm,e.ss||0,1E3*e.sss||0)}return NaN}}function ob(a,b,d,c){return function(f,e,g,h,k,l,m){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function p(a){return v(a)&&!ga(a)?d(a)||void 0:a}yc(f,e,g,h);Ra(f,e,g,h,k,l);var r=h&&h.$options.getOption("timezone"),q;h.$$parserName=a;h.$parsers.push(function(a){if(h.$isEmpty(a))return null;if(b.test(a))return a=d(a,q),r&&(a=Wb(a,r)),a});h.$formatters.push(function(a){if(a&&!ga(a))throw pb("datefmt",a);if(n(a))return(q=a)&&
r&&(q=Wb(q,r,!0)),m("date")(a,c,r);q=null;return""});if(v(g.min)||g.ngMin){var s;h.$validators.min=function(a){return!n(a)||x(s)||d(a)>=s};g.$observe("min",function(a){s=p(a);h.$validate()})}if(v(g.max)||g.ngMax){var u;h.$validators.max=function(a){return!n(a)||x(u)||d(a)<=u};g.$observe("max",function(a){u=p(a);h.$validate()})}}}function yc(a,b,d,c){(c.$$hasNativeValidators=F(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};return c.badInput||c.typeMismatch?void 0:a})}function Zd(a){a.$$parserName=
"number";a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(Mg.test(b))return parseFloat(b)});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!Y(b))throw pb("numfmt",b);b=b.toString()}return b})}function Sa(a){v(a)&&!Y(a)&&(a=parseFloat(a));return da(a)?void 0:a}function zc(a){var b=a.toString(),d=b.indexOf(".");return-1===d?-1<a&&1>a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function $d(a,b,d){a=Number(a);var c=(a|0)!==a,f=(b|0)!==b,e=(d|0)!==d;if(c||f||e){var g=c?zc(a):0,
h=f?zc(b):0,k=e?zc(d):0,g=Math.max(g,h,k),g=Math.pow(10,g);a*=g;b*=g;d*=g;c&&(a=Math.round(a));f&&(b=Math.round(b));e&&(d=Math.round(d))}return 0===(a-b)%d}function ae(a,b,d,c,f){if(v(c)){a=a(c);if(!a.constant)throw pb("constexpr",d,c);return a(b)}return f}function Ac(a,b){function d(a,b){if(!a||!a.length)return[];if(!b||!b.length)return a;var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],f=0;f<b.length;f++)if(e===b[f])continue a;c.push(e)}return c}function c(a){var b=a;C(a)?b=a.map(c).join(" "):
F(a)&&(b=Object.keys(a).filter(function(b){return a[b]}).join(" "));return b}function f(a){var b=a;if(C(a))b=a.map(f);else if(F(a)){var c=!1,b=Object.keys(a).filter(function(b){b=a[b];!c&&x(b)&&(c=!0);return b});c&&b.push(void 0)}return b}a="ngClass"+a;var e;return["$parse",function(g){return{restrict:"AC",link:function(h,k,l){function m(a,b){var c=[];q(a,function(a){if(0<b||H[a])H[a]=(H[a]||0)+b,H[a]===+(0<b)&&c.push(a)});return c.join(" ")}function n(a){if(a===b){var c=t,c=m(c&&c.split(" "),1);
l.$addClass(c)}else c=t,c=m(c&&c.split(" "),-1),l.$removeClass(c);w=a}function p(a){a=c(a);a!==t&&r(a)}function r(a){if(w===b){var c=t&&t.split(" "),e=a&&a.split(" "),f=d(c,e),c=d(e,c),f=m(f,-1),c=m(c,1);l.$addClass(c);l.$removeClass(f)}t=a}var s=l[a].trim(),v=":"===s.charAt(0)&&":"===s.charAt(1),s=g(s,v?f:c),u=v?p:r,H=k.data("$classCounts"),w=!0,t;H||(H=W(),k.data("$classCounts",H));"ngClass"!==a&&(e||(e=g("$index",function(a){return a&1})),h.$watch(e,n));h.$watch(s,u,v)}}}]}function Ob(a,b,d,c,
f,e,g,h,k){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=k(d.name||"",!1)(a);this.$$parentForm=Mb;this.$options=Pb;this.$$parsedNgModel=f(d.ngModel);this.$$parsedNgModelAssign=this.$$parsedNgModel.assign;
this.$$ngModelGet=this.$$parsedNgModel;this.$$ngModelSet=this.$$parsedNgModelAssign;this.$$pendingDebounce=null;this.$$parserValid=void 0;this.$$currentValidationRunId=0;this.$$scope=a;this.$$attr=d;this.$$element=c;this.$$animate=e;this.$$timeout=g;this.$$parse=f;this.$$q=h;this.$$exceptionHandler=b;Ud(this);Ng(this)}function Ng(a){a.$$scope.$watch(function(){var b=a.$$ngModelGet(a.$$scope);if(b!==a.$modelValue&&(a.$modelValue===a.$modelValue||b===b)){a.$modelValue=a.$$rawModelValue=b;a.$$parserValid=
void 0;for(var d=a.$formatters,c=d.length,f=b;c--;)f=d[c](f);a.$viewValue!==f&&(a.$$updateEmptyClasses(f),a.$viewValue=a.$$lastCommittedViewValue=f,a.$render(),a.$$runValidators(a.$modelValue,a.$viewValue,w))}return b})}function Bc(a){this.$$options=a}function be(a,b){q(b,function(b,c){v(a[c])||(a[c]=b)})}var Og=/^\/(.+)\/([a-z]*)$/,ua=Object.prototype.hasOwnProperty,P=function(a){return E(a)?a.toLowerCase():a},ub=function(a){return E(a)?a.toUpperCase():a},Ha,D,ta,va=[].slice,og=[].splice,Pg=[].push,
na=Object.prototype.toString,Gc=Object.getPrototypeOf,Fa=M("ng"),$=z.angular||(z.angular={}),Zb,qb=0;Ha=z.document.documentMode;var da=Number.isNaN||function(a){return a!==a};w.$inject=[];Xa.$inject=[];var C=Array.isArray,me=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,S=function(a){return E(a)?a.trim():a},Hd=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Ga=function(){if(!v(Ga.rules)){var a=z.document.querySelector("[ng-csp]")||
z.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ga.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ga;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ga.rules},rb=function(){if(v(rb.name_))return rb.name_;var a,b,d=Ka.length,c,f;for(b=0;b<d;++b)if(c=Ka[b],a=z.document.querySelector("["+c.replace(":","\\:")+"jq]")){f=a.getAttribute(c+
"jq");break}return rb.name_=f},oe=/:/g,Ka=["ng-","data-ng-","ng:","x-ng-"],re=function(a){var b=a.currentScript,b=b&&b.getAttribute("src");if(!b)return!0;var d=a.createElement("a");d.href=b;if(a.location.origin===d.origin)return!0;switch(d.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;default:return!1}}(z.document),ue=/[A-Z]/g,Oc=!1,Ja=3,ze={full:"1.6.2",major:1,minor:6,dot:2,codeName:"llamacorn-lovehug"};X.expando="ng339";var hb=X.cache={},ag=1;
X._data=function(a){return this.cache[a[this.expando]]||{}};var Xf=/-([a-z])/g,Qg=/^-ms-/,zb={mouseleave:"mouseout",mouseenter:"mouseover"},ac=M("jqLite"),$f=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,$b=/<|&#?\w+;/,Yf=/<([\w:-]+)/,Zf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,ha={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>",
"</tr></tbody></table>"],_default:[0,"",""]};ha.optgroup=ha.option;ha.tbody=ha.tfoot=ha.colgroup=ha.caption=ha.thead;ha.th=ha.td;var fg=z.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Oa=X.prototype={ready:$c,toString:function(){var a=[];q(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?D(this[a]):D(this[this.length+a])},length:0,push:Pg,sort:[].sort,splice:[].splice},Fb={};q("multiple selected checked disabled readOnly required open".split(" "),
function(a){Fb[P(a)]=a});var ed={};q("input select option textarea button form details".split(" "),function(a){ed[a]=!0});var md={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};q({data:dc,removeData:gb,hasData:function(a){for(var b in hb[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)gb(a[b])}},function(a,b){X[b]=a});q({data:dc,inheritedData:Db,scope:function(a){return D.data(a,"$scope")||Db(a.parentNode||
a,["$isolateScope","$scope"])},isolateScope:function(a){return D.data(a,"$isolateScope")||D.data(a,"$isolateScopeNoTemplate")},controller:bd,injector:function(a){return Db(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Ab,css:function(a,b,d){b=wb(b.replace(Qg,"ms-"));if(v(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Ja&&2!==c&&8!==c&&a.getAttribute){var c=P(b),f=Fb[c];if(v(d))null===d||!1===d&&f?a.removeAttribute(b):a.setAttribute(b,
f?c:d);else return a=a.getAttribute(b),f&&null!==a&&(a=c),null===a?void 0:a}},prop:function(a,b,d){if(v(d))a[b]=d;else return a[b]},text:function(){function a(a,d){if(x(d)){var c=a.nodeType;return 1===c||c===Ja?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(x(b)){if(a.multiple&&"select"===wa(a)){var d=[];q(a.options,function(a){a.selected&&d.push(a.value||a.text)});return d}return a.value}a.value=b},html:function(a,b){if(x(b))return a.innerHTML;xb(a,!0);a.innerHTML=b},
empty:cd},function(a,b){X.prototype[b]=function(b,c){var f,e,g=this.length;if(a!==cd&&x(2===a.length&&a!==Ab&&a!==bd?b:c)){if(F(b)){for(f=0;f<g;f++)if(a===dc)a(this[f],b);else for(e in b)a(this[f],e,b[e]);return this}f=a.$dv;g=x(f)?Math.min(g,1):g;for(e=0;e<g;e++){var h=a(this[e],b,c);f=f?f+h:h}return f}for(f=0;f<g;f++)a(this[f],b,c);return this}});q({removeData:gb,on:function(a,b,d,c){if(v(c))throw ac("onargs");if(Yc(a)){c=yb(a,!0);var f=c.events,e=c.handle;e||(e=c.handle=cg(a,f));c=0<=b.indexOf(" ")?
b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=f[b];h||(h=f[b]=[],h.specialHandlerWrapper=c,"$destroy"===b||g||a.addEventListener(b,e));h.push(d)};g--;)b=c[g],zb[b]?(h(zb[b],eg),h(b,void 0,!0)):h(b)}},off:ad,one:function(a,b,d){a=D(a);a.on(b,function f(){a.off(b,d);a.off(b,f)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;xb(a);q(new X(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];q(a.childNodes,function(a){1===
a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=a.nodeType;if(1===d||11===d){b=new X(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;q(new X(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){var d=D(b).eq(0).clone()[0],c=a.parentNode;c&&c.replaceChild(d,a);d.appendChild(a)},remove:Eb,detach:function(a){Eb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;
if(c){b=new X(b);for(var f=0,e=b.length;f<e;f++){var g=b[f];c.insertBefore(g,d.nextSibling);d=g}}},addClass:Cb,removeClass:Bb,toggleClass:function(a,b,d){b&&q(b.split(" "),function(b){var f=d;x(f)&&(f=!Ab(a,b));(f?Cb:Bb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:cc,triggerHandler:function(a,b,d){var c,f,e=b.type||b,g=yb(a);if(g=(g=g&&g.events)&&
g[e])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:w,type:e,target:a},b.type&&(c=R(c,b)),b=ra(g),f=d?[c].concat(d):[c],q(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,f)})}},function(a,b){X.prototype[b]=function(b,c,f){for(var e,g=0,h=this.length;g<
h;g++)x(e)?(e=a(this[g],b,c,f),v(e)&&(e=D(e))):bc(e,a(this[g],b,c,f));return v(e)?e:this}});X.prototype.bind=X.prototype.on;X.prototype.unbind=X.prototype.off;var Rg=Object.create(null);fd.prototype={_idx:function(a){if(a===this._lastKey)return this._lastIndex;this._lastKey=a;return this._lastIndex=this._keys.indexOf(a)},_transformKey:function(a){return da(a)?Rg:a},get:function(a){a=this._transformKey(a);a=this._idx(a);if(-1!==a)return this._values[a]},set:function(a,b){a=this._transformKey(a);var d=
this._idx(a);-1===d&&(d=this._lastIndex=this._keys.length);this._keys[d]=a;this._values[d]=b},delete:function(a){a=this._transformKey(a);a=this._idx(a);if(-1===a)return!1;this._keys.splice(a,1);this._values.splice(a,1);this._lastKey=NaN;this._lastIndex=-1;return!0}};var Gb=fd,Vf=[function(){this.$get=[function(){return Gb}]}],hg=/^([^(]+?)=>/,ig=/^[^(]*\(\s*([^)]*)\)/m,Sg=/,/,Tg=/^\s*(_?)(\S+?)\1\s*$/,gg=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,za=M("$injector");db.$$annotate=function(a,b,d){var c;if("function"===
typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw E(d)&&d||(d=a.name||jg(a)),za("strictdi",d);b=gd(a);q(b[1].split(Sg),function(a){a.replace(Tg,function(a,b,d){c.push(d)})})}a.$inject=c}}else C(a)?(b=a.length-1,sb(a[b],"fn"),c=a.slice(0,b)):sb(a,"fn",!0);return c};var ce=M("$animate"),mf=function(){this.$get=w},nf=function(){var a=new Gb,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function f(a,b,c){var d=!1;b&&(b=E(b)?b.split(" "):C(b)?b:[],q(b,function(b){b&&(d=!0,a[b]=c)}));
return d}function e(){q(b,function(b){var c=a.get(b);if(c){var d=kg(b.attr("class")),e="",f="";q(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});q(b,function(a){e&&Cb(a,e);f&&Bb(a,f)});a.delete(b)}});b.length=0}return{enabled:w,on:w,off:w,pin:w,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from);k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=f(k,h,!0),l=f(k,l,!1),h||l)a.set(g,k),b.push(g),1===b.length&&c.$$postDigest(e);
g=new d;g.complete();return g}}}]},kf=["$provide",function(a){var b=this;this.$$registeredAnimations=Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw ce("notcsel",d);var f=d+"-animation";b.$$registeredAnimations[d.substr(1)]=f;a.factory(f,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw ce("nongcls","ng-animate");return this.$$classNameFilter};
this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;a:{for(h=0;h<d.length;h++){var k=d[h];if(1===k.nodeType){h=k;break a}}h=void 0}!h||h.parentNode||h.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(f,e,g,h){e=e&&D(e);g=g&&D(g);e=e||g.parent();b(f,e,g);return a.push(f,"enter",ea(h))},move:function(f,e,g,h){e=e&&D(e);g=g&&D(g);e=e||g.parent();b(f,e,g);return a.push(f,
"move",ea(h))},leave:function(b,c){return a.push(b,"leave",ea(c),function(){b.remove()})},addClass:function(b,c,g){g=ea(g);g.addClass=ib(g.addclass,c);return a.push(b,"addClass",g)},removeClass:function(b,c,g){g=ea(g);g.removeClass=ib(g.removeClass,c);return a.push(b,"removeClass",g)},setClass:function(b,c,g,h){h=ea(h);h.addClass=ib(h.addClass,c);h.removeClass=ib(h.removeClass,g);return a.push(b,"setClass",h)},animate:function(b,c,g,h,k){k=ea(k);k.from=k.from?R(k.from,c):c;k.to=k.to?R(k.to,g):g;k.tempClasses=
ib(k.tempClasses,h||"ng-inline-animate");return a.push(b,"animate",k)}}}]}],pf=function(){this.$get=["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},of=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(a,b,d,c,f){function e(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){c()?
f(a,0,!1):b(a)};this._state=0}e.chain=function(a,b){function c(){if(d===a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};e.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;q(a,function(a){a.done(c)})};e.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:w,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},
then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},
_resolve:function(a){2!==this._state&&(q(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return e}]},lf=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,f){function e(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);h||k.complete();h=!0});return k}var g=f||{};g.$$prepared||(g=xa(g));g.cleanupStyles&&(g.from=g.to=
null);g.from&&(b.css(g.from),g.from=null);var h,k=new d;return{start:e,end:e}}}]},fa=M("$compile"),hc=new function(){};Qc.$inject=["$provide","$$sanitizeUriProvider"];Ib.prototype.isFirstChange=function(){return this.previousValue===hc};var hd=/^((?:x|data)[:\-_])/i,ng=/[:\-_]+(.)/g,od=M("$controller"),nd=/^(\S+)(\s+as\s+([\w$]+))?$/,wf=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof D&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},pd="application/json",
kc={"Content-Type":pd+";charset=utf-8"},qg=/^\[|^\{(?!\{)/,rg={"[":/]$/,"{":/}$/},pg=/^\)]\}',?\n/,ud=M("$http"),Ca=$.$interpolateMinErr=M("$interpolate");Ca.throwNoconcat=function(a){throw Ca("noconcat",a);};Ca.interr=function(a,b){return Ca("interr",a,b.toString())};var Ef=function(){this.$get=["$window",function(a){function b(a){var b=function(a){b.data=a;b.called=!0};b.id=a;return b}var d=a.angular.callbacks,c={};return{createCallback:function(a){a="_"+(d.$$counter++).toString(36);var e="angular.callbacks."+
a,g=b(a);c[e]=d[a]=g;return e},wasCalled:function(a){return c[a].called},getResponse:function(a){return c[a].data},removeCallback:function(a){delete d[c[a].id];delete c[a]}}}]},Ug=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,tg={http:80,https:443,ftp:21},kb=M("$location"),ug=/^\s*[\\/]{2,}/,Vg={$$absUrl:"",$$html5:!1,$$replace:!1,absUrl:Jb("$$absUrl"),url:function(a){if(x(a))return this.$$url;var b=Ug.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||
"");return this},protocol:Jb("$$protocol"),host:Jb("$$host"),port:Jb("$$port"),path:yd("$$path",function(a){a=null!==a?a.toString():"";return"/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(E(a)||Y(a))a=a.toString(),this.$$search=Lc(a);else if(F(a))a=xa(a,{}),q(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw kb("isrcharg");break;default:x(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},
hash:yd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};q([xd,oc,nc],function(a){a.prototype=Object.create(Vg);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==nc||!this.$$html5)throw kb("nostate");this.$$state=x(b)?null:b;this.$$urlUpdatedByLocation=!0;return this}});var Ta=M("$parse"),xg={}.constructor.prototype.valueOf,Qb=W();q("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Qb[a]=!0});
var Wg={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},qc=function(a){this.options=a};qc.prototype={constructor:qc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),
this.index++;else if(this.isWhitespace(a))this.index++;else{var b=a+this.peek(),d=b+this.peek(2),c=Qb[b],f=Qb[d];Qb[a]||c||f?(a=f?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},
isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},
isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=
v(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw Ta("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=P(this.text.charAt(this.index));if("."===d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"===d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"===a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!==a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,
text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,f=!1;this.index<this.text.length;){var e=this.text.charAt(this.index),c=c+e;if(f)"u"===e?(f=this.text.substring(this.index+
1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=Wg[e]||e,f=!1;else if("\\"===e)f=!0;else{if(e===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=e}this.index++}this.throwError("Unterminated quote",b)}};var s=function(a,b){this.lexer=a;this.options=b};s.Program="Program";s.ExpressionStatement="ExpressionStatement";s.AssignmentExpression="AssignmentExpression";s.ConditionalExpression=
"ConditionalExpression";s.LogicalExpression="LogicalExpression";s.BinaryExpression="BinaryExpression";s.UnaryExpression="UnaryExpression";s.CallExpression="CallExpression";s.MemberExpression="MemberExpression";s.Identifier="Identifier";s.Literal="Literal";s.ArrayExpression="ArrayExpression";s.Property="Property";s.ObjectExpression="ObjectExpression";s.ThisExpression="ThisExpression";s.LocalsExpression="LocalsExpression";s.NGValueParameter="NGValueParameter";s.prototype={ast:function(a){this.text=
a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:s.Program,body:a}},expressionStatement:function(){return{type:s.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},
expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!Bd(a))throw Ta("lval");a={type:s.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:s.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:s.LogicalExpression,
operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:s.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:s.BinaryExpression,operator:b.text,
left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},
primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=xa(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:s.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",
this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:s.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:s.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());
return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");
return{type:s.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:s.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),
b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}},throwError:function(a,b){throw Ta("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw Ta("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw Ta("ueoe",
this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,f){if(this.tokens.length>a){a=this.tokens[a];var e=a.text;if(e===b||e===d||e===c||e===f||!(b||d||c||f))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:s.ThisExpression},$locals:{type:s.LocalsExpression}}};Ed.prototype={compile:function(a){var b=this;a=this.astBuilder.ast(a);this.state={nextId:0,filters:{},
fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};U(a,b.$filter);var d="",c;this.stage="assign";if(c=Cd(a))this.state.computing="assign",d=this.nextId(),this.recurse(c,d),this.return_(d),d="fn.assign="+this.generateFunction("assign","s,v,l");c=Ad(a.body);b.stage="inputs";q(c,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}};b.state.computing=d;var h=b.nextId();b.recurse(a,h);b.return_(h);b.state.inputs.push(d);a.watchId=c});this.state.computing="fn";this.stage="main";
this.recurse(a);d='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+d+this.watchFns()+"return fn;";d=(new Function("$filter","getStringValue","ifDefined","plus",d))(this.$filter,vg,wg,zd);this.state=this.stage=void 0;d.literal=Dd(a);d.constant=a.constant;return d},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;q(b,function(b){a.push("var "+b+"="+d.generateFunction(b,"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+
"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;q(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,f,e){var g,h,k=this,l,m,n;c=c||w;if(!e&&v(a.watchId))b=
b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,f,!0));else switch(a.type){case s.Program:q(a.body,function(b,c){k.recurse(b.expression,void 0,void 0,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case s.Literal:m=this.escape(a.value);this.assign(b,m);c(b||m);break;case s.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){h=a});m=a.operator+"("+this.ifDefined(h,0)+")";this.assign(b,
m);c(m);break;case s.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){h=a});m="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,m);c(m);break;case s.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case s.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,
b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case s.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){f&&1!==f&&k.if_(k.isNull(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",
a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));c(b);break;case s.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();k.recurse(a.object,g,void 0,function(){k.if_(k.notNull(g),function(){a.computed?(h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),f&&1!==f&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),m=k.computedMember(g,h),k.assign(b,m),d&&(d.computed=!0,d.name=h)):(f&&1!==f&&k.if_(k.isNull(k.nonComputedMember(g,
a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}")),m=k.nonComputedMember(g,a.property.name),k.assign(b,m),d&&(d.computed=!1,d.name=a.property.name))},function(){k.assign(b,"undefined")});c(b)},!!f);break;case s.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],q(a.arguments,function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),m=h+"("+l.join(",")+")",k.assign(b,m),c(b)):(h=k.nextId(),g={},l=[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),
function(){q(a.arguments,function(b){k.recurse(b,a.constant?void 0:k.nextId(),void 0,function(a){l.push(a)})});m=g.name?k.member(g.context,g.name,g.computed)+"("+l.join(",")+")":h+"("+l.join(",")+")";k.assign(b,m)},function(){k.assign(b,"undefined")});c(b)}));break;case s.AssignmentExpression:h=this.nextId();g={};this.recurse(a.left,void 0,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);m=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,m);c(b||m)})},1);break;
case s.ArrayExpression:l=[];q(a.elements,function(b){k.recurse(b,a.constant?void 0:k.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(b||m);break;case s.ObjectExpression:l=[];n=!1;q(a.properties,function(a){a.computed&&(n=!0)});n?(b=b||this.nextId(),this.assign(b,"{}"),q(a.properties,function(a){a.computed?(g=k.nextId(),k.recurse(a.key,g)):g=a.key.type===s.Identifier?a.key.name:""+a.key.value;h=k.nextId();k.recurse(a.value,h);k.assign(k.member(b,g,a.computed),h)})):
(q(a.properties,function(b){k.recurse(b.value,a.constant?void 0:k.nextId(),void 0,function(a){l.push(k.escape(b.key.type===s.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,m));c(b||m);break;case s.ThisExpression:this.assign(b,"s");c(b||"s");break;case s.LocalsExpression:this.assign(b,"l");c(b||"l");break;case s.NGValueParameter:this.assign(b,"v"),c(b||"v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,
a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",
a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},getStringValue:function(a){this.assign(a,
"getStringValue("+a+")")},lazyRecurse:function(a,b,d,c,f,e){var g=this;return function(){g.recurse(a,b,d,c,f,e)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(E(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(Y(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";
if("undefined"===typeof a)return"undefined";throw Ta("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};Fd.prototype={compile:function(a){var b=this;a=this.astBuilder.ast(a);U(a,b.$filter);var d,c;if(d=Cd(a))c=this.recurse(d);d=Ad(a.body);var f;d&&(f=[],q(d,function(a,c){var d=b.recurse(a);a.input=d;f.push(d);a.watchId=c}));var e=[];q(a.body,function(a){e.push(b.recurse(a.expression))});
d=0===a.body.length?w:1===a.body.length?e[0]:function(a,b){var c;q(e,function(d){c=d(a,b)});return c};c&&(d.assign=function(a,b,d){return c(a,d,b)});f&&(d.inputs=f);d.literal=Dd(a);d.constant=a.constant;return d},recurse:function(a,b,d){var c,f,e=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,b);case s.UnaryExpression:return f=this.recurse(a.argument),this["unary"+a.operator](f,b);case s.BinaryExpression:return c=this.recurse(a.left),
f=this.recurse(a.right),this["binary"+a.operator](c,f,b);case s.LogicalExpression:return c=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](c,f,b);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case s.Identifier:return e.identifier(a.name,b,d);case s.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(c,
f,b,d):this.nonComputedMember(c,f,b,d);case s.CallExpression:return g=[],q(a.arguments,function(a){g.push(e.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?function(a,c,d,e){for(var n=[],p=0;p<g.length;++p)n.push(g[p](a,c,d,e));a=f.apply(void 0,n,e);return b?{context:void 0,name:void 0,value:a}:a}:function(a,c,d,e){var n=f(a,c,d,e),p;if(null!=n.value){p=[];for(var r=0;r<g.length;++r)p.push(g[r](a,c,d,e));p=n.value.apply(n.context,p)}return b?
{value:p}:p};case s.AssignmentExpression:return c=this.recurse(a.left,!0,1),f=this.recurse(a.right),function(a,d,e,g){var n=c(a,d,e,g);a=f(a,d,e,g);n.context[n.name]=a;return b?{value:a}:a};case s.ArrayExpression:return g=[],q(a.elements,function(a){g.push(e.recurse(a))}),function(a,c,d,e){for(var f=[],p=0;p<g.length;++p)f.push(g[p](a,c,d,e));return b?{value:f}:f};case s.ObjectExpression:return g=[],q(a.properties,function(a){a.computed?g.push({key:e.recurse(a.key),computed:!0,value:e.recurse(a.value)}):
g.push({key:a.key.type===s.Identifier?a.key.name:""+a.key.value,computed:!1,value:e.recurse(a.value)})}),function(a,c,d,e){for(var f={},p=0;p<g.length;++p)g[p].computed?f[g[p].key(a,c,d,e)]=g[p].value(a,c,d,e):f[g[p].key]=g[p].value(a,c,d,e);return b?{value:f}:f};case s.ThisExpression:return function(a){return b?{value:a}:a};case s.LocalsExpression:return function(a,c){return b?{value:c}:c};case s.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,
c,f,e){d=a(d,c,f,e);d=v(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,f,e){d=a(d,c,f,e);d=v(d)?-d:-0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,f,e){d=!a(d,c,f,e);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,f,e,g){var h=a(c,f,e,g);c=b(c,f,e,g);h=zd(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,f,e,g){var h=a(c,f,e,g);c=b(c,f,e,g);h=(v(h)?h:0)-(v(c)?c:0);return d?{value:h}:h}},"binary*":function(a,b,
d){return function(c,f,e,g){c=a(c,f,e,g)*b(c,f,e,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)/b(c,f,e,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)%b(c,f,e,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)===b(c,f,e,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)!==b(c,f,e,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,
f,e,g){c=a(c,f,e,g)==b(c,f,e,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)!=b(c,f,e,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)<b(c,f,e,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)>b(c,f,e,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)<=b(c,f,e,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,f,e,g){c=
a(c,f,e,g)>=b(c,f,e,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)&&b(c,f,e,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)||b(c,f,e,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(f,e,g,h){f=a(f,e,g,h)?b(f,e,g,h):d(f,e,g,h);return c?{value:f}:f}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d){return function(c,f,e,g){c=
f&&a in f?f:c;d&&1!==d&&c&&null==c[a]&&(c[a]={});f=c?c[a]:void 0;return b?{context:c,name:a,value:f}:f}},computedMember:function(a,b,d,c){return function(f,e,g,h){var k=a(f,e,g,h),l,m;null!=k&&(l=b(f,e,g,h),l+="",c&&1!==c&&k&&!k[l]&&(k[l]={}),m=k[l]);return d?{context:k,name:l,value:m}:m}},nonComputedMember:function(a,b,d,c){return function(f,e,g,h){f=a(f,e,g,h);c&&1!==c&&f&&null==f[b]&&(f[b]={});e=null!=f?f[b]:void 0;return d?{context:f,name:b,value:e}:e}},inputs:function(a,b){return function(d,
c,f,e){return e?e[b]:a(d,c,f)}}};var rc=function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new s(a,d);this.astCompiler=d.csp?new Fd(this.ast,b):new Ed(this.ast,b)};rc.prototype={constructor:rc,parse:function(a){return this.astCompiler.compile(a)}};var Da=M("$sce"),pa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},sc=/_([a-z])/g,zg=M("$compile"),ca=z.document.createElement("a"),Jd=oa(z.location.href);Kd.$inject=["$document"];Xc.$inject=["$provide"];var Rd=22,
Qd=".",uc="0";Ld.$inject=["$locale"];Nd.$inject=["$locale"];var Kg={yyyy:aa("FullYear",4,0,!1,!0),yy:aa("FullYear",2,0,!0,!0),y:aa("FullYear",1,0,!1,!0),MMMM:mb("Month"),MMM:mb("Month",!0),MM:aa("Month",2,1),M:aa("Month",1,1),LLLL:mb("Month",!1,!0),dd:aa("Date",2),d:aa("Date",1),HH:aa("Hours",2),H:aa("Hours",1),hh:aa("Hours",2,-12),h:aa("Hours",1,-12),mm:aa("Minutes",2),m:aa("Minutes",1),ss:aa("Seconds",2),s:aa("Seconds",1),sss:aa("Milliseconds",3),EEEE:mb("Day"),EEE:mb("Day",!0),a:function(a,b){return 12>
a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Kb(Math[0<a?"floor":"ceil"](a/60),2)+Kb(Math.abs(a%60),2))},ww:Td(2),w:Td(1),G:vc,GG:vc,GGG:vc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},Jg=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,Ig=/^-?\d+$/;Md.$inject=["$locale"];var Dg=ma(P),Eg=ma(ub);Od.$inject=["$parse"];var Be=ma({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,
b){if("a"===b[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===na.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(f)||a.preventDefault()})}}}}),vb={};q(Fb,function(a,b){function d(a,d,f){a.$watch(f[c],function(a){f.$set(b,!!a)})}if("multiple"!==a){var c=Ba("ng-"+b),f=d;"checked"===a&&(f=function(a,b,f){f.ngModel!==f[c]&&d(a,b,f)});vb[c]=function(){return{restrict:"A",priority:100,link:f}}}});q(md,function(a,b){vb[b]=function(){return{priority:100,link:function(a,
c,f){if("ngPattern"===b&&"/"===f.ngPattern.charAt(0)&&(c=f.ngPattern.match(Og))){f.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(f[b],function(a){f.$set(b,a)})}}}});q(["src","srcset","href"],function(a){var b=Ba("ng-"+a);vb[b]=function(){return{priority:99,link:function(d,c,f){var e=a,g=a;"href"===a&&"[object SVGAnimatedString]"===na.call(c.prop("href"))&&(g="xlinkHref",f.$attr[g]="xlink:href",e=null);f.$observe(b,function(b){b?(f.$set(g,b),Ha&&e&&c.prop(e,f[g])):"href"===a&&f.$set(g,null)})}}}});
var Mb={$addControl:w,$$renameControl:function(a,b){a.$name=b},$removeControl:w,$setValidity:w,$setDirty:w,$setPristine:w,$setSubmitted:w};Lb.$inject=["$element","$attrs","$scope","$animate","$interpolate"];Lb.prototype={$rollbackViewValue:function(){q(this.$$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){q(this.$$controls,function(a){a.$commitViewValue()})},$addControl:function(a){La(a.$name,"input");this.$$controls.push(a);a.$name&&(this[a.$name]=a);a.$$parentForm=this},
$$renameControl:function(a,b){var d=a.$name;this[d]===a&&delete this[d];this[b]=a;a.$name=b},$removeControl:function(a){a.$name&&this[a.$name]===a&&delete this[a.$name];q(this.$pending,function(b,d){this.$setValidity(d,null,a)},this);q(this.$error,function(b,d){this.$setValidity(d,null,a)},this);q(this.$$success,function(b,d){this.$setValidity(d,null,a)},this);Za(this.$$controls,a);a.$$parentForm=Mb},$setDirty:function(){this.$$animate.removeClass(this.$$element,Ua);this.$$animate.addClass(this.$$element,
Rb);this.$dirty=!0;this.$pristine=!1;this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,Ua,Rb+" ng-submitted");this.$dirty=!1;this.$pristine=!0;this.$submitted=!1;q(this.$$controls,function(a){a.$setPristine()})},$setUntouched:function(){q(this.$$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted");this.$submitted=!0;this.$$parentForm.$setSubmitted()}};Wd({clazz:Lb,set:function(a,b,d){var c=
a[b];c?-1===c.indexOf(d)&&c.push(d):a[b]=[d]},unset:function(a,b,d){var c=a[b];c&&(Za(c,d),0===c.length&&delete a[b])}});var de=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||w}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Lb,compile:function(d,e){d.addClass(Ua).addClass(nb);var g=e.name?"name":a&&e.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var n=f[0];if(!("action"in e)){var p=function(b){a.$apply(function(){n.$commitViewValue();
n.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",p);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",p)},0,!1)})}(f[1]||n.$$parentForm).$addControl(n);var r=g?c(n.$name):w;g&&(r(a,n),e.$observe(g,function(b){n.$name!==b&&(r(a,void 0),n.$$parentForm.$$renameControl(n,b),r=c(n.$name),r(a,n))}));d.on("$destroy",function(){n.$$parentForm.$removeControl(n);r(a,void 0);R(n,Mb)})}}}}}]},Ce=de(),Oe=de(!0),Lg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,
Xg=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,Yg=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,Mg=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,ee=/^(\d{4,})-(\d{2})-(\d{2})$/,fe=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Cc=/^(\d{4,})-W(\d\d)$/,ge=/^(\d{4,})-(\d\d)$/,
he=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Yd=W();q(["date","datetime-local","month","time","week"],function(a){Yd[a]=!0});var ie={text:function(a,b,d,c,f,e){Ra(a,b,d,c,f,e);xc(c)},date:ob("date",ee,Nb(ee,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":ob("datetimelocal",fe,Nb(fe,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:ob("time",he,Nb(he,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:ob("week",Cc,function(a,b){if(ga(a))return a;if(E(a)){Cc.lastIndex=0;var d=Cc.exec(a);
if(d){var c=+d[1],f=+d[2],e=d=0,g=0,h=0,k=Sd(c),f=7*(f-1);b&&(d=b.getHours(),e=b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+f,d,e,g,h)}}return NaN},"yyyy-Www"),month:ob("month",ge,Nb(ge,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,f,e){yc(a,b,d,c);Zd(c);Ra(a,b,d,c,f,e);var g,h;if(v(d.min)||d.ngMin)c.$validators.min=function(a){return c.$isEmpty(a)||x(g)||a>=g},d.$observe("min",function(a){g=Sa(a);c.$validate()});if(v(d.max)||d.ngMax)c.$validators.max=
function(a){return c.$isEmpty(a)||x(h)||a<=h},d.$observe("max",function(a){h=Sa(a);c.$validate()});if(v(d.step)||d.ngStep){var k;c.$validators.step=function(a,b){return c.$isEmpty(b)||x(k)||$d(b,g||0,k)};d.$observe("step",function(a){k=Sa(a);c.$validate()})}},url:function(a,b,d,c,f,e){Ra(a,b,d,c,f,e);xc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||Xg.test(d)}},email:function(a,b,d,c,f,e){Ra(a,b,d,c,f,e);xc(c);c.$$parserName="email";c.$validators.email=function(a,
b){var d=a||b;return c.$isEmpty(d)||Yg.test(d)}},radio:function(a,b,d,c){var f=!d.ngTrim||"false"!==S(d.ngTrim);x(d.name)&&b.attr("name",++qb);b.on("click",function(a){var g;b[0].checked&&(g=d.value,f&&(g=S(g)),c.$setViewValue(g,a&&a.type))});c.$render=function(){var a=d.value;f&&(a=S(a));b[0].checked=a===c.$viewValue};d.$observe("value",c.$render)},range:function(a,b,d,c,f,e){function g(a,c){b.attr(a,d[a]);d.$observe(a,c)}function h(a){n=Sa(a);da(c.$modelValue)||(m?(a=b.val(),n>a&&(a=n,b.val(a)),
c.$setViewValue(a)):c.$validate())}function k(a){p=Sa(a);da(c.$modelValue)||(m?(a=b.val(),p<a&&(b.val(p),a=p<n?n:p),c.$setViewValue(a)):c.$validate())}function l(a){r=Sa(a);da(c.$modelValue)||(m&&c.$viewValue!==b.val()?c.$setViewValue(b.val()):c.$validate())}yc(a,b,d,c);Zd(c);Ra(a,b,d,c,f,e);var m=c.$$hasNativeValidators&&"range"===b[0].type,n=m?0:void 0,p=m?100:void 0,r=m?1:void 0,q=b[0].validity;a=v(d.min);f=v(d.max);e=v(d.step);var s=c.$render;c.$render=m&&v(q.rangeUnderflow)&&v(q.rangeOverflow)?
function(){s();c.$setViewValue(b.val())}:s;a&&(c.$validators.min=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||x(n)||b>=n},g("min",h));f&&(c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||x(p)||b<=p},g("max",k));e&&(c.$validators.step=m?function(){return!q.stepMismatch}:function(a,b){return c.$isEmpty(b)||x(r)||$d(b,n||0,r)},g("step",l))},checkbox:function(a,b,d,c,f,e,g,h){var k=ae(h,a,"ngTrueValue",d.ngTrueValue,!0),l=ae(h,a,"ngFalseValue",d.ngFalseValue,
!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return qa(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:w,button:w,submit:w,reset:w,file:w},Rc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,e,g,h){h[0]&&(ie[P(g.type)]||ie.text)(f,e,g,h[0],b,a,d,c)}}}}],Zg=/^(true|false|\d+)$/,
ff=function(){function a(a,d,c){var f=v(c)?c:9===Ha?"":null;a.prop("value",f);d.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,d){return Zg.test(d.ngValue)?function(b,d,e){b=b.$eval(e.ngValue);a(d,e,b)}:function(b,d,e){b.$watch(e.ngValue,function(b){a(d,e,b)})}}}},Ge=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,f){a.$$addBindingInfo(c,f.ngBind);c=c[0];b.$watch(f.ngBind,function(a){c.textContent=Yb(a)})}}}}],Ie=["$interpolate",
"$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];e.$observe("ngBindTemplate",function(a){d.textContent=x(a)?"":a})}}}}],He=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,f){var e=b(f.ngBindHtml),g=b(f.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);return function(b,c,f){d.$$addBindingInfo(c,f.ngBindHtml);b.$watch(g,
function(){var d=e(b);c.html(a.getTrustedHtml(d)||"")})}}}}],ef=ma({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Je=Ac("",!0),Le=Ac("Odd",0),Ke=Ac("Even",1),Me=Qa({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ne=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Wc={},$g={blur:!0,focus:!0};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
function(a){var b=Ba("ng-"+a);Wc[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(f,e){var g=d(e[b]);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};$g[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Qe=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,f,e,g){var h,k,l;d.$watch(f.ngIf,function(d){d?k||g(function(d,e){k=e;d[d.length++]=b.$$createComment("end ngIf",
f.ngIf);h={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=tb(h.clone),a.leave(l).done(function(a){!1!==a&&(l=null)}),h=null))})}}}],Re=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:$.noop,compile:function(c,f){var e=f.ngInclude||f.src,g=f.onload||"",h=f.autoscroll;return function(c,f,m,n,p){var q=0,s,w,u,H=function(){w&&(w.remove(),w=null);s&&(s.$destroy(),s=null);
u&&(d.leave(u).done(function(a){!1!==a&&(w=null)}),w=u,u=null)};c.$watch(e,function(e){var m=function(a){!1===a||!v(h)||h&&!c.$eval(h)||b()},w=++q;e?(a(e,!0).then(function(a){if(!c.$$destroyed&&w===q){var b=c.$new();n.template=a;a=p(b,function(a){H();d.enter(a,null,f).done(m)});s=b;u=a;s.$emit("$includeContentLoaded",e);c.$eval(g)}},function(){c.$$destroyed||w!==q||(H(),c.$emit("$includeContentError",e))}),c.$emit("$includeContentRequested",e)):(H(),n.template=null)})}}}}],hf=["$compile",function(a){return{restrict:"ECA",
priority:-400,require:"ngInclude",link:function(b,d,c,f){na.call(d[0]).match(/SVG/)?(d.empty(),a(Zc(f.template,z.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(b))}}}],Se=Qa({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),df=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var f=d.ngList||", ",e="false"!==d.ngTrim,g=e?S(f):f;c.$parsers.push(function(a){if(!x(a)){var b=
[];a&&q(a.split(g),function(a){a&&b.push(e?S(a):a)});return b}});c.$formatters.push(function(a){if(C(a))return a.join(f)});c.$isEmpty=function(a){return!a||!a.length}}}},nb="ng-valid",Vd="ng-invalid",Ua="ng-pristine",Rb="ng-dirty",pb=M("ngModel");Ob.$inject="$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");Ob.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$$parse(this.$$attr.ngModel+"()"),b=this.$$parse(this.$$attr.ngModel+
"($$$p)");this.$$ngModelGet=function(b){var c=this.$$parsedNgModel(b);y(c)&&(c=a(b));return c};this.$$ngModelSet=function(a,c){y(this.$$parsedNgModel(a))?b(a,{$$$p:c}):this.$$parsedNgModelAssign(a,c)}}else if(!this.$$parsedNgModel.assign)throw pb("nonassign",this.$$attr.ngModel,ya(this.$$element));},$render:w,$isEmpty:function(a){return x(a)||""===a||null===a||a!==a},$$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,
"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1;this.$pristine=!0;this.$$animate.removeClass(this.$$element,Rb);this.$$animate.addClass(this.$$element,Ua)},$setDirty:function(){this.$dirty=!0;this.$pristine=!1;this.$$animate.removeClass(this.$$element,Ua);this.$$animate.addClass(this.$$element,Rb);this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1;this.$untouched=
!0;this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0;this.$untouched=!1;this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce);this.$viewValue=this.$$lastCommittedViewValue;this.$render()},$validate:function(){if(!da(this.$modelValue)){var a=this.$$lastCommittedViewValue,b=this.$$rawModelValue,d=this.$valid,c=this.$modelValue,f=this.$options.getOption("allowInvalid"),
e=this;this.$$runValidators(b,a,function(a){f||d===a||(e.$modelValue=a?b:void 0,e.$modelValue!==c&&e.$$writeModelToScope())})}},$$runValidators:function(a,b,d){function c(){var c=!0;q(k.$validators,function(d,f){var g=Boolean(d(a,b));c=c&&g;e(f,g)});return c?!0:(q(k.$asyncValidators,function(a,b){e(b,null)}),!1)}function f(){var c=[],d=!0;q(k.$asyncValidators,function(f,g){var h=f(a,b);if(!h||!y(h.then))throw pb("nopromise",h);e(g,void 0);c.push(h.then(function(){e(g,!0)},function(){d=!1;e(g,!1)}))});
c.length?k.$$q.all(c).then(function(){g(d)},w):g(!0)}function e(a,b){h===k.$$currentValidationRunId&&k.$setValidity(a,b)}function g(a){h===k.$$currentValidationRunId&&d(a)}this.$$currentValidationRunId++;var h=this.$$currentValidationRunId,k=this;(function(){var a=k.$$parserName||"parse";if(x(k.$$parserValid))e(a,null);else return k.$$parserValid||(q(k.$validators,function(a,b){e(b,null)}),q(k.$asyncValidators,function(a,b){e(b,null)})),e(a,k.$$parserValid),k.$$parserValid;return!0})()?c()?f():g(!1):
g(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce);if(this.$$lastCommittedViewValue!==a||""===a&&this.$$hasNativeValidators)this.$$updateEmptyClasses(a),this.$$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$$parseAndValidate()},$$parseAndValidate:function(){var a=this.$$lastCommittedViewValue,b=this;if(this.$$parserValid=x(a)?void 0:!0)for(var d=0;d<this.$parsers.length;d++)if(a=this.$parsers[d](a),x(a)){this.$$parserValid=!1;break}da(this.$modelValue)&&
(this.$modelValue=this.$$ngModelGet(this.$$scope));var c=this.$modelValue,f=this.$options.getOption("allowInvalid");this.$$rawModelValue=a;f&&(this.$modelValue=a,b.$modelValue!==c&&b.$$writeModelToScope());this.$$runValidators(a,this.$$lastCommittedViewValue,function(d){f||(b.$modelValue=d?a:void 0,b.$modelValue!==c&&b.$$writeModelToScope())})},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,this.$modelValue);q(this.$viewChangeListeners,function(a){try{a()}catch(b){this.$$exceptionHandler(b)}},
this)},$setViewValue:function(a,b){this.$viewValue=a;this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(b)},$$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");Y(b[a])?b=b[a]:Y(b["default"])&&(b=b["default"]);this.$$timeout.cancel(this.$$pendingDebounce);var d=this;0<b?this.$$pendingDebounce=this.$$timeout(function(){d.$commitViewValue()},b):this.$$scope.$root.$$phase?this.$commitViewValue():this.$$scope.$apply(function(){d.$commitViewValue()})},
$overrideModelOptions:function(a){this.$options=this.$options.createChild(a)}};Wd({clazz:Ob,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var cf=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Ob,priority:1,compile:function(b){b.addClass(Ua).addClass("ng-untouched").addClass(nb);return{pre:function(a,b,f,e){var g=e[0];b=e[1]||g.$$parentForm;if(e=e[2])g.$options=e.$options;g.$$initGetterSetters();b.$addControl(g);f.$observe("name",
function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,f,e){function g(){h.$setTouched()}var h=e[0];if(h.$options.getOption("updateOn"))c.on(h.$options.getOption("updateOn"),function(a){h.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(){h.$touched||(a.$$phase?b.$evalAsync(g):b.$apply(g))})}}}}}],Pb,ah=/(\s+|^)default(\s+|$)/;Bc.prototype={getOption:function(a){return this.$$options[a]},createChild:function(a){var b=
!1;a=R({},a);q(a,function(d,c){"$inherit"===d?"*"===c?b=!0:(a[c]=this.$$options[c],"updateOn"===c&&(a.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===c&&(a.updateOnDefault=!1,a[c]=S(d.replace(ah,function(){a.updateOnDefault=!0;return" "})))},this);b&&(delete a["*"],be(a,this.$$options));be(a,Pb.$$options);return new Bc(a)}};Pb=new Bc({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var gf=function(){function a(a,d){this.$$attrs=a;this.$$scope=
d}a.$inject=["$attrs","$scope"];a.prototype={$onInit:function(){var a=this.parentCtrl?this.parentCtrl.$options:Pb,d=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=a.createChild(d)}};return{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},Te=Qa({terminal:!0,priority:1E3}),bh=M("ngOptions"),ch=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
af=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!q&&sa(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var n=a.match(ch);if(!n)throw bh("iexp",a,ya(b));var p=n[5]||n[7],q=n[6];a=/ as /.test(n[0])&&n[1];var s=n[9];b=d(n[2]?n[1]:p);var v=a&&d(a)||b,u=s&&d(s),w=s?function(a,b){return u(c,b)}:function(a){return Pa(a)},
x=function(a,b){return w(a,B(a,b))},t=d(n[2]||n[1]),z=d(n[3]||""),A=d(n[4]||""),K=d(n[8]),I={},B=q?function(a,b){I[q]=b;I[p]=a;return I}:function(a){I[p]=a;return I};return{trackBy:s,getTrackByValue:x,getWatchables:d(K,function(a){var b=[];a=a||[];for(var d=f(a),e=d.length,g=0;g<e;g++){var h=a===d?g:d[g],l=a[h],h=B(l,h),l=w(l,h);b.push(l);if(n[2]||n[1])l=t(c,h),b.push(l);n[4]&&(h=A(c,h),b.push(h))}return b}),getOptions:function(){for(var a=[],b={},d=K(c)||[],g=f(d),h=g.length,n=0;n<h;n++){var p=d===
g?n:g[n],q=B(d[p],p),r=v(c,q),p=w(r,q),u=t(c,q),I=z(c,q),q=A(c,q),r=new e(p,r,u,I,q);a.push(r);b[p]=r}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[x(a)]},getViewValueFromOption:function(a){return s?xa(a.viewValue):a.viewValue}}}}}var f=z.document.createElement("option"),e=z.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=w},post:function(d,h,k,l){function m(a){var b=(a=t.getOptionFromViewValue(a))&&
a.element;b&&!b.selected&&(b.selected=!0);return a}function n(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);b.value=a.selectValue}function p(){var a=t&&r.readValue();if(t)for(var b=t.items.length-1;0<=b;b--){var c=t.items[b];v(c.group)?Eb(c.element.parentNode):Eb(c.element)}t=y.getOptions();var d={};z&&h.prepend(r.emptyOption);t.items.forEach(function(a){var b;if(v(a.group)){b=d[a.group];b||(b=e.cloneNode(!1),A.appendChild(b),b.label=null===a.group?
"null":a.group,d[a.group]=b);var c=f.cloneNode(!1)}else b=A,c=f.cloneNode(!1);b.appendChild(c);n(a,c)});h[0].appendChild(A);s.$render();s.$isEmpty(a)||(b=r.readValue(),(y.trackBy||w?qa(a,b):a===b)||(s.$setViewValue(b),s.$render()))}var r=l[0],s=l[1],w=k.multiple;l=0;for(var u=h.children(),x=u.length;l<x;l++)if(""===u[l].value){r.hasEmptyOption=!0;r.emptyOption=u.eq(l);break}var z=!!r.emptyOption;D(f.cloneNode(!1)).val("?");var t,y=c(k.ngOptions,h,d),A=b[0].createDocumentFragment();r.generateUnknownOptionValue=
function(a){return"?"};w?(r.writeValue=function(a){var b=a&&a.map(m)||[];t.items.forEach(function(a){a.element.selected&&-1===Array.prototype.indexOf.call(b,a)&&(a.element.selected=!1)})},r.readValue=function(){var a=h.val()||[],b=[];q(a,function(a){(a=t.selectValueMap[a])&&!a.disabled&&b.push(t.getViewValueFromOption(a))});return b},y.trackBy&&d.$watchCollection(function(){if(C(s.$viewValue))return s.$viewValue.map(function(a){return y.getTrackByValue(a)})},function(){s.$render()})):(r.writeValue=
function(a){var b=t.selectValueMap[h.val()],c=t.getOptionFromViewValue(a);b&&b.element.removeAttribute("selected");c?(h[0].value!==c.selectValue&&(r.removeUnknownOption(),r.unselectEmptyOption(),h[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):z?r.selectEmptyOption():r.unknownOption.parent().length?r.updateUnknownOption(a):r.renderUnknownOption(a)},r.readValue=function(){var a=t.selectValueMap[h.val()];return a&&!a.disabled?(r.unselectEmptyOption(),r.removeUnknownOption(),
t.getViewValueFromOption(a)):null},y.trackBy&&d.$watch(function(){return y.getTrackByValue(s.$viewValue)},function(){s.$render()}));z&&(r.emptyOption.remove(),a(r.emptyOption)(d),8===r.emptyOption[0].nodeType?(r.hasEmptyOption=!1,r.registerOption=function(a,b){""===b.val()&&(r.hasEmptyOption=!0,r.emptyOption=b,r.emptyOption.removeClass("ng-scope"),s.$render(),b.on("$destroy",function(){r.hasEmptyOption=!1;r.emptyOption=void 0}))}):r.emptyOption.removeClass("ng-scope"));h.empty();p();d.$watchCollection(y.getWatchables,
p)}}}}],Ue=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,f=/^when(Minus)?(.+)$/;return{link:function(e,g,h){function k(a){g.text(a||"")}var l=h.count,m=h.$attr.when&&g.attr(h.$attr.when),n=h.offset||0,p=e.$eval(m)||{},r={},s=b.startSymbol(),v=b.endSymbol(),u=s+l+"-"+n+v,H=$.noop,y;q(h,function(a,b){var c=f.exec(b);c&&(c=(c[1]?"-":"")+P(c[2]),p[c]=g.attr(h.$attr[b]))});q(p,function(a,d){r[d]=b(a.replace(c,u))});e.$watch(l,function(b){var c=parseFloat(b),f=da(c);f||c in p||(c=a.pluralCat(c-
n));c===y||f&&da(y)||(H(),f=r[c],x(f)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+m),H=w,k()):H=e.$watch(f,k),y=c)})}}}],Ve=["$parse","$animate","$compile",function(a,b,d){var c=M("ngRepeat"),f=function(a,b,c,d,f,m,n){a[c]=d;f&&(a[f]=m);a.$index=b;a.$first=0===b;a.$last=b===n-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(e,g){var h=g.ngRepeat,k=d.$$createComment("end ngRepeat",
h),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw c("iexp",h);var m=l[1],n=l[2],p=l[3],r=l[4],l=m.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);if(!l)throw c("iidexp",m);var s=l[3]||l[1],v=l[2];if(p&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(p)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(p)))throw c("badident",p);var u,w,x,t,y={$id:Pa};r?u=a(r):(x=function(a,b){return Pa(b)},
t=function(a){return a});return function(a,d,e,g,l){u&&(w=function(b,c,d){v&&(y[v]=b);y[s]=c;y.$index=d;return u(a,y)});var m=W();a.$watchCollection(n,function(e){var g,n,r=d[0],u,y=W(),z,D,E,B,F,C,I;p&&(a[p]=e);if(sa(e))F=e,n=w||x;else for(I in n=w||t,F=[],e)ua.call(e,I)&&"$"!==I.charAt(0)&&F.push(I);z=F.length;I=Array(z);for(g=0;g<z;g++)if(D=e===F?g:F[g],E=e[D],B=n(D,E,g),m[B])C=m[B],delete m[B],y[B]=C,I[g]=C;else{if(y[B])throw q(I,function(a){a&&a.scope&&(m[a.id]=a)}),c("dupes",h,B,E);I[g]={id:B,
scope:void 0,clone:void 0};y[B]=!0}for(u in m){C=m[u];B=tb(C.clone);b.leave(B);if(B[0].parentNode)for(g=0,n=B.length;g<n;g++)B[g].$$NG_REMOVED=!0;C.scope.$destroy()}for(g=0;g<z;g++)if(D=e===F?g:F[g],E=e[D],C=I[g],C.scope){u=r;do u=u.nextSibling;while(u&&u.$$NG_REMOVED);C.clone[0]!==u&&b.move(tb(C.clone),null,r);r=C.clone[C.clone.length-1];f(C.scope,g,s,E,v,D,z)}else l(function(a,c){C.scope=c;var d=k.cloneNode(!1);a[a.length++]=d;b.enter(a,null,r);r=d;C.clone=a;y[C.id]=C;f(C.scope,g,s,E,v,D,z)});m=
y})}}}}],We=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Pe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Xe=Qa(function(a,b,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&q(d,function(a,c){b.css(c,"")});a&&b.css(a)},
!0)}),Ye=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,f,e){var g=[],h=[],k=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};d.$watch(f.ngSwitch||f.on,function(c){for(var d,f;k.length;)a.cancel(k.pop());d=0;for(f=l.length;d<f;++d){var s=tb(h[d].clone);l[d].$destroy();(k[d]=a.leave(s)).done(m(k,d))}h.length=0;l.length=0;(g=e.cases["!"+c]||e.cases["?"])&&q(g,function(c){c.transclude(function(d,e){l.push(e);
var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],Ze=Qa({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,f){a=d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b-1]!==a});q(a,function(a){c.cases["!"+a]=c.cases["!"+a]||[];c.cases["!"+a].push({transclude:f,element:b})})}}),$e=Qa({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,
b,d,c,f){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:f,element:b})}}),dh=M("ngTransclude"),bf=["$compile",function(a){return{restrict:"EAC",terminal:!0,compile:function(b){var d=a(b.contents());b.empty();return function(a,b,e,g,h){function k(){d(a,function(a){b.append(a)})}if(!h)throw dh("orphan",ya(b));e.ngTransclude===e.$attr.ngTransclude&&(e.ngTransclude="");e=e.ngTransclude||e.ngTranscludeSlot;h(function(a,c){var d;if(d=a.length)a:{d=0;for(var e=a.length;d<e;d++){var g=a[d];if(g.nodeType!==
Ja||g.nodeValue.trim()){d=!0;break a}}d=void 0}d?b.append(a):(k(),c.$destroy())},null,e);e&&!h.isSlotFilled(e)&&k()}}}}],De=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"===d.type&&a.put(d.id,b[0].text)}}}],eh={$setViewValue:w,$render:w},fh=["$element","$scope",function(a,b){function d(){h||(h=!0,b.$$postDigest(function(){h=!1;e.ngModelCtrl.$render()}))}function c(a){k||(k=!0,b.$$postDigest(function(){b.$$destroyed||(k=!1,e.ngModelCtrl.$setViewValue(e.readValue()),
a&&e.ngModelCtrl.$render())}))}function f(a){a.prop("selected",!0);a.attr("selected",!0)}var e=this,g=new Gb;e.selectValueMap={};e.ngModelCtrl=eh;e.multiple=!1;e.unknownOption=D(z.document.createElement("option"));e.hasEmptyOption=!1;e.emptyOption=void 0;e.renderUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);a.prepend(e.unknownOption);f(e.unknownOption);a.val(b)};e.updateUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);f(e.unknownOption);
a.val(b)};e.generateUnknownOptionValue=function(a){return"? "+Pa(a)+" ?"};e.removeUnknownOption=function(){e.unknownOption.parent()&&e.unknownOption.remove()};e.selectEmptyOption=function(){e.emptyOption&&(a.val(""),f(e.emptyOption))};e.unselectEmptyOption=function(){e.hasEmptyOption&&e.emptyOption.removeAttr("selected")};b.$on("$destroy",function(){e.renderUnknownOption=w});e.readValue=function(){var b=a.val(),b=b in e.selectValueMap?e.selectValueMap[b]:b;return e.hasOption(b)?b:null};e.writeValue=
function(b){var c=a[0].options[a[0].selectedIndex];c&&c.removeAttribute("selected");e.hasOption(b)?(e.removeUnknownOption(),c=Pa(b),a.val(c in e.selectValueMap?c:b),f(D(a[0].options[a[0].selectedIndex]))):null==b&&e.emptyOption?(e.removeUnknownOption(),e.selectEmptyOption()):e.unknownOption.parent().length?e.updateUnknownOption(b):e.renderUnknownOption(b)};e.addOption=function(a,b){if(8!==b[0].nodeType){La(a,'"option value"');""===a&&(e.hasEmptyOption=!0,e.emptyOption=b);var c=g.get(a)||0;g.set(a,
c+1);d()}};e.removeOption=function(a){var b=g.get(a);b&&(1===b?(g.delete(a),""===a&&(e.hasEmptyOption=!1,e.emptyOption=void 0)):g.set(a,b-1))};e.hasOption=function(a){return!!g.get(a)};var h=!1,k=!1;e.registerOption=function(a,b,f,g,h){if(f.$attr.ngValue){var k,q=NaN;f.$observe("value",function(a){var d,f=b.prop("selected");v(q)&&(e.removeOption(k),delete e.selectValueMap[q],d=!0);q=Pa(a);k=a;e.selectValueMap[q]=a;e.addOption(a,b);b.attr("value",q);d&&f&&c()})}else g?f.$observe("value",function(a){e.readValue();
var d,f=b.prop("selected");v(k)&&(e.removeOption(k),d=!0);k=a;e.addOption(a,b);d&&f&&c()}):h?a.$watch(h,function(a,d){f.$set("value",a);var g=b.prop("selected");d!==a&&e.removeOption(d);e.addOption(a,b);d&&g&&c()}):e.addOption(f.value,b);f.$observe("disabled",function(a){if("true"===a||a&&b.prop("selected"))e.multiple?c(!0):(e.ngModelCtrl.$setViewValue(null),e.ngModelCtrl.$render())});b.on("$destroy",function(){var a=e.readValue(),b=f.value;e.removeOption(b);d();(e.multiple&&a&&-1!==a.indexOf(b)||
a===b)&&c(!0)})}}],Ee=function(){return{restrict:"E",require:["select","?ngModel"],controller:fh,priority:1,link:{pre:function(a,b,d,c){var f=c[0],e=c[1];if(e){if(f.ngModelCtrl=e,b.on("change",function(){f.removeUnknownOption();a.$apply(function(){e.$setViewValue(f.readValue())})}),d.multiple){f.multiple=!0;f.readValue=function(){var a=[];q(b.find("option"),function(b){b.selected&&!b.disabled&&(b=b.value,a.push(b in f.selectValueMap?f.selectValueMap[b]:b))});return a};f.writeValue=function(a){q(b.find("option"),
function(b){b.selected=!!a&&(-1!==Array.prototype.indexOf.call(a,b.value)||-1!==Array.prototype.indexOf.call(a,f.selectValueMap[b.value]))})};var g,h=NaN;a.$watch(function(){h!==e.$viewValue||qa(g,e.$viewValue)||(g=ra(e.$viewValue),e.$render());h=e.$viewValue});e.$isEmpty=function(a){return!a||0===a.length}}}else f.registerOption=w},post:function(a,b,d,c){var f=c[1];if(f){var e=c[0];f.$render=function(){e.writeValue(f.$viewValue)}}}}}},Fe=["$interpolate",function(a){return{restrict:"E",priority:100,
compile:function(b,d){var c,f;v(d.ngValue)||(v(d.value)?c=a(d.value,!0):(f=a(b.text(),!0))||d.$set("value",b.text()));return function(a,b,d){var k=b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&k.registerOption(a,b,d,c,f)}}}}],Tc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},Sc=function(){return{restrict:"A",
require:"?ngModel",link:function(a,b,d,c){if(c){var f,e=d.ngPattern||d.pattern;d.$observe("pattern",function(a){E(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw M("ngPattern")("noregexp",e,a,ya(b));f=a||void 0;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||x(f)||f.test(b)}}}}},Vc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var f=-1;d.$observe("maxlength",function(a){a=Z(a);f=da(a)?-1:a;c.$validate()});c.$validators.maxlength=
function(a,b){return 0>f||c.$isEmpty(b)||b.length<=f}}}}},Uc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var f=0;d.$observe("minlength",function(a){f=Z(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=f}}}}};z.angular.bootstrap?z.console&&console.log("WARNING: Tried to load angular more than once."):(ve(),ye($),$.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-
b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),
WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,
c){var f=a|0,e=c;void 0===e&&(e=Math.min(b(a),3));Math.pow(10,e);return 1==f&&0==e?"one":"other"}})}]),D(function(){qe(z.document,Mc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
//# sourceMappingURL=angular.min.js.map
;
/*
 AngularJS v1.6.2
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(J,d){'use strict';function A(d){k&&d.get("$route")}function B(t,u,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,f,b,c,m){function v(){l&&(g.cancel(l),l=null);n&&(n.$destroy(),n=null);p&&(l=g.leave(p),l.done(function(a){!1!==a&&(l=null)}),p=null)}function E(){var b=t.current&&t.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),c=t.current;p=m(b,function(b){g.enter(b,null,p||f).done(function(b){!1===b||!d.isDefined(w)||w&&!a.$eval(w)||u()});
v()});n=c.scope=b;n.$emit("$viewContentLoaded");n.$eval(k)}else v()}var n,p,l,w=b.autoscroll,k=b.onload||"";a.$on("$routeChangeSuccess",E);E()}}}function C(d,k,g){return{restrict:"ECA",priority:-400,link:function(a,f){var b=g.current,c=b.locals;f.html(c.$template);var m=d(f.contents());if(b.controller){c.$scope=a;var v=k(b.controller,c);b.controllerAs&&(a[b.controllerAs]=v);f.data("$ngControllerController",v);f.children().data("$ngControllerController",v)}a[b.resolveAs||"$resolve"]=c;m(a)}}}var x,
y,F,G,z=d.module("ngRoute",[]).provider("$route",function(){function t(a,f){return d.extend(Object.create(a),f)}function u(a,d){var b=d.caseInsensitiveMatch,c={originalPath:a,regexp:a},g=c.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)(\*\?|[?*])?/g,function(a,b,d,c){a="?"===c||"*?"===c?"?":null;c="*"===c||"*?"===c?"*":null;g.push({name:d,optional:!!a});b=b||"";return""+(a?"":b)+"(?:"+(a?b:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([/$*])/g,"\\$1");c.regexp=new RegExp("^"+
a+"$",b?"i":"");return c}x=d.isArray;y=d.isObject;F=d.isDefined;G=d.noop;var g={};this.when=function(a,f){var b;b=void 0;if(x(f)){b=b||[];for(var c=0,m=f.length;c<m;c++)b[c]=f[c]}else if(y(f))for(c in b=b||{},f)if("$"!==c.charAt(0)||"$"!==c.charAt(1))b[c]=f[c];b=b||f;d.isUndefined(b.reloadOnSearch)&&(b.reloadOnSearch=!0);d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);g[a]=d.extend(b,a&&u(a,b));a&&(c="/"===a[a.length-1]?a.substr(0,a.length-1):a+"/",g[c]=d.extend({redirectTo:a},
u(c,b)));return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};k=!0;this.eagerInstantiationEnabled=function(a){return F(a)?(k=a,this):k};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce","$browser",function(a,f,b,c,m,k,u,n){function p(e){var h=q.current;(y=(s=C())&&h&&s.$$route===h.$$route&&d.equals(s.pathParams,h.pathParams)&&!s.reloadOnSearch&&!D)||!h&&!s||a.$broadcast("$routeChangeStart",
s,h).defaultPrevented&&e&&e.preventDefault()}function l(){var e=q.current,h=s;if(y)e.params=h.params,d.copy(e.params,b),a.$broadcast("$routeUpdate",e);else if(h||e){D=!1;q.current=h;var H=c.resolve(h);n.$$incOutstandingRequestCount();H.then(w).then(z).then(function(c){return c&&H.then(A).then(function(c){h===q.current&&(h&&(h.locals=c,d.copy(h.params,b)),a.$broadcast("$routeChangeSuccess",h,e))})}).catch(function(b){h===q.current&&a.$broadcast("$routeChangeError",h,e,b)}).finally(function(){n.$$completeOutstandingRequest(G)})}}
function w(e){var a={route:e,hasRedirection:!1};if(e)if(e.redirectTo)if(d.isString(e.redirectTo))a.path=x(e.redirectTo,e.params),a.search=e.params,a.hasRedirection=!0;else{var b=f.path(),g=f.search();e=e.redirectTo(e.pathParams,b,g);d.isDefined(e)&&(a.url=e,a.hasRedirection=!0)}else if(e.resolveRedirectTo)return c.resolve(m.invoke(e.resolveRedirectTo)).then(function(e){d.isDefined(e)&&(a.url=e,a.hasRedirection=!0);return a});return a}function z(a){var b=!0;if(a.route!==q.current)b=!1;else if(a.hasRedirection){var d=
f.url(),c=a.url;c?f.url(c).replace():c=f.path(a.path).search(a.search).replace().url();c!==d&&(b=!1)}return b}function A(a){if(a){var b=d.extend({},a.resolve);d.forEach(b,function(a,e){b[e]=d.isString(a)?m.get(a):m.invoke(a,null,null,e)});a=B(a);d.isDefined(a)&&(b.$template=a);return c.all(b)}}function B(a){var b,c;d.isDefined(b=a.template)?d.isFunction(b)&&(b=b(a.params)):d.isDefined(c=a.templateUrl)&&(d.isFunction(c)&&(c=c(a.params)),d.isDefined(c)&&(a.loadedTemplateUrl=u.valueOf(c),b=k(c)));return b}
function C(){var a,b;d.forEach(g,function(c,g){var r;if(r=!b){var k=f.path();r=c.keys;var m={};if(c.regexp)if(k=c.regexp.exec(k)){for(var l=1,n=k.length;l<n;++l){var p=r[l-1],q=k[l];p&&q&&(m[p.name]=q)}r=m}else r=null;else r=null;r=a=r}r&&(b=t(c,{params:d.extend({},f.search(),a),pathParams:a}),b.$$route=c)});return b||g[null]&&t(g[null],{params:{},pathParams:{}})}function x(a,b){var c=[];d.forEach((a||"").split(":"),function(a,d){if(0===d)c.push(a);else{var e=a.match(/(\w+)(?:[?*])?(.*)/),f=e[1];
c.push(b[f]);c.push(e[2]||"");delete b[f]}});return c.join("")}var D=!1,s,y,q={routes:g,reload:function(){D=!0;var b={defaultPrevented:!1,preventDefault:function(){this.defaultPrevented=!0;D=!1}};a.$evalAsync(function(){p(b);b.defaultPrevented||l()})},updateParams:function(a){if(this.current&&this.current.$$route)a=d.extend({},this.current.params,a),f.path(x(this.current.$$route.originalPath,a)),f.search(a);else throw I("norout");}};a.$on("$locationChangeStart",p);a.$on("$locationChangeSuccess",l);
return q}]}).run(A),I=d.$$minErr("ngRoute"),k;A.$inject=["$injector"];z.provider("$routeParams",function(){this.$get=function(){return{}}});z.directive("ngView",B);z.directive("ngView",C);B.$inject=["$route","$anchorScroll","$animate"];C.$inject=["$compile","$controller","$route"]})(window,window.angular);
//# sourceMappingURL=angular-route.min.js.map
;
/*
 AngularJS v1.6.2
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(R,y){'use strict';function Ea(a,b,c){if(!a)throw Oa("areq",b||"?",c||"required");return a}function Fa(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;W(a)&&(a=a.join(" "));W(b)&&(b=b.join(" "));return a+" "+b}function Pa(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function X(a,b,c){var d="";a=W(a)?a:a&&F(a)&&a.length?a.split(/\s+/):[];s(a,function(a,e){a&&0<a.length&&(d+=0<e?" ":"",d+=c?b+a:a+b)});return d}function Ga(a){if(a instanceof E)switch(a.length){case 0:return a;
case 1:if(1===a[0].nodeType)return a;break;default:return E(ua(a))}if(1===a.nodeType)return E(a)}function ua(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1===c.nodeType)return c}}function Qa(a,b,c){s(b,function(b){a.addClass(b,c)})}function Ra(a,b,c){s(b,function(b){a.removeClass(b,c)})}function Y(a){return function(b,c){c.addClass&&(Qa(a,b,c.addClass),c.addClass=null);c.removeClass&&(Ra(a,b,c.removeClass),c.removeClass=null)}}function na(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
P;a.domOperation=function(){a.$$domOperationFired=!0;b();b=P};a.$$prepared=!0}return a}function ha(a,b){Ha(a,b);Ia(a,b)}function Ha(a,b){b.from&&(a.css(b.from),b.from=null)}function Ia(a,b){b.to&&(a.css(b.to),b.to=null)}function U(a,b,c){var d=b.options||{};c=c.options||{};var f=(d.addClass||"")+" "+(c.addClass||""),e=(d.removeClass||"")+" "+(c.removeClass||"");a=Sa(a.attr("class"),f,e);c.preparationClasses&&(d.preparationClasses=Z(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);
f=d.domOperation!==P?d.domOperation:null;va(d,c);f&&(d.domOperation=f);d.addClass=a.addClass?a.addClass:null;d.removeClass=a.removeClass?a.removeClass:null;b.addClass=d.addClass;b.removeClass=d.removeClass;return d}function Sa(a,b,c){function d(a){F(a)&&(a=a.split(" "));var b={};s(a,function(a){a.length&&(b[a]=!0)});return b}var f={};a=d(a);b=d(b);s(b,function(a,b){f[b]=1});c=d(c);s(c,function(a,b){f[b]=1===f[b]?null:-1});var e={addClass:"",removeClass:""};s(f,function(b,c){var d,f;1===b?(d="addClass",
f=!a[c]||a[c+"-remove"]):-1===b&&(d="removeClass",f=a[c]||a[c+"-add"]);f&&(e[d].length&&(e[d]+=" "),e[d]+=c)});return e}function Q(a){return a instanceof E?a[0]:a}function Ta(a,b,c){var d="";b&&(d=X(b,"ng-",!0));c.addClass&&(d=Z(d,X(c.addClass,"-add")));c.removeClass&&(d=Z(d,X(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function oa(a,b){var c=b?"-"+b+"s":"";ka(a,[la,c]);return[la,c]}function wa(a,b){var c=b?"paused":"",d=$+"PlayState";ka(a,[d,c]);return[d,c]}function ka(a,
b){a.style[b[0]]=b[1]}function Z(a,b){return a?b?a+" "+b:a:b}function Ja(a,b,c){var d=Object.create(null),f=a.getComputedStyle(b)||{};s(c,function(a,b){var c=f[a];if(c){var G=c.charAt(0);if("-"===G||"+"===G||0<=G)c=Ua(c);0===c&&(c=null);d[b]=c}});return d}function Ua(a){var b=0;a=a.split(/\s*,\s*/);s(a,function(a){"s"===a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function xa(a){return 0===a||null!=a}function Ka(a,b){var c=S,d=a+"s";b?c+="Duration":
d+=" linear all";return[c,d]}function La(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ma(a,b,c){s(c,function(c){a[c]=ya(a[c])?a[c]:b.style.getPropertyValue(c)})}var S,za,$,Aa;void 0===R.ontransitionend&&void 0!==R.onwebkittransitionend?(S="WebkitTransition",za="webkitTransitionEnd transitionend"):(S="transition",za=
"transitionend");void 0===R.onanimationend&&void 0!==R.onwebkitanimationend?($="WebkitAnimation",Aa="webkitAnimationEnd animationend"):($="animation",Aa="animationend");var pa=$+"Delay",Ba=$+"Duration",la=S+"Delay",Na=S+"Duration",Oa=y.$$minErr("ng"),Va={transitionDuration:Na,transitionDelay:la,transitionProperty:S+"Property",animationDuration:Ba,animationDelay:pa,animationIterationCount:$+"IterationCount"},Wa={transitionDuration:Na,transitionDelay:la,animationDuration:Ba,animationDelay:pa},Ca,va,
s,W,ya,da,Da,aa,F,N,E,P;y.module("ngAnimate",[],function(){P=y.noop;Ca=y.copy;va=y.extend;E=y.element;s=y.forEach;W=y.isArray;F=y.isString;aa=y.isObject;N=y.isUndefined;ya=y.isDefined;Da=y.isFunction;da=y.isElement}).directive("ngAnimateSwap",["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,d,f,e,p){var K,G;b.$watchCollection(f.ngAnimateSwap||f["for"],function(f){K&&a.leave(K);G&&(G.$destroy(),G=null);if(f||0===f)G=b.$new(),p(G,
function(b){K=b;a.enter(b,null,d)})})}}}]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,c,d){function f(a){c.data("$$ngAnimateChildren","on"===a||"true"===a)}var e=d.ngAnimateChildren;F(e)&&0===e.length?c.data("$$ngAnimateChildren",!0):(f(a(e)(b)),d.$observe("ngAnimateChildren",f))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),p=0;p<b.length;p++)b[p]();f||a(function(){f||c()})}}var d,
f;d=b.queue=[];b.waitUntilQuiet=function(b){f&&f();f=a(function(){f=null;b();c()})};return b}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);s(a,function(a){b[a]=!0});return b}function c(a,c){if(a&&c){var d=b(c);return a.split(" ").some(function(a){return d[a]})}}function d(a,b,c){return e[a].some(function(a){return a(b,c)})}function f(a,b){var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?
c&&d:c||d}var e=this.rules={skip:[],cancel:[],join:[]};e.join.push(function(a,b){return!a.structural&&f(a)});e.skip.push(function(a,b){return!a.structural&&!f(a)});e.skip.push(function(a,b){return"leave"===b.event&&a.structural});e.skip.push(function(a,b){return b.structural&&2===b.state&&!a.structural});e.cancel.push(function(a,b){return b.structural&&a.structural});e.cancel.push(function(a,b){return 2===b.state&&a.structural});e.cancel.push(function(a,b){if(b.structural)return!1;var d=a.addClass,
f=a.removeClass,e=b.addClass,qa=b.removeClass;return N(d)&&N(f)||N(e)&&N(qa)?!1:c(d,qa)||c(f,e)});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$Map","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow","$$isDocumentHidden",function(b,c,e,n,z,qa,J,u,H,k,O){function L(){var a=!1;return function(b){a?b():c.$$postDigest(function(){a=!0;b()})}}function A(a,b,c){var g=[],d=h[c];d&&s(d,function(d){w.call(d.node,b)?g.push(d.callback):"leave"===c&&w.call(d.node,a)&&
g.push(d.callback)});return g}function B(a,b,c){var g=ua(b);return a.filter(function(a){return!(a.node===g&&(!c||a.callback===c))})}function q(a,h,v){function q(a,c,g,d){G(function(){var a=A(ta,k,c);a.length?b(function(){s(a,function(a){a(e,g,d)});"close"!==g||k.parentNode||ra.off(k)}):"close"!==g||k.parentNode||ra.off(k)});a.progress(c,g,d)}function B(a){var b=e,c=m;c.preparationClasses&&(b.removeClass(c.preparationClasses),c.preparationClasses=null);c.activeClasses&&(b.removeClass(c.activeClasses),
c.activeClasses=null);D(e,m);ha(e,m);m.domOperation();t.complete(!a)}var m=Ca(v),e=Ga(a),k=Q(e),ta=k&&k.parentNode,m=na(m),t=new J,G=L();W(m.addClass)&&(m.addClass=m.addClass.join(" "));m.addClass&&!F(m.addClass)&&(m.addClass=null);W(m.removeClass)&&(m.removeClass=m.removeClass.join(" "));m.removeClass&&!F(m.removeClass)&&(m.removeClass=null);m.from&&!aa(m.from)&&(m.from=null);m.to&&!aa(m.to)&&(m.to=null);if(!k)return B(),t;v=[k.getAttribute("class"),m.addClass,m.removeClass].join(" ");if(!Xa(v))return B(),
t;var n=0<=["enter","move","leave"].indexOf(h),w=O(),u=!g||w||ga.get(k);v=!u&&x.get(k)||{};var H=!!v.state;u||H&&1===v.state||(u=!M(k,ta,h));if(u)return w&&q(t,h,"start"),B(),w&&q(t,h,"close"),t;n&&sa(k);w={structural:n,element:e,event:h,addClass:m.addClass,removeClass:m.removeClass,close:B,options:m,runner:t};if(H){if(d("skip",w,v)){if(2===v.state)return B(),t;U(e,v,w);return v.runner}if(d("cancel",w,v))if(2===v.state)v.runner.end();else if(v.structural)v.close();else return U(e,v,w),v.runner;else if(d("join",
w,v))if(2===v.state)U(e,w,{});else return Ta(e,n?h:null,m),h=w.event=v.event,m=U(e,v,w),v.runner}else U(e,w,{});(H=w.structural)||(H="animate"===w.event&&0<Object.keys(w.options.to||{}).length||f(w));if(!H)return B(),l(k),t;var z=(v.counter||0)+1;w.counter=z;I(k,1,w);c.$$postDigest(function(){e=Ga(a);var b=x.get(k),c=!b,b=b||{},g=0<(e.parent()||[]).length&&("animate"===b.event||b.structural||f(b));if(c||b.counter!==z||!g){c&&(D(e,m),ha(e,m));if(c||n&&b.event!==h)m.domOperation(),t.end();g||l(k)}else h=
!b.structural&&f(b,!0)?"setClass":b.event,I(k,2),b=qa(e,h,b.options),t.setHost(b),q(t,h,"start",{}),b.done(function(a){B(!a);(a=x.get(k))&&a.counter===z&&l(k);q(t,h,"close",{})})});return t}function sa(a){a=a.querySelectorAll("[data-ng-animate]");s(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate"),10),c=x.get(a);if(c)switch(b){case 2:c.runner.end();case 1:x.delete(a)}})}function l(a){a.removeAttribute("data-ng-animate");x.delete(a)}function M(a,b,c){c=n[0].body;var g=Q(e),d=a===c||"HTML"===
a.nodeName,h=a===g,f=!1,k=ga.get(a),A;for((a=E.data(a,"$ngAnimatePin"))&&(b=Q(a));b;){h||(h=b===g);if(1!==b.nodeType)break;a=x.get(b)||{};if(!f){var q=ga.get(b);if(!0===q&&!1!==k){k=!0;break}else!1===q&&(k=!1);f=a.structural}if(N(A)||!0===A)a=E.data(b,"$$ngAnimateChildren"),ya(a)&&(A=a);if(f&&!1===A)break;d||(d=b===c);if(d&&h)break;if(!h&&(a=E.data(b,"$ngAnimatePin"))){b=Q(a);continue}b=b.parentNode}return(!f||A)&&!0!==k&&h&&d}function I(a,b,c){c=c||{};c.state=b;a.setAttribute("data-ng-animate",b);
c=(b=x.get(a))?va(b,c):c;x.set(a,c)}var x=new z,ga=new z,g=null,ta=c.$watch(function(){return 0===u.totalPendingRequests},function(a){a&&(ta(),c.$$postDigest(function(){c.$$postDigest(function(){null===g&&(g=!0)})}))}),h=Object.create(null),t=a.classNameFilter(),Xa=t?function(a){return t.test(a)}:function(){return!0},D=Y(H),w=R.Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&16)},ra={on:function(a,b,c){var g=ua(b);h[a]=h[a]||[];h[a].push({node:g,callback:c});
E(b).on("$destroy",function(){x.get(g)||ra.off(a,b,c)})},off:function(a,b,c){if(1!==arguments.length||F(arguments[0])){var g=h[a];g&&(h[a]=1===arguments.length?null:B(g,b,c))}else for(g in b=arguments[0],h)h[g]=B(h[g],b)},pin:function(a,b){Ea(da(a),"element","not an element");Ea(da(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,g){c=c||{};c.domOperation=g;return q(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!g;else if(da(a)){var d=Q(a);1===
c?b=!ga.get(d):ga.set(d,!b)}else b=g=!!a;return b}};return ra}]}]).provider("$$animation",["$animateProvider",function(a){var b=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$Map","$$rAFScheduler",function(a,d,f,e,p,K){function G(a){function b(a){if(a.processed)return a;a.processed=!0;var d=a.domNode,e=d.parentNode;f.set(d,a);for(var q;e;){if(q=f.get(e)){q.processed||(q=b(q));break}e=e.parentNode}(q||c).children.push(a);return a}var c={children:[]},d,f=new p;for(d=
0;d<a.length;d++){var e=a[d];f.set(e.domNode,a[d]={domNode:e.domNode,fn:e.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var f=0,e=[];for(d=0;d<c.length;d++){var k=c[d];0>=a&&(a=f,f=0,b.push(e),e=[]);e.push(k.fn);k.children.forEach(function(a){f++;c.push(a)});a--}e.length&&b.push(e);return b}(c)}var n=[],z=Y(a);return function(p,J,u){function H(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");
var b=[];s(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function k(a){var b=[],c={};s(a,function(a,d){var h=Q(a.element),f=0<=["enter","move"].indexOf(a.event),h=a.structural?H(h):[];if(h.length){var e=f?"to":"from";s(h,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][e]={animationID:d,element:E(a)}})}else b.push(a)});var d={},f={};s(c,function(c,e){var k=c.from,A=c.to;if(k&&A){var q=a[k.animationID],x=a[A.animationID],l=k.animationID.toString();
if(!f[l]){var B=f[l]={structural:!0,beforeStart:function(){q.beforeStart();x.beforeStart()},close:function(){q.close();x.close()},classes:O(q.classes,x.classes),from:q,to:x,anchors:[]};B.classes.length?b.push(B):(b.push(q),b.push(x))}f[l].anchors.push({out:k.element,"in":A.element})}else k=k?k.animationID:A.animationID,A=k.toString(),d[A]||(d[A]=!0,b.push(a[k]))});return b}function O(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var f=a[d];if("ng-"!==f.substring(0,3))for(var e=
0;e<b.length;e++)if(f===b[e]){c.push(f);break}}return c.join(" ")}function L(a){for(var c=b.length-1;0<=c;c--){var d=f.get(b[c])(a);if(d)return d}}function A(a,b){function c(a){(a=a.data("$$animationRunner"))&&a.setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function B(){var a=p.data("$$animationRunner");!a||"leave"===J&&u.$$domOperationFired||a.end()}function q(b){p.off("$destroy",B);p.removeData("$$animationRunner");z(p,u);ha(p,u);u.domOperation();I&&a.removeClass(p,I);
p.removeClass("ng-animate");l.complete(!b)}u=na(u);var sa=0<=["enter","move","leave"].indexOf(J),l=new e({end:function(){q()},cancel:function(){q(!0)}});if(!b.length)return q(),l;p.data("$$animationRunner",l);var M=Fa(p.attr("class"),Fa(u.addClass,u.removeClass)),I=u.tempClasses;I&&(M+=" "+I,u.tempClasses=null);var x;sa&&(x="ng-"+J+"-prepare",a.addClass(p,x));n.push({element:p,classes:M,event:J,structural:sa,options:u,beforeStart:function(){p.addClass("ng-animate");I&&a.addClass(p,I);x&&(a.removeClass(p,
x),x=null)},close:q});p.on("$destroy",B);if(1<n.length)return l;d.$$postDigest(function(){var a=[];s(n,function(b){b.element.data("$$animationRunner")?a.push(b):b.close()});n.length=0;var b=k(a),c=[];s(b,function(a){c.push({domNode:Q(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var b,c=a.close;if((a.anchors?a.from.element||a.to.element:a.element).data("$$animationRunner")){var d=L(a);d&&(b=d.start)}b?(b=b(),b.done(function(a){c(!a)}),A(a,b)):c()}})});K(G(c))});return l}}]}]).provider("$animateCss",
["$animateProvider",function(a){var b=La(),c=La();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,f,e,p,K,G,n,z){function y(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++O))+"-"+a.getAttribute("class")+"-"+b}function J(e,k,q,p){var l;0<b.count(q)&&(l=c.get(q),l||(k=X(k,"-stagger"),f.addClass(e,k),l=Ja(a,e,p),l.animationDuration=Math.max(l.animationDuration,0),l.transitionDuration=
Math.max(l.transitionDuration,0),f.removeClass(e,k),c.put(q,l)));return l||{}}function u(a){L.push(a);n.waitUntilQuiet(function(){b.flush();c.flush();for(var a=K(),d=0;d<L.length;d++)L[d](a);L.length=0})}function H(c,f,e){f=b.get(e);f||(f=Ja(a,c,Va),"infinite"===f.animationIterationCount&&(f.animationIterationCount=1));b.put(e,f);c=f;e=c.animationDelay;f=c.transitionDelay;c.maxDelay=e&&f?Math.max(e,f):e||f;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);
return c}var k=Y(f),O=0,L=[];return function(a,c){function d(){l()}function n(){l(!0)}function l(b){if(!(w||E&&O)){w=!0;O=!1;g.$$skipPreparationClasses||f.removeClass(a,fa);f.removeClass(a,da);wa(h,!1);oa(h,!1);s(t,function(a){h.style[a[0]]=""});k(a,g);ha(a,g);Object.keys(L).length&&s(L,function(a,b){a?h.style.setProperty(b,a):h.style.removeProperty(b)});if(g.onDone)g.onDone();ea&&ea.length&&a.off(ea.join(" "),x);var c=a.data("$$animateCss");c&&(p.cancel(c[0].timer),a.removeData("$$animateCss"));
F&&F.complete(!b)}}function M(a){r.blockTransition&&oa(h,a);r.blockKeyframeAnimation&&wa(h,!!a)}function I(){F=new e({end:d,cancel:n});u(P);l();return{$$willAnimate:!1,start:function(){return F},end:d}}function x(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-Y,0)>=R&&b>=m&&(E=!0,l())}function ga(){function b(){if(!w){M(!1);s(t,function(a){h.style[a[0]]=a[1]});k(a,g);f.addClass(a,da);if(r.recalculateTimingStyles){ma=
h.getAttribute("class")+" "+fa;ja=y(h,ma);C=H(h,ma,ja);ba=C.maxDelay;N=Math.max(ba,0);m=C.maxDuration;if(0===m){l();return}r.hasTransitions=0<C.transitionDuration;r.hasAnimations=0<C.animationDuration}r.applyAnimationDelay&&(ba="boolean"!==typeof g.delay&&xa(g.delay)?parseFloat(g.delay):ba,N=Math.max(ba,0),C.animationDelay=ba,ca=[pa,ba+"s"],t.push(ca),h.style[ca[0]]=ca[1]);R=1E3*N;U=1E3*m;if(g.easing){var d,e=g.easing;r.hasTransitions&&(d=S+"TimingFunction",t.push([d,e]),h.style[d]=e);r.hasAnimations&&
(d=$+"TimingFunction",t.push([d,e]),h.style[d]=e)}C.transitionDuration&&ea.push(za);C.animationDuration&&ea.push(Aa);Y=Date.now();var n=R+1.5*U;d=Y+n;var e=a.data("$$animateCss")||[],q=!0;if(e.length){var I=e[0];(q=d>I.expectedEndTime)?p.cancel(I.timer):e.push(l)}q&&(n=p(c,n,!1),e[0]={timer:n,expectedEndTime:d},e.push(l),a.data("$$animateCss",e));if(ea.length)a.on(ea.join(" "),x);g.to&&(g.cleanupStyles&&Ma(L,h,Object.keys(g.to)),Ia(a,g))}}function c(){var b=a.data("$$animateCss");if(b){for(var d=
1;d<b.length;d++)b[d]();a.removeData("$$animateCss")}}if(!w)if(h.parentNode){var d=function(a){if(E)O&&a&&(O=!1,l());else if(O=!a,C.animationDuration)if(a=wa(h,O),O)t.push(a);else{var b=t,c=b.indexOf(a);0<=a&&b.splice(c,1)}},e=0<aa&&(C.transitionDuration&&0===V.transitionDuration||C.animationDuration&&0===V.animationDuration)&&Math.max(V.animationDelay,V.transitionDelay);e?p(b,Math.floor(e*aa*1E3),!1):b();v.resume=function(){d(!0)};v.pause=function(){d(!1)}}else l()}var g=c||{};g.$$prepared||(g=na(Ca(g)));
var L={},h=Q(a);if(!h||!h.parentNode||!z.enabled())return I();var t=[],K=a.attr("class"),D=Pa(g),w,O,E,F,v,N,R,m,U,Y,ea=[];if(0===g.duration||!G.animations&&!G.transitions)return I();var ia=g.event&&W(g.event)?g.event.join(" "):g.event,Z="",T="";ia&&g.structural?Z=X(ia,"ng-",!0):ia&&(Z=ia);g.addClass&&(T+=X(g.addClass,"-add"));g.removeClass&&(T.length&&(T+=" "),T+=X(g.removeClass,"-remove"));g.applyClassesEarly&&T.length&&k(a,g);var fa=[Z,T].join(" ").trim(),ma=K+" "+fa,da=X(fa,"-active"),K=D.to&&
0<Object.keys(D.to).length;if(!(0<(g.keyframeStyle||"").length||K||fa))return I();var ja,V;0<g.stagger?(D=parseFloat(g.stagger),V={transitionDelay:D,animationDelay:D,transitionDuration:0,animationDuration:0}):(ja=y(h,ma),V=J(h,fa,ja,Wa));g.$$skipPreparationClasses||f.addClass(a,fa);g.transitionStyle&&(D=[S,g.transitionStyle],ka(h,D),t.push(D));0<=g.duration&&(D=0<h.style[S].length,D=Ka(g.duration,D),ka(h,D),t.push(D));g.keyframeStyle&&(D=[$,g.keyframeStyle],ka(h,D),t.push(D));var aa=V?0<=g.staggerIndex?
g.staggerIndex:b.count(ja):0;(ia=0===aa)&&!g.skipBlocking&&oa(h,9999);var C=H(h,ma,ja),ba=C.maxDelay;N=Math.max(ba,0);m=C.maxDuration;var r={};r.hasTransitions=0<C.transitionDuration;r.hasAnimations=0<C.animationDuration;r.hasTransitionAll=r.hasTransitions&&"all"===C.transitionProperty;r.applyTransitionDuration=K&&(r.hasTransitions&&!r.hasTransitionAll||r.hasAnimations&&!r.hasTransitions);r.applyAnimationDuration=g.duration&&r.hasAnimations;r.applyTransitionDelay=xa(g.delay)&&(r.applyTransitionDuration||
r.hasTransitions);r.applyAnimationDelay=xa(g.delay)&&r.hasAnimations;r.recalculateTimingStyles=0<T.length;if(r.applyTransitionDuration||r.applyAnimationDuration)m=g.duration?parseFloat(g.duration):m,r.applyTransitionDuration&&(r.hasTransitions=!0,C.transitionDuration=m,D=0<h.style[S+"Property"].length,t.push(Ka(m,D))),r.applyAnimationDuration&&(r.hasAnimations=!0,C.animationDuration=m,t.push([Ba,m+"s"]));if(0===m&&!r.recalculateTimingStyles)return I();if(null!=g.delay){var ca;"boolean"!==typeof g.delay&&
(ca=parseFloat(g.delay),N=Math.max(ca,0));r.applyTransitionDelay&&t.push([la,ca+"s"]);r.applyAnimationDelay&&t.push([pa,ca+"s"])}null==g.duration&&0<C.transitionDuration&&(r.recalculateTimingStyles=r.recalculateTimingStyles||ia);R=1E3*N;U=1E3*m;g.skipBlocking||(r.blockTransition=0<C.transitionDuration,r.blockKeyframeAnimation=0<C.animationDuration&&0<V.animationDelay&&0===V.animationDuration);g.from&&(g.cleanupStyles&&Ma(L,h,Object.keys(g.from)),Ha(a,g));r.blockTransition||r.blockKeyframeAnimation?
M(m):g.skipBlocking||oa(h,!1);return{$$willAnimate:!0,end:d,start:function(){if(!w)return v={end:d,cancel:n,resume:null,pause:null},F=new e(v),u(ga),F}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,f,e,p,K){function G(a){return a.replace(/\bng-\S+\b/g,"")}function n(a,b){F(a)&&(a=a.split(" "));F(b)&&(b=b.split(" "));
return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function z(c,e,f){function p(a){var b={},c=Q(a).getBoundingClientRect();s(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=u.scrollTop;break;case "left":d+=u.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function K(){var c=G(f.attr("class")||""),d=n(c,l),c=n(l,c),d=a(z,{to:p(f),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function q(){z.remove();e.removeClass("ng-animate-shim");
f.removeClass("ng-animate-shim")}var z=E(Q(e).cloneNode(!0)),l=G(z.attr("class")||"");e.addClass("ng-animate-shim");f.addClass("ng-animate-shim");z.addClass("ng-anchor");H.append(z);var M;c=function(){var c=a(z,{addClass:"ng-anchor-out",delay:!0,from:p(e)});return c.$$willAnimate?c:null}();if(!c&&(M=K(),!M))return q();var I=c||M;return{start:function(){function a(){c&&c.end()}var b,c=I.start();c.done(function(){c=null;if(!M&&(M=K()))return c=M.start(),c.done(function(){c=null;q();b.complete()}),c;
q();b.complete()});return b=new d({end:a,cancel:a})}}}function y(a,b,c,e){var f=J(a,P),p=J(b,P),n=[];s(e,function(a){(a=z(c,a.out,a["in"]))&&n.push(a)});if(f||p||0!==n.length)return{start:function(){function a(){s(b,function(a){a.end()})}var b=[];f&&b.push(f.start());p&&b.push(p.start());s(n,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function J(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=
!0,"leave"===c.event&&(e.onDone=e.domOperation));e.preparationClasses&&(e.event=Z(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!e.animations&&!e.transitions)return P;var u=K[0].body;c=Q(f);var H=E(c.parentNode&&11===c.parentNode.nodeType||u.contains(c)?c:u);return function(a){return a.from&&a.to?y(a.from,a.to,a.classes,a.anchors):J(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function f(c){c=
W(c)?c:c.split(" ");for(var d=[],e={},f=0;f<c.length;f++){var s=c[f],y=a.$$registeredAnimations[s];y&&!e[s]&&(d.push(b.get(y)),e[s]=!0)}return d}var e=Y(d);return function(a,b,d,n){function z(){n.domOperation();e(a,n)}function y(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,k,F,f];break;case "addClass":b=[b,k,f];break;case "removeClass":b=[b,F,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Da(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Da(a))return a;
return P}function J(a,b,d,e,f){var k=[];s(e,function(e){var l=e[f];l&&k.push(function(){var e,f,g=!1,h=function(a){g||(g=!0,(f||P)(a),e.complete(!a))};e=new c({end:function(){h()},cancel:function(){h(!0)}});f=y(l,a,b,d,function(a){h(!1===a)});return e})});return k}function u(a,b,d,e,f){var k=J(a,b,d,e,f);if(0===k.length){var h,l;"beforeSetClass"===f?(h=J(a,"removeClass",d,e,"beforeRemoveClass"),l=J(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=J(a,"removeClass",d,e,"removeClass"),l=J(a,"addClass",
d,e,"addClass"));h&&(k=k.concat(h));l&&(k=k.concat(l))}if(0!==k.length)return function(a){var b=[];k.length&&s(k,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){s(b,function(b){a?b.cancel():b.end()})}}}var H=!1;3===arguments.length&&aa(d)&&(n=d,d=null);n=na(n);d||(d=a.attr("class")||"",n.addClass&&(d+=" "+n.addClass),n.removeClass&&(d+=" "+n.removeClass));var k=n.addClass,F=n.removeClass,L=f(d),A,B;if(L.length){var q,E;"leave"===b?(E="leave",q="afterLeave"):(E="before"+b.charAt(0).toUpperCase()+
b.substr(1),q=b);"enter"!==b&&"move"!==b&&(A=u(a,b,n,L,E));B=u(a,b,n,L,q)}if(A||B){var l;return{$$willAnimate:!0,end:function(){l?l.end():(H=!0,z(),ha(a,n),l=new c,l.complete(!0));return l},start:function(){function b(c){H=!0;z();ha(a,n);l.complete(c)}if(l)return l;l=new c;var d,e=[];A&&e.push(function(a){d=A(a)});e.length?e.push(function(a){z();a(!0)}):z();B&&e.push(function(a){d=B(a)});l.setHost({end:function(){H||((d||P)(void 0),b(void 0))},cancel:function(){H||((d||P)(!0),b(!0))}});c.chain(e,
b);return l}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),p=d(a.to);if(b||p)return{start:function(){function a(){return function(){s(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());p&&d.push(p.start());c.all(d,function(a){f.complete(a)});var f=new c({end:a(),cancel:a()});
return f}}}else return d(a)}}]}])})(window,window.angular);
//# sourceMappingURL=angular-animate.min.js.map
;
/*
 AngularJS v1.6.2
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(n,c){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096<f&&a.warn("Cookie '"+b+"' possibly not set or overflowed because it was too large ("+
f+" > 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,void 0,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore",
["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular);
//# sourceMappingURL=angular-cookies.min.js.map
;
/*
 AngularJS v1.6.2
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(x,n){'use strict';function s(f,k){var e=!1,a=!1;this.ngClickOverrideEnabled=function(b){return n.isDefined(b)?(b&&!a&&(a=!0,t.$$moduleName="ngTouch",k.directive("ngClick",t),f.decorator("ngClickDirective",["$delegate",function(a){if(e)a.shift();else for(var b=a.length-1;0<=b;){if("ngTouch"===a[b].$$moduleName){a.splice(b,1);break}b--}return a}])),e=b,this):e};this.$get=function(){return{ngClickOverrideEnabled:function(){return e}}}}function v(f,k,e){p.directive(f,["$parse","$swipe",function(a,
b){return function(l,u,g){function h(c){if(!d)return!1;var a=Math.abs(c.y-d.y);c=(c.x-d.x)*k;return r&&75>a&&0<c&&30<c&&.3>a/c}var m=a(g[f]),d,r,c=["touch"];n.isDefined(g.ngSwipeDisableMouse)||c.push("mouse");b.bind(u,{start:function(c,a){d=c;r=!0},cancel:function(c){r=!1},end:function(c,d){h(c)&&l.$apply(function(){u.triggerHandler(e);m(l,{$event:d})})}},c)}}])}var p=n.module("ngTouch",[]);p.provider("$touch",s);s.$inject=["$provide","$compileProvider"];p.factory("$swipe",[function(){function f(a){a=
a.originalEvent||a;var b=a.touches&&a.touches.length?a.touches:[a];a=a.changedTouches&&a.changedTouches[0]||b[0];return{x:a.clientX,y:a.clientY}}function k(a,b){var l=[];n.forEach(a,function(a){(a=e[a][b])&&l.push(a)});return l.join(" ")}var e={mouse:{start:"mousedown",move:"mousemove",end:"mouseup"},touch:{start:"touchstart",move:"touchmove",end:"touchend",cancel:"touchcancel"},pointer:{start:"pointerdown",move:"pointermove",end:"pointerup",cancel:"pointercancel"}};return{bind:function(a,b,l){var e,
g,h,m,d=!1;l=l||["mouse","touch","pointer"];a.on(k(l,"start"),function(c){h=f(c);d=!0;g=e=0;m=h;b.start&&b.start(h,c)});var r=k(l,"cancel");if(r)a.on(r,function(c){d=!1;b.cancel&&b.cancel(c)});a.on(k(l,"move"),function(c){if(d&&h){var a=f(c);e+=Math.abs(a.x-m.x);g+=Math.abs(a.y-m.y);m=a;10>e&&10>g||(g>e?(d=!1,b.cancel&&b.cancel(c)):(c.preventDefault(),b.move&&b.move(a,c)))}});a.on(k(l,"end"),function(c){d&&(d=!1,b.end&&b.end(f(c),c))})}}}]);var t=["$parse","$timeout","$rootElement",function(f,k,e){function a(a,
d,b){for(var c=0;c<a.length;c+=2){var g=a[c+1],e=b;if(25>Math.abs(a[c]-d)&&25>Math.abs(g-e))return a.splice(c,c+2),!0}return!1}function b(b){if(!(2500<Date.now()-u)){var d=b.touches&&b.touches.length?b.touches:[b],e=d[0].clientX,d=d[0].clientY;if(!(1>e&&1>d||h&&h[0]===e&&h[1]===d)){h&&(h=null);var c=b.target;"label"===n.lowercase(c.nodeName||c[0]&&c[0].nodeName)&&(h=[e,d]);a(g,e,d)||(b.stopPropagation(),b.preventDefault(),b.target&&b.target.blur&&b.target.blur())}}}function l(a){a=a.touches&&a.touches.length?
a.touches:[a];var b=a[0].clientX,e=a[0].clientY;g.push(b,e);k(function(){for(var a=0;a<g.length;a+=2)if(g[a]===b&&g[a+1]===e){g.splice(a,a+2);break}},2500,!1)}var u,g,h;return function(h,d,k){var c=f(k.ngClick),w=!1,q,p,s,t;d.on("touchstart",function(a){w=!0;q=a.target?a.target:a.srcElement;3===q.nodeType&&(q=q.parentNode);d.addClass("ng-click-active");p=Date.now();a=a.originalEvent||a;a=(a.touches&&a.touches.length?a.touches:[a])[0];s=a.clientX;t=a.clientY});d.on("touchcancel",function(a){w=!1;d.removeClass("ng-click-active")});
d.on("touchend",function(c){var h=Date.now()-p,f=c.originalEvent||c,m=(f.changedTouches&&f.changedTouches.length?f.changedTouches:f.touches&&f.touches.length?f.touches:[f])[0],f=m.clientX,m=m.clientY,v=Math.sqrt(Math.pow(f-s,2)+Math.pow(m-t,2));w&&750>h&&12>v&&(g||(e[0].addEventListener("click",b,!0),e[0].addEventListener("touchstart",l,!0),g=[]),u=Date.now(),a(g,f,m),q&&q.blur(),n.isDefined(k.disabled)&&!1!==k.disabled||d.triggerHandler("click",[c]));w=!1;d.removeClass("ng-click-active")});d.onclick=
function(a){};d.on("click",function(a,b){h.$apply(function(){c(h,{$event:b||a})})});d.on("mousedown",function(a){d.addClass("ng-click-active")});d.on("mousemove mouseup",function(a){d.removeClass("ng-click-active")})}}];v("ngSwipeLeft",-1,"swipeleft");v("ngSwipeRight",1,"swiperight")})(window,window.angular);
//# sourceMappingURL=angular-touch.min.js.map
;
//! moment.js
//! version : 2.9.0
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com
(function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error("Implement me")}}function c(a,b){return Bb.call(a,b)}function d(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function e(a){vb.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}function f(a,b){var c=!0;return o(function(){return c&&(e(a),c=!1),b.apply(this,arguments)},b)}function g(a,b){sc[a]||(e(b),sc[a]=!0)}function h(a,b){return function(c){return r(a.call(this,c),b)}}function i(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function j(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function k(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function l(){}function m(a,b){b!==!1&&H(a),p(this,a),this._d=new Date(+a._d),uc===!1&&(uc=!0,vb.updateOffset(this),uc=!1)}function n(a){var b=A(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=vb.localeData(),this._bubble()}function o(a,b){for(var d in b)c(b,d)&&(a[d]=b[d]);return c(b,"toString")&&(a.toString=b.toString),c(b,"valueOf")&&(a.valueOf=b.valueOf),a}function p(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=b._pf),"undefined"!=typeof b._locale&&(a._locale=b._locale),Kb.length>0)for(c in Kb)d=Kb[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function q(a){return 0>a?Math.ceil(a):Math.floor(a)}function r(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.length<b;)d="0"+d;return(e?c?"+":"":"-")+d}function s(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function t(a,b){var c;return b=M(b,a),a.isBefore(b)?c=s(a,b):(c=s(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function u(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(g(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=vb.duration(c,d),v(this,e,a),this}}function v(a,b,c,d){var e=b._milliseconds,f=b._days,g=b._months;d=null==d?!0:d,e&&a._d.setTime(+a._d+e*c),f&&pb(a,"Date",ob(a,"Date")+f*c),g&&nb(a,ob(a,"Month")+g*c),d&&vb.updateOffset(a,f||g)}function w(a){return"[object Array]"===Object.prototype.toString.call(a)}function x(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function y(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&C(a[d])!==C(b[d]))&&g++;return g+f}function z(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=lc[a]||mc[b]||b}return a}function A(a){var b,d,e={};for(d in a)c(a,d)&&(b=z(d),b&&(e[b]=a[d]));return e}function B(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}vb[b]=function(e,f){var g,h,i=vb._locale[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=vb().utc().set(d,a);return i.call(vb._locale,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function C(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function D(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function E(a,b,c){return jb(vb([a,11,31+b-c]),b,c).week}function F(a){return G(a)?366:365}function G(a){return a%4===0&&a%100!==0||a%400===0}function H(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[Db]<0||a._a[Db]>11?Db:a._a[Eb]<1||a._a[Eb]>D(a._a[Cb],a._a[Db])?Eb:a._a[Fb]<0||a._a[Fb]>24||24===a._a[Fb]&&(0!==a._a[Gb]||0!==a._a[Hb]||0!==a._a[Ib])?Fb:a._a[Gb]<0||a._a[Gb]>59?Gb:a._a[Hb]<0||a._a[Hb]>59?Hb:a._a[Ib]<0||a._a[Ib]>999?Ib:-1,a._pf._overflowDayOfYear&&(Cb>b||b>Eb)&&(b=Eb),a._pf.overflow=b)}function I(b){return null==b._isValid&&(b._isValid=!isNaN(b._d.getTime())&&b._pf.overflow<0&&!b._pf.empty&&!b._pf.invalidMonth&&!b._pf.nullInput&&!b._pf.invalidFormat&&!b._pf.userInvalidated,b._strict&&(b._isValid=b._isValid&&0===b._pf.charsLeftOver&&0===b._pf.unusedTokens.length&&b._pf.bigHour===a)),b._isValid}function J(a){return a?a.toLowerCase().replace("_","-"):a}function K(a){for(var b,c,d,e,f=0;f<a.length;){for(e=J(a[f]).split("-"),b=e.length,c=J(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=L(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&y(e,c,!0)>=b-1)break;b--}f++}return null}function L(a){var b=null;if(!Jb[a]&&Lb)try{b=vb.locale(),require("./locale/"+a),vb.locale(b)}catch(c){}return Jb[a]}function M(a,b){var c,d;return b._isUTC?(c=b.clone(),d=(vb.isMoment(a)||x(a)?+a:+vb(a))-+c,c._d.setTime(+c._d+d),vb.updateOffset(c,!1),c):vb(a).local()}function N(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function O(a){var b,c,d=a.match(Pb);for(b=0,c=d.length;c>b;b++)d[b]=rc[d[b]]?rc[d[b]]:N(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function P(a,b){return a.isValid()?(b=Q(b,a.localeData()),nc[b]||(nc[b]=O(b)),nc[b](a)):a.localeData().invalidDate()}function Q(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Qb.lastIndex=0;d>=0&&Qb.test(a);)a=a.replace(Qb,c),Qb.lastIndex=0,d-=1;return a}function R(a,b){var c,d=b._strict;switch(a){case"Q":return _b;case"DDDD":return bc;case"YYYY":case"GGGG":case"gggg":return d?cc:Tb;case"Y":case"G":case"g":return ec;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?dc:Ub;case"S":if(d)return _b;case"SS":if(d)return ac;case"SSS":if(d)return bc;case"DDD":return Sb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Wb;case"a":case"A":return b._locale._meridiemParse;case"x":return Zb;case"X":return $b;case"Z":case"ZZ":return Xb;case"T":return Yb;case"SSSS":return Vb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?ac:Rb;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Rb;case"Do":return d?b._locale._ordinalParse:b._locale._ordinalParseLenient;default:return c=new RegExp($(Z(a.replace("\\","")),"i"))}}function S(a){a=a||"";var b=a.match(Xb)||[],c=b[b.length-1]||[],d=(c+"").match(jc)||["-",0,0],e=+(60*d[1])+C(d[2]);return"+"===d[0]?e:-e}function T(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[Db]=3*(C(b)-1));break;case"M":case"MM":null!=b&&(e[Db]=C(b)-1);break;case"MMM":case"MMMM":d=c._locale.monthsParse(b,a,c._strict),null!=d?e[Db]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[Eb]=C(b));break;case"Do":null!=b&&(e[Eb]=C(parseInt(b.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=C(b));break;case"YY":e[Cb]=vb.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[Cb]=C(b);break;case"a":case"A":c._meridiem=b;break;case"h":case"hh":c._pf.bigHour=!0;case"H":case"HH":e[Fb]=C(b);break;case"m":case"mm":e[Gb]=C(b);break;case"s":case"ss":e[Hb]=C(b);break;case"S":case"SS":case"SSS":case"SSSS":e[Ib]=C(1e3*("0."+b));break;case"x":c._d=new Date(C(b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=S(b);break;case"dd":case"ddd":case"dddd":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":a=a.substr(0,1);case"gggg":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=C(b));break;case"gg":case"GG":c._w=c._w||{},c._w[a]=vb.parseTwoDigitYear(b)}}function U(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[Cb],jb(vb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[Cb],jb(vb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=kb(d,e,f,h,g),a._a[Cb]=i.year,a._dayOfYear=i.dayOfYear}function V(a){var c,d,e,f,g=[];if(!a._d){for(e=X(a),a._w&&null==a._a[Eb]&&null==a._a[Db]&&U(a),a._dayOfYear&&(f=b(a._a[Cb],e[Cb]),a._dayOfYear>F(f)&&(a._pf._overflowDayOfYear=!0),d=fb(f,0,a._dayOfYear),a._a[Db]=d.getUTCMonth(),a._a[Eb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];24===a._a[Fb]&&0===a._a[Gb]&&0===a._a[Hb]&&0===a._a[Ib]&&(a._nextDay=!0,a._a[Fb]=0),a._d=(a._useUTC?fb:eb).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[Fb]=24)}}function W(a){var b;a._d||(b=A(a._i),a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],V(a))}function X(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function Y(b){if(b._f===vb.ISO_8601)return void ab(b);b._a=[],b._pf.empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Q(b._f,b._locale).match(Pb)||[],c=0;c<e.length;c++)f=e[c],d=(h.match(R(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&b._pf.unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),rc[f]?(d?b._pf.empty=!1:b._pf.unusedTokens.push(f),T(f,d,b)):b._strict&&!d&&b._pf.unusedTokens.push(f);b._pf.charsLeftOver=i-j,h.length>0&&b._pf.unusedInput.push(h),b._pf.bigHour===!0&&b._a[Fb]<=12&&(b._pf.bigHour=a),b._a[Fb]=k(b._locale,b._a[Fb],b._meridiem),V(b),H(b)}function Z(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function $(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function _(a){var b,c,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;f<a._f.length;f++)g=0,b=p({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._pf=d(),b._f=a._f[f],Y(b),I(b)&&(g+=b._pf.charsLeftOver,g+=10*b._pf.unusedTokens.length,b._pf.score=g,(null==e||e>g)&&(e=g,c=b));o(a,c||b)}function ab(a){var b,c,d=a._i,e=fc.exec(d);if(e){for(a._pf.iso=!0,b=0,c=hc.length;c>b;b++)if(hc[b][1].exec(d)){a._f=hc[b][0]+(e[6]||" ");break}for(b=0,c=ic.length;c>b;b++)if(ic[b][1].exec(d)){a._f+=ic[b][0];break}d.match(Xb)&&(a._f+="Z"),Y(a)}else a._isValid=!1}function bb(a){ab(a),a._isValid===!1&&(delete a._isValid,vb.createFromInputFallback(a))}function cb(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function db(b){var c,d=b._i;d===a?b._d=new Date:x(d)?b._d=new Date(+d):null!==(c=Mb.exec(d))?b._d=new Date(+c[1]):"string"==typeof d?bb(b):w(d)?(b._a=cb(d.slice(0),function(a){return parseInt(a,10)}),V(b)):"object"==typeof d?W(b):"number"==typeof d?b._d=new Date(d):vb.createFromInputFallback(b)}function eb(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function fb(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function gb(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function hb(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function ib(a,b,c){var d=vb.duration(a).abs(),e=Ab(d.as("s")),f=Ab(d.as("m")),g=Ab(d.as("h")),h=Ab(d.as("d")),i=Ab(d.as("M")),j=Ab(d.as("y")),k=e<oc.s&&["s",e]||1===f&&["m"]||f<oc.m&&["mm",f]||1===g&&["h"]||g<oc.h&&["hh",g]||1===h&&["d"]||h<oc.d&&["dd",h]||1===i&&["M"]||i<oc.M&&["MM",i]||1===j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,hb.apply({},k)}function jb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=vb(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function kb(a,b,c,d,e){var f,g,h=fb(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:F(a-1)+g}}function lb(b){var c,d=b._i,e=b._f;return b._locale=b._locale||vb.localeData(b._l),null===d||e===a&&""===d?vb.invalid({nullInput:!0}):("string"==typeof d&&(b._i=d=b._locale.preparse(d)),vb.isMoment(d)?new m(d,!0):(e?w(e)?_(b):Y(b):db(b),c=new m(b),c._nextDay&&(c.add(1,"d"),c._nextDay=a),c))}function mb(a,b){var c,d;if(1===b.length&&w(b[0])&&(b=b[0]),!b.length)return vb();for(c=b[0],d=1;d<b.length;++d)b[d][a](c)&&(c=b[d]);return c}function nb(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),D(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function ob(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function pb(a,b,c){return"Month"===b?nb(a,c):a._d["set"+(a._isUTC?"UTC":"")+b](c)}function qb(a,b){return function(c){return null!=c?(pb(this,a,c),vb.updateOffset(this,b),this):ob(this,a)}}function rb(a){return 400*a/146097}function sb(a){return 146097*a/400}function tb(a){vb.duration.fn[a]=function(){return this._data[a]}}function ub(a){"undefined"==typeof ender&&(wb=zb.moment,zb.moment=a?f("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.",vb):vb)}for(var vb,wb,xb,yb="2.9.0",zb="undefined"==typeof global||"undefined"!=typeof window&&window!==global.window?this:global,Ab=Math.round,Bb=Object.prototype.hasOwnProperty,Cb=0,Db=1,Eb=2,Fb=3,Gb=4,Hb=5,Ib=6,Jb={},Kb=[],Lb="undefined"!=typeof module&&module&&module.exports,Mb=/^\/?Date\((\-?\d+)/i,Nb=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Ob=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,Pb=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,Qb=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Rb=/\d\d?/,Sb=/\d{1,3}/,Tb=/\d{1,4}/,Ub=/[+\-]?\d{1,6}/,Vb=/\d+/,Wb=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Xb=/Z|[\+\-]\d\d:?\d\d/gi,Yb=/T/i,Zb=/[\+\-]?\d+/,$b=/[\+\-]?\d+(\.\d{1,3})?/,_b=/\d/,ac=/\d\d/,bc=/\d{3}/,cc=/\d{4}/,dc=/[+-]?\d{6}/,ec=/[+-]?\d+/,fc=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,gc="YYYY-MM-DDTHH:mm:ssZ",hc=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],ic=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],jc=/([\+\-]|\d\d)/gi,kc=("Date|Hours|Minutes|Seconds|Milliseconds".split("|"),{Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6}),lc={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",Q:"quarter",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},mc={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},nc={},oc={s:45,m:45,h:22,d:26,M:11},pc="DDD w W M D d".split(" "),qc="M D H h m s w W".split(" "),rc={M:function(){return this.month()+1},MMM:function(a){return this.localeData().monthsShort(this,a)},MMMM:function(a){return this.localeData().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.localeData().weekdaysMin(this,a)},ddd:function(a){return this.localeData().weekdaysShort(this,a)},dddd:function(a){return this.localeData().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return r(this.year()%100,2)},YYYY:function(){return r(this.year(),4)},YYYYY:function(){return r(this.year(),5)},YYYYYY:function(){var a=this.year(),b=a>=0?"+":"-";return b+r(Math.abs(a),6)},gg:function(){return r(this.weekYear()%100,2)},gggg:function(){return r(this.weekYear(),4)},ggggg:function(){return r(this.weekYear(),5)},GG:function(){return r(this.isoWeekYear()%100,2)},GGGG:function(){return r(this.isoWeekYear(),4)},GGGGG:function(){return r(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return C(this.milliseconds()/100)},SS:function(){return r(C(this.milliseconds()/10),2)},SSS:function(){return r(this.milliseconds(),3)},SSSS:function(){return r(this.milliseconds(),3)},Z:function(){var a=this.utcOffset(),b="+";return 0>a&&(a=-a,b="-"),b+r(C(a/60),2)+":"+r(C(a)%60,2)},ZZ:function(){var a=this.utcOffset(),b="+";return 0>a&&(a=-a,b="-"),b+r(C(a/60),2)+r(C(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},sc={},tc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"],uc=!1;pc.length;)xb=pc.pop(),rc[xb+"o"]=i(rc[xb],xb);for(;qc.length;)xb=qc.pop(),rc[xb+xb]=h(rc[xb],2);rc.DDDD=h(rc.DDD,3),o(l.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a,b,c){var d,e,f;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;12>d;d++){if(e=vb.utc([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=vb([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.apply(b,[c]):d},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(a){return a},postformat:function(a){return a},week:function(a){return jb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},firstDayOfWeek:function(){return this._week.dow},firstDayOfYear:function(){return this._week.doy},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),vb=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=c,g._l=e,g._strict=f,g._isUTC=!1,g._pf=d(),lb(g)},vb.suppressDeprecationWarnings=!1,vb.createFromInputFallback=f("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),vb.min=function(){var a=[].slice.call(arguments,0);return mb("isBefore",a)},vb.max=function(){var a=[].slice.call(arguments,0);return mb("isAfter",a)},vb.utc=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=c,g._strict=f,g._pf=d(),lb(g).utc()},vb.unix=function(a){return vb(1e3*a)},vb.duration=function(a,b){var d,e,f,g,h=a,i=null;return vb.isDuration(a)?h={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(h={},b?h[b]=a:h.milliseconds=a):(i=Nb.exec(a))?(d="-"===i[1]?-1:1,h={y:0,d:C(i[Eb])*d,h:C(i[Fb])*d,m:C(i[Gb])*d,s:C(i[Hb])*d,ms:C(i[Ib])*d}):(i=Ob.exec(a))?(d="-"===i[1]?-1:1,f=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*d},h={y:f(i[2]),M:f(i[3]),d:f(i[4]),h:f(i[5]),m:f(i[6]),s:f(i[7]),w:f(i[8])}):null==h?h={}:"object"==typeof h&&("from"in h||"to"in h)&&(g=t(vb(h.from),vb(h.to)),h={},h.ms=g.milliseconds,h.M=g.months),e=new n(h),vb.isDuration(a)&&c(a,"_locale")&&(e._locale=a._locale),e},vb.version=yb,vb.defaultFormat=gc,vb.ISO_8601=function(){},vb.momentProperties=Kb,vb.updateOffset=function(){},vb.relativeTimeThreshold=function(b,c){return oc[b]===a?!1:c===a?oc[b]:(oc[b]=c,!0)},vb.lang=f("moment.lang is deprecated. Use moment.locale instead.",function(a,b){return vb.locale(a,b)}),vb.locale=function(a,b){var c;return a&&(c="undefined"!=typeof b?vb.defineLocale(a,b):vb.localeData(a),c&&(vb.duration._locale=vb._locale=c)),vb._locale._abbr},vb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Jb[a]||(Jb[a]=new l),Jb[a].set(b),vb.locale(a),Jb[a]):(delete Jb[a],null)},vb.langData=f("moment.langData is deprecated. Use moment.localeData instead.",function(a){return vb.localeData(a)}),vb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return vb._locale;if(!w(a)){if(b=L(a))return b;a=[a]}return K(a)},vb.isMoment=function(a){return a instanceof m||null!=a&&c(a,"_isAMomentObject")},vb.isDuration=function(a){return a instanceof n};for(xb=tc.length-1;xb>=0;--xb)B(tc[xb]);vb.normalizeUnits=function(a){return z(a)},vb.invalid=function(a){var b=vb.utc(0/0);return null!=a?o(b._pf,a):b._pf.userInvalidated=!0,b},vb.parseZone=function(){return vb.apply(null,arguments).parseZone()},vb.parseTwoDigitYear=function(a){return C(a)+(C(a)>68?1900:2e3)},vb.isDate=x,o(vb.fn=m.prototype,{clone:function(){return vb(this)},valueOf:function(){return+this._d-6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=vb(this).utc();return 0<a.year()&&a.year()<=9999?"function"==typeof Date.prototype.toISOString?this.toDate().toISOString():P(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):P(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return I(this)},isDSTShifted:function(){return this._a?this.isValid()&&y(this._a,(this._isUTC?vb.utc(this._a):vb(this._a)).toArray())>0:!1},parsingFlags:function(){return o({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.utcOffset(0,a)},local:function(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(this._dateUtcOffset(),"m")),this},format:function(a){var b=P(this,a||vb.defaultFormat);return this.localeData().postformat(b)},add:u(1,"add"),subtract:u(-1,"subtract"),diff:function(a,b,c){var d,e,f=M(a,this),g=6e4*(f.utcOffset()-this.utcOffset());return b=z(b),"year"===b||"month"===b||"quarter"===b?(e=j(this,f),"quarter"===b?e/=3:"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:q(e)},from:function(a,b){return vb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(vb(),a)},calendar:function(a){var b=a||vb(),c=M(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this,vb(b)))},isLeapYear:function(){return G(this.year())},isDST:function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},day:function(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=gb(a,this.localeData()),this.add(a-b,"d")):b},month:qb("Month",!0),startOf:function(a){switch(a=z(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a?this.weekday(0):"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this},endOf:function(b){return b=z(b),b===a||"millisecond"===b?this:this.startOf(b).add(1,"isoWeek"===b?"week":b).subtract(1,"ms")},isAfter:function(a,b){var c;return b=z("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=vb.isMoment(a)?a:vb(a),+this>+a):(c=vb.isMoment(a)?+a:+vb(a),c<+this.clone().startOf(b))},isBefore:function(a,b){var c;return b=z("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=vb.isMoment(a)?a:vb(a),+a>+this):(c=vb.isMoment(a)?+a:+vb(a),+this.clone().endOf(b)<c)},isBetween:function(a,b,c){return this.isAfter(a,c)&&this.isBefore(b,c)},isSame:function(a,b){var c;return b=z(b||"millisecond"),"millisecond"===b?(a=vb.isMoment(a)?a:vb(a),+this===+a):(c=+vb(a),+this.clone().startOf(b)<=c&&c<=+this.clone().endOf(b))},min:f("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(a){return a=vb.apply(null,arguments),this>a?this:a}),max:f("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(a){return a=vb.apply(null,arguments),a>this?this:a}),zone:f("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",function(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}),utcOffset:function(a,b){var c,d=this._offset||0;return null!=a?("string"==typeof a&&(a=S(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._dateUtcOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.add(c,"m"),d!==a&&(!b||this._changeInProgress?v(this,vb.duration(a-d,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,vb.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?d:this._dateUtcOffset()},isLocal:function(){return!this._isUTC},isUtcOffset:function(){return this._isUTC},isUtc:function(){return this._isUTC&&0===this._offset},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(S(this._i)),this},hasAlignedHourOffset:function(a){return a=a?vb(a).utcOffset():0,(this.utcOffset()-a)%60===0},daysInMonth:function(){return D(this.year(),this.month())},dayOfYear:function(a){var b=Ab((vb(this).startOf("day")-vb(this).startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=jb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")},isoWeekYear:function(a){var b=jb(this,1,4).year;return null==a?b:this.add(a-b,"y")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")},isoWeek:function(a){var b=jb(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return E(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return E(this.year(),a.dow,a.doy)},get:function(a){return a=z(a),this[a]()},set:function(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else a=z(a),"function"==typeof this[a]&&this[a](b);return this},locale:function(b){var c;return b===a?this._locale._abbr:(c=vb.localeData(b),null!=c&&(this._locale=c),this)},lang:f("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(b){return b===a?this.localeData():this.locale(b)}),localeData:function(){return this._locale},_dateUtcOffset:function(){return 15*-Math.round(this._d.getTimezoneOffset()/15)}}),vb.fn.millisecond=vb.fn.milliseconds=qb("Milliseconds",!1),vb.fn.second=vb.fn.seconds=qb("Seconds",!1),vb.fn.minute=vb.fn.minutes=qb("Minutes",!1),vb.fn.hour=vb.fn.hours=qb("Hours",!0),vb.fn.date=qb("Date",!0),vb.fn.dates=f("dates accessor is deprecated. Use date instead.",qb("Date",!0)),vb.fn.year=qb("FullYear",!0),vb.fn.years=f("years accessor is deprecated. Use year instead.",qb("FullYear",!0)),vb.fn.days=vb.fn.day,vb.fn.months=vb.fn.month,vb.fn.weeks=vb.fn.week,vb.fn.isoWeeks=vb.fn.isoWeek,vb.fn.quarters=vb.fn.quarter,vb.fn.toJSON=vb.fn.toISOString,vb.fn.isUTC=vb.fn.isUtc,o(vb.duration.fn=n.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=q(d/1e3),g.seconds=a%60,b=q(a/60),g.minutes=b%60,c=q(b/60),g.hours=c%24,e+=q(c/24),h=q(rb(e)),e-=q(sb(h)),f+=q(e/30),e%=30,h+=q(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return q(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*C(this._months/12)
},humanize:function(a){var b=ib(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=vb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=vb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=z(a),this[a.toLowerCase()+"s"]()},as:function(a){var b,c;if(a=z(a),"month"===a||"year"===a)return b=this._days+this._milliseconds/864e5,c=this._months+12*rb(b),"month"===a?c:c/12;switch(b=this._days+Math.round(sb(this._months/12)),a){case"week":return b/7+this._milliseconds/6048e5;case"day":return b+this._milliseconds/864e5;case"hour":return 24*b+this._milliseconds/36e5;case"minute":return 24*b*60+this._milliseconds/6e4;case"second":return 24*b*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*b*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+a)}},lang:vb.fn.lang,locale:vb.fn.locale,toIsoString:f("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"},localeData:function(){return this._locale},toJSON:function(){return this.toISOString()}}),vb.duration.fn.toString=vb.duration.fn.toISOString;for(xb in kc)c(kc,xb)&&tb(xb.toLowerCase());vb.duration.fn.asMilliseconds=function(){return this.as("ms")},vb.duration.fn.asSeconds=function(){return this.as("s")},vb.duration.fn.asMinutes=function(){return this.as("m")},vb.duration.fn.asHours=function(){return this.as("h")},vb.duration.fn.asDays=function(){return this.as("d")},vb.duration.fn.asWeeks=function(){return this.as("weeks")},vb.duration.fn.asMonths=function(){return this.as("M")},vb.duration.fn.asYears=function(){return this.as("y")},vb.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===C(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),Lb?module.exports=vb:"function"==typeof define&&define.amd?(define(function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(zb.moment=wb),vb}),ub(!0)):ub()}).call(this);;
/*
 * angular-elastic v2.5.1
 * (c) 2014 Monospaced http://monospaced.com
 * License: MIT
 */

if (typeof module !== 'undefined' &&
    typeof exports !== 'undefined' &&
    module.exports === exports){
  module.exports = 'monospaced.elastic';
}

angular.module('monospaced.elastic', [])

  .constant('msdElasticConfig', {
    append: ''
  })

  .directive('msdElastic', [
    '$timeout', '$window', 'msdElasticConfig',
    function($timeout, $window, config) {
      'use strict';

      return {
        require: 'ngModel',
        restrict: 'A, C',
        link: function(scope, element, attrs, ngModel) {

          // cache a reference to the DOM element
          var ta = element[0],
              $ta = element;

          // ensure the element is a textarea, and browser is capable
          if (ta.nodeName !== 'TEXTAREA' || !$window.getComputedStyle) {
            return;
          }

          // set these properties before measuring dimensions
          $ta.css({
            'overflow': 'hidden',
            'overflow-y': 'hidden',
            'word-wrap': 'break-word'
          });

          // force text reflow
          var text = ta.value;
          ta.value = '';
          ta.value = text;

          var append = attrs.msdElastic ? attrs.msdElastic.replace(/\\n/g, '\n') : config.append,
              $win = angular.element($window),
              mirrorInitStyle = 'position: absolute; top: -999px; right: auto; bottom: auto;' +
                                'left: 0; overflow: hidden; -webkit-box-sizing: content-box;' +
                                '-moz-box-sizing: content-box; box-sizing: content-box;' +
                                'min-height: 0 !important; height: 0 !important; padding: 0;' +
                                'word-wrap: break-word; border: 0;',
              $mirror = angular.element('<textarea aria-hidden="true" tabindex="-1" ' +
                                        'style="' + mirrorInitStyle + '"/>').data('elastic', true),
              mirror = $mirror[0],
              taStyle = getComputedStyle(ta),
              resize = taStyle.getPropertyValue('resize'),
              borderBox = taStyle.getPropertyValue('box-sizing') === 'border-box' ||
                          taStyle.getPropertyValue('-moz-box-sizing') === 'border-box' ||
                          taStyle.getPropertyValue('-webkit-box-sizing') === 'border-box',
              boxOuter = !borderBox ? {width: 0, height: 0} : {
                            width:  parseInt(taStyle.getPropertyValue('border-right-width'), 10) +
                                    parseInt(taStyle.getPropertyValue('padding-right'), 10) +
                                    parseInt(taStyle.getPropertyValue('padding-left'), 10) +
                                    parseInt(taStyle.getPropertyValue('border-left-width'), 10),
                            height: parseInt(taStyle.getPropertyValue('border-top-width'), 10) +
                                    parseInt(taStyle.getPropertyValue('padding-top'), 10) +
                                    parseInt(taStyle.getPropertyValue('padding-bottom'), 10) +
                                    parseInt(taStyle.getPropertyValue('border-bottom-width'), 10)
                          },
              minHeightValue = parseInt(taStyle.getPropertyValue('min-height'), 10),
              heightValue = parseInt(taStyle.getPropertyValue('height'), 10),
              minHeight = Math.max(minHeightValue, heightValue) - boxOuter.height,
              maxHeight = parseInt(taStyle.getPropertyValue('max-height'), 10),
              mirrored,
              active,
              copyStyle = ['font-family',
                           'font-size',
                           'font-weight',
                           'font-style',
                           'letter-spacing',
                           'line-height',
                           'text-transform',
                           'word-spacing',
                           'text-indent'];

          // exit if elastic already applied (or is the mirror element)
          if ($ta.data('elastic')) {
            return;
          }

          // Opera returns max-height of -1 if not set
          maxHeight = maxHeight && maxHeight > 0 ? maxHeight : 9e4;

          // append mirror to the DOM
          if (mirror.parentNode !== document.body) {
            angular.element(document.body).append(mirror);
          }

          // set resize and apply elastic
          $ta.css({
            'resize': (resize === 'none' || resize === 'vertical') ? 'none' : 'horizontal'
          }).data('elastic', true);

          /*
           * methods
           */

          function initMirror() {
            var mirrorStyle = mirrorInitStyle;

            mirrored = ta;
            // copy the essential styles from the textarea to the mirror
            taStyle = getComputedStyle(ta);
            angular.forEach(copyStyle, function(val) {
              mirrorStyle += val + ':' + taStyle.getPropertyValue(val) + ';';
            });
            mirror.setAttribute('style', mirrorStyle);
          }

          function adjust() {
            var taHeight,
                taComputedStyleWidth,
                mirrorHeight,
                width,
                overflow;

            if (mirrored !== ta) {
              initMirror();
            }

            // active flag prevents actions in function from calling adjust again
            if (!active) {
              active = true;

              mirror.value = ta.value + append; // optional whitespace to improve animation
              mirror.style.overflowY = ta.style.overflowY;

              taHeight = ta.style.height === '' ? 'auto' : parseInt(ta.style.height, 10);

              taComputedStyleWidth = getComputedStyle(ta).getPropertyValue('width');

              // ensure getComputedStyle has returned a readable 'used value' pixel width
              if (taComputedStyleWidth.substr(taComputedStyleWidth.length - 2, 2) === 'px') {
                // update mirror width in case the textarea width has changed
                width = parseInt(taComputedStyleWidth, 10) - boxOuter.width;
                mirror.style.width = width + 'px';
              }

              mirrorHeight = mirror.scrollHeight;

              if (mirrorHeight > maxHeight) {
                mirrorHeight = maxHeight;
                overflow = 'scroll';
              } else if (mirrorHeight < minHeight) {
                mirrorHeight = minHeight;
              }
              mirrorHeight += boxOuter.height;
              ta.style.overflowY = overflow || 'hidden';

              if (taHeight !== mirrorHeight) {
                scope.$emit('elastic:resize', $ta, taHeight, mirrorHeight);
                ta.style.height = mirrorHeight + 'px';
              }

              // small delay to prevent an infinite loop
              $timeout(function() {
                active = false;
              }, 1, false);

            }
          }

          function forceAdjust() {
            active = false;
            adjust();
          }

          /*
           * initialise
           */

          // listen
          if ('onpropertychange' in ta && 'oninput' in ta) {
            // IE9
            ta['oninput'] = ta.onkeyup = adjust;
          } else {
            ta['oninput'] = adjust;
          }

          $win.bind('resize', forceAdjust);

          scope.$watch(function() {
            return ngModel.$modelValue;
          }, function(newValue) {
            forceAdjust();
          });

          scope.$on('elastic:adjust', function() {
            initMirror();
            forceAdjust();
          });

          $timeout(adjust, 0, false);

          /*
           * destroy
           */

          scope.$on('$destroy', function() {
            $mirror.remove();
            $win.unbind('resize', forceAdjust);
          });
        }
      };
    }
  ]);
;

var grcId = null;
var cont = true;

// General functions **************************************

function showWaitMessage(messageText) {
    $("#waitMsg").html(messageText);
    $("#WaitDialog").modal("show");
}

function closeWaitMessage() {
    $("#WaitDialog").modal("hide");
}

function getRecaptchaResponse() {
    return $("#g-recaptcha-response").val();
}

function resetRecaptcha() {
    grecaptcha.reset(grcId);
}

// Google reCaptcha **************************************

var onloadCallback = function () {
    if (cont) {
        if ($("#captcha").length) {
            if (grcId === null) {
                grcId = grecaptcha.render(document.getElementById("captcha"), {
                    'sitekey': "6Lfu4hkUAAAAALfbbzt9YIL40hIae4zwTS-RKEks",
                    'theme': "dark",
                    'size': "invisible",
                    'callback': submitRecaptcha
                });
            }
            cont = false;
        } else {
            setTimeout(function () {
                onloadCallback();
            }, 1000);
        }
    }
};

function submitRecaptcha() {
    if ($("#g-recaptcha-response").length) {
        validateRecaptcha();
    }
}

function validateRecaptcha() {
    var isValid = false;
    if ($("#captcha").length) {
        if (grecaptcha.getResponse(grcId) === "") {
            $("#captcha").parent.addClass("has-error");
        } else {
            $("#captcha").parent.removeClass("has-error");
            isValid = true;
        }
    }
    return isValid;
}

// ********************************************************

function isElementInViewport(el) {
    if (typeof jQuery === "function" && el instanceof jQuery) {
        el = el[0];
    }
    var rect = el.getBoundingClientRect();
    //var h = $(window).height();
    //var w = $(window).width();
    return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
        rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
    );
}

function onVisibilityChange(el, callback) {
    var oldVisible = false;
    return function () {
        var visible = isElementInViewport(el);
        if (visible !== oldVisible) {
            oldVisible = visible;
            if (typeof callback == "function") {
                callback(el);
            }
        }
    }
};

// Main Application ***************************************  
//var mainApp = angular.module("mainApp", ["ngRoute", "ngAnimate", "ngCookies", "monospaced.elastic", "ngMaterial"]);
var mainApp = angular.module("mainApp", ["ngRoute", "ngAnimate", "ngCookies", "monospaced.elastic"]);

mainApp.config(["$locationProvider", function ($locationProvider) {
    $locationProvider.hashPrefix("");
}]);

// Custom Directives **************************************

mainApp.directive("numberInput", function () {
    return function (scope, element, attrs) {
        element.bind("keypress", function (event) {
            if (event.keyCode !== 8 && event.keyCode !== 0 && (event.keyCode < 48 || event.keyCode > 57)) {
                element.parent().addClass("has-error");
                setTimeout(function () {
                    element.parent().removeClass("has-error");
                }, 500);
                event.preventDefault();
                return false;
            }
        });
    };
});

mainApp.directive("phoneInput", function ($filter, $browser) {
    return {
        require: "ngModel",
        link: function ($scope, $element, $attrs, ngModelCtrl) {
            var listener = function () {
                $element.val($element.val().replace(/[^0-9]/g, ""));
            };

            ngModelCtrl.$parsers.push(function (viewValue) {
                return viewValue.replace(/[^0-9]/g, "").slice(0, 10);
            });

            $element.bind("change", listener);
            $element.bind("keydown", function (event) {
                var key = event.keyCode;
                // If the keys include the CTRL, SHIFT, ALT, or META keys, or the arrow keys, do nothing.
                // This lets us support copy and paste too
                if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) {
                    return;
                }
                $browser.defer(listener); // Have to do this or changes don't get picked up properly
            });

            $element.bind("paste cut", function () {
                $browser.defer(listener);
            });
        }

    };
});

mainApp.directive("ngSepration", function () {
    return {
        template: "<div style='width: 100%; height: 10px;'>&nbsp;</div>"
    };
});

mainApp.directive("ngAutocomplete", function () {
    return {
        scope: {
            locType: "=",
            index: "=",
            options: "=",
            resultParser: "&"
        },

        link: function (scope, element, attrs) {

            var details = {};
            var newAutocomplete = function () {
                scope.gPlace = new google.maps.places.Autocomplete(element[0], scope.options);
                google.maps.event.addListener(scope.gPlace, "place_changed", function () {
                    scope.$apply(function () {
                        details = scope.gPlace.getPlace();
                        scope.resultParser()(details, scope.locType, scope.index);
                        //scope.ngAutocomplete = element.val();
                    });
                });

            }
            newAutocomplete();

            scope.watchOptions = function () {
                return scope.options;
            };

            scope.$watch(scope.options, function () {
                newAutocomplete();
                //element[0].value = "";
                //scope.ngAutocomplete = element.val();
            }, true);
        }
    };
});

mainApp.directive("ccdatepicker", function () {
    return {
        restrict: "A",
        require: "ngModel",
        link: function (scope, element, attrs, ctrl) {
            $(element).datepicker({
                dateFormat: "yy-mm-dd",
                maxDate: new Date(),
                onSelect: function (date) {
                    ctrl.$setViewValue(date);
                    ctrl.$render();
                    scope.$apply();
                }
            });
        }
    };
});

mainApp.directive("pkdatepicker", function () {
    return {
        restrict: "A",
        require: "ngModel",
        link: function (scope, element, attrs, ctrl) {
            $(element).datepicker({
                dateFormat: "DD d MM yy",
                minDate: scope.minBookingDate,
                maxDate: scope.maxBookingDate,
                onSelect: function (date) {
                    ctrl.$setViewValue(date);
                    ctrl.$render();
                    scope.$apply();
                }
            });

            ctrl.$formatters.unshift(function (modelValue) {
                var retVal = moment(modelValue).format('dddd D MMMM YYYY');
                return retVal;
            });

            ctrl.$parsers.unshift(function (viewValue) {
                var date = moment(viewValue, 'dddd D MMMM YYYY');
                return (date && date.isValid() && date.year() > 1950) ? date.toDate() : "";
            });
        }
    };
});

// Custom Filters ****************************************

mainApp.filter('formatPhone', function () {
    return function (number) {
        if (!number) { return ''; }
        var area, front, end = '';

        if (number.length == 9) //02 xxxx xxxx
        {
            area = number.substr(0, 2);
            front = number.substr(3, 4);
            end = number.substr(5, 4);
        }
        else if (number.length == 10) //04xx xxx xxx
        {
            area = number.substr(0, 4);
            front = number.substr(4, 3);
            end = number.substr(7, 3);
        }
        else if (number.length == 11) // 61 xxx xxx xxx
        {
            area = '+' + number.substr(0, 2) + ' ' + number.substr(2, 3);
            front = number.substr(5, 3);
            end = number.substr(8, 4);
        }
        return area + ' ' + front + ' ' + end;
    };
});

mainApp.filter("secondsToDateTime", [
    function () {
        return function (seconds) {
            return new Date(1970, 0, 1).setSeconds(seconds);
        };
    }
]);

mainApp.filter("secondsToTimeString", function () {
    return function (tSeconds) {
        var oneMinute = 60;
        var oneHour = oneMinute * 60;
        var oneDay = oneHour * 24;
        var seconds = Math.floor(tSeconds % oneMinute);
        var minutes = Math.floor((tSeconds % oneHour) / oneMinute);
        var hours = Math.floor((tSeconds % oneDay) / oneHour);
        var days = Math.floor(tSeconds / oneDay);

        var timeString = "";
        if (days !== 0) {
            timeString += (days !== 1) ? (days + " days ") : (days + " day ");
        }
        if (hours > -1) {
            timeString += (hours < 10) ? ("0" + hours + ":") : (hours + ":");
        }
        if (minutes > -1) {
            timeString += (minutes < 10) ? ("0" + minutes + ":") : (minutes + ":");
        }
        if (seconds > -1) {
            timeString += (seconds < 10) ? ("0" + seconds) : seconds;
        }

        return timeString;
    };
});

// ##################################################################################################################################################
// Menu Ctrl ########################################################################################################################################
// ##################################################################################################################################################

mainApp.controller("menuCtrl", ["$scope", "homeSrvc", "$timeout", "userSrvc", function ($scope, homeSrvc, $timeout, userSrvc) {

    $scope.menuItems = [];
    $scope.userProfile = {};

    getMenus();
    getUserProfile();

    $scope.menuClicked = function (menu) {

        if (menu === "register") { regLock.show(); }
        if (menu === "signin") { lock.show(); }

        $(".auth0-lock-submit").on("click", function (event) {
            if ($(".auth0-label-submit").length && $(".auth0-label-submit")[0].innerText === "SEND EMAIL") {
                var username = $(".auth0-lock-input").val();
                homeSrvc.resetPassword(username).then(function (response) {
                    if ((response != null) && (response.data !== "")) {
                        var data = response.data;
                        if (data === "Success") {
                            $(".auth0-lock-back-button").click();
                            $timeout(function () {
                                var elem = $(".auth0-lock-cred-pane.auth0-lock-quiet");
                                elem.children("span:first").html("<div class='auth0-global-message auth0-global-message-success'><span class='animated fadeInUp'><span>We just sent you an email to reset your password.</span></span></div>");
                            }, 1500);
                        } else {
                            $timeout(function () {
                                var elem = $(".auth0-lock-cred-pane.auth0-lock-quiet");
                                elem.children("span:first").html("<div class='auth0-global-message auth0-global-message-error'><span class='animated fadeInUp'><span>Fail to send the reset password email. please try again later!</span></span></div>");
                            }, 1500);
                        }
                    }
                }).catch(function (response) {
                    var status = response.status;
                    var statusText = response.statusText;
                    console.log(status + " - " + statusText);
                });
                return false;
            }
        });

        if (menu === "#") {
            lock.show();
            $(".auth0-lock-submit").on("click", function (event) {
                if ($(".auth0-label-submit").length && $(".auth0-label-submit")[0].innerText === "SEND EMAIL") {
                    var username = $(".auth0-lock-input").val();
                    homeSrvc.resetPassword(username).then(function (response) {
                        if ((response != null) && (response.data !== "")) {
                            var data = response.data;
                            if (data === "Success") {
                                $(".auth0-lock-back-button").click();
                                $timeout(function () {
                                    var elem = $(".auth0-lock-cred-pane.auth0-lock-quiet");
                                    elem.children("span:first").html("<div class='auth0-global-message auth0-global-message-success'><span class='animated fadeInUp'><span>We just sent you an email to reset your password.</span></span></div>");
                                }, 1500);
                            } else {
                                $timeout(function () {
                                    var elem = $(".auth0-lock-cred-pane.auth0-lock-quiet");
                                    elem.children("span:first").html("<div class='auth0-global-message auth0-global-message-error'><span class='animated fadeInUp'><span>Fail to send the reset password email. please try again later!</span></span></div>");
                                }, 1500);
                            }

                        }
                    }).catch(function (response) {
                        var status = response.status;
                        var statusText = response.statusText;
                        console.log(status + " - " + statusText);
                    });
                    return false;
                }
            });
        }
    }

    // ----------------------------------------------------------------------------getMenus
    function getMenus() {
        homeSrvc.getMenuItems().then(function (response) {
            if ((response != null) && (response.data !== "")) {
                var data = response.data;
                var status = response.status;
                var statusText = response.statusText;
                var headers = response.headers;
                var config = response.config;
                $scope.menuItems = data;
            }
        }).catch(function (response) {
            var data = response.data;
            var status = response.status;
            var statusText = response.statusText;
            var headers = response.headers;
            var config = response.config;
            console.log(status + " - " + statusText);
        });
    }

    // ----------------------------------------------------------------------------getUserProfile
    function getUserProfile() {
        userSrvc.getUserProfile().then(function successCallback(response) {
            // this callback will be called asynchronously
            // when the response is available
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                if (response.data === "NotAuthorised") {
                    console.log("User not logged in");
                }
                else {
                    $scope.userProfile = response.data;
                }
            }
            console.log(response);
        }, function errorCallback(response) {
            // called asynchronously if an error occurs
            // or server returns response with an error status.
            console.log(response);
        });
    }
}]);


// ##################################################################################################################################################
// Online Booking Cntrl #############################################################################################################################
// ##################################################################################################################################################

mainApp.controller("bookingCtrl", ["$scope", "homeSrvc", "$cookies", "$interval", "$timeout", "$filter", "$http", function ($scope, homeSrvc, $cookies, $interval, $timeout, $filter, $http) {

    var gmap, trackMap, nearByCars, serverBookingObj;
    var pkMarker, destMarker, carMarker, passMarker, carIcon = {}, bookingObj = {};
    var pickupObj = {
        AddressDbId: 0,
        GeoPoint: { Latitude: 0, Longitude: 0 },
        Designation: { DesignationId: 0, Name: "" },
        Number: "",
        Place: { Id: 0, Name: "" },
        Street: { StreetId: 0, Name: "" },
        Suburb: {
            Id: 0,
            IsServiceable: false,
            IsDefaultPickup: false,
            Name: "",
            NspPhone: "",
            Postcode: "",
            State: "",
            AddressDbId: 0,
            GeoPoint: { Latitude: 0, Longitude: 0 }
        },
        Unit: ""
    };
    var destObj = pickupObj;
    var intervals = [];
    var markerList = [];
    var trackMarkers = [];
    var trackList = [];
    var listCount = 3;

    $scope.btnSubmitText = "Request 13CABS";
    $scope.activeBookings = 0;
    $scope.isLoadingPk = false;
    $scope.isLoadingDest = false;
    $scope.isLoading = false;
    $scope.showConfirm = [false, false, false];
    $scope.bookingList = [];
    $scope.pickupSelected = false;
    $scope.destSelected = false;
    $scope.errorMsg = "";
    $scope.pkErrMsg = "";
    $scope.destErrMsg = "";
    $scope.curYear = new Date().getFullYear();
    $scope.requested = false;
    $scope.selectedBookingtoTrack = 0;
    //getLocation();

    //----------------------------------------------------------------------------------------------------- cookies
    if (angular.isDefined($cookies.getObject("bkList")) && $scope.bookingList.length < 1) {
        var savedBkIdList = $cookies.getObject("bkList");
        $scope.activeBookings = 0;

        if (angular.isDefined(savedBkIdList[0])) {
            homeSrvc.getBookingLastStatus(savedBkIdList[0]).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    if (!response.data.InError) {
                        $scope.bookingList.unshift(response.data);
                        if (response.data.Status !== "Completed" && response.data.Status !== "Cancelled") {
                            $scope.activeBookings = $scope.activeBookings + 1;
                        }
                        $scope.bookingList = $filter("orderBy")($scope.bookingList, "StatusId");
                    }
                }
            }).catch(function (err) {
                if (angular.isDefined(err.status)) {
                    console.log(err.status + " - " + err.statusText);
                } else {
                    console.log(err.message);
                }
            });
        }

        if (angular.isDefined(savedBkIdList[1])) {
            homeSrvc.getBookingLastStatus(savedBkIdList[1]).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    if (!response.data.InError) {
                        $scope.bookingList.unshift(response.data);
                        if (response.data.Status !== "Completed" && response.data.Status !== "Cancelled") {
                            $scope.activeBookings = $scope.activeBookings + 1;
                        }
                        $scope.bookingList = $filter("orderBy")($scope.bookingList, "StatusId");
                    }
                }
            }).catch(function (err) {
                if (angular.isDefined(err.status)) {
                    console.log(err.status + " - " + err.statusText);
                } else {
                    console.log(err.message);
                }
            });
        }

        if (angular.isDefined(savedBkIdList[2])) {
            homeSrvc.getBookingLastStatus(savedBkIdList[2]).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    if (!response.data.InError) {
                        $scope.bookingList.unshift(response.data);
                        if (response.data.Status !== "Completed" && response.data.Status !== "Cancelled") {
                            $scope.activeBookings = $scope.activeBookings + 1;
                        }
                        $scope.bookingList = $filter("orderBy")($scope.bookingList, "StatusId");
                    }
                }
            }).catch(function (err) {
                if (angular.isDefined(err.status)) {
                    console.log(err.status + " - " + err.statusText);
                } else {
                    console.log(err.message);
                }
            });
        }
    }

    if (angular.isDefined($cookies.getObject("bkForm"))) {
        $scope.bookingForm = $cookies.getObject("bkForm");
        bookingObj = $cookies.getObject("bkObject");
        initiateDateTimeList(bookingObj.pickupObj.AddressDbId);
        getCarTypes(bookingObj.pickupObj.Suburb.Id);
        $scope.pickupSelected = true;
        setPickupViaCookie();

        // ----------------------------------------------------------------------------setPickupViaCookie
        function setPickupViaCookie() {
            if (typeof google === "object" && typeof google.maps === "object") {
                showPosition();
                gmap.setZoom(16);
                if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                    pkMarker.setMap(null);
                }
                pkMarker = new google.maps.Marker({
                    position: new google.maps.LatLng(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude),
                    map: gmap,
                    icon: "/Content/Images/map-pickup-icon.png",
                    title: bookingObj.pickupObj.Place.Name
                });
                gmap.panTo(pkMarker.getPosition());

                if (angular.isDefined(nearByCars)) { $interval.cancel(nearByCars); }
                if (angular.isDefined(markerList)) {
                    for (var k = 0; k < markerList.length; k++) {
                        markerList[k].setMap(null);
                    }
                    markerList = [];
                }
                showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);

            } else {
                $timeout(function () {
                    setPickupViaCookie();
                }, 2000);
            }
        }

        $scope.bookingForm.dstAddress = "";
        $scope.destSelected = false;
        bookingObj.destObj = {
            AddressDbId: 0,
            GeoPoint: { Latitude: 0, Longitude: 0 },
            Designation: { DesignationId: 0, Name: "" },
            Number: "",
            Place: { Id: 0, Name: "" },
            Street: { StreetId: 0, Name: "" },
            Suburb: {
                Id: 0,
                IsServiceable: false,
                IsDefaultPickup: false,
                Name: "",
                NspPhone: "",
                Postcode: "",
                State: "",
                AddressDbId: 0,
                GeoPoint: { Latitude: 0, Longitude: 0 }
            },
            Unit: ""
        };
    }

    // ----------------------------------------------------------------------------initiateDateTimeList
    function initiateDateTimeList(addressDbId) {
        homeSrvc.getDateTimeList(addressDbId).then(function (response) {
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                var data = response.data;
                $scope.minuteList = data.MinuteList;
                $scope.hourList = data.HourList;
                $scope.dateList = data.DateList;
                $scope.ampmList = data.AmPmList;
                $scope.bookingForm.RequestedDate = data.DateList[0];
                $scope.bookingForm.Minute = data.Minute;
                $scope.bookingForm.Hour = data.Hour;
                $scope.bookingForm.AmPm = data.AmPm;
            } else {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.getDateTimeList(addressDbId): INVALID RESPONSE', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: 'initiateDateTimeList(addressDbId)',
                            ['addressDbId']: addressDbId
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                $scope.errorMsg = "Server is not accessible";
            }
        }).catch(function (response) {
            var appInsights = window.appInsights;
            if (appInsights) {
                appInsights.trackEvent('homeSrvc.getDateTimeList(addressDbId): FAIL', // name: string
                    {
                        ['handledAt']: 'HomeController.js',
                        ['handledFunc']: 'initiateDateTimeList(addressDbId)',
                        ['addressDbId']: addressDbId
                    }   // properties?: {[string]:string}                                                                 
                    );
            }
            console.log(response.status + " - " + response.statusText);
        });
    }

    // ----------------------------------------------------------------------------getLocation
    function getLocation() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition, showError);
        } else {
            showPosition();
            console.log("We can not identify your location /r/n Geolocation is not supported by this browser.");
        }
    }

    function showPosition(position) {
        var centerpoint;
        if (angular.isUndefined(position)) {
            centerpoint = { lat: -37.8447733, lng: 144.7661791 };
        } else {
            centerpoint = { lat: position.coords.latitude, lng: position.coords.longitude };
        }

        var mapProp = {
            center: centerpoint,
            zoom: 18,
            draggable: true,
            scrollwheel: false,
            zoomControl: true,
            clickableIcons: false,
            streetViewControl: false,
            disableDoubleClickZoom: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: false
            //styles: [{ "featureType": "landscape", "stylers": [{ "hue": "#FFBB00" }, { "saturation": 43.400000000000006 }, { "lightness": 37.599999999999994 }, { "gamma": 1 }] }, { "featureType": "road.highway", "stylers": [{ "hue": "#FFC200" }, { "saturation": -61.8 }, { "lightness": 45.599999999999994 }, { "gamma": 1 }] }, { "featureType": "road.arterial", "stylers": [{ "hue": "#FF0300" }, { "saturation": -100 }, { "lightness": 51.19999999999999 }, { "gamma": 1 }] }, { "featureType": "road.local", "stylers": [{ "hue": "#FF0300" }, { "saturation": -100 }, { "lightness": 52 }, { "gamma": 1 }] }, { "featureType": "water", "stylers": [{ "hue": "#0078FF" }, { "saturation": -13.200000000000003 }, { "lightness": 2.4000000000000057 }, { "gamma": 1 }] }, { "featureType": "poi", "stylers": [{ "hue": "#00FF6A" }, { "saturation": -1.0989010989011234 }, { "lightness": 11.200000000000017 }, { "gamma": 1 }] }]
        };
        gmap = new google.maps.Map(document.getElementById("mapholder"), mapProp);
    }

    function showError(error) {
        showPosition();
        switch (error.code) {
            case error.PERMISSION_DENIED:
                console.log("User denied the request for Geolocation.");
                break;
            case error.POSITION_UNAVAILABLE:
                console.log("Location information is unavailable.");
                break;
            case error.TIMEOUT:
                console.log("The request to get user location timed out.");
                break;
            case error.UNKNOWN_ERROR:
                console.log("An unknown error occurred.");
                break;
        }
    }

    // ----------------------------------------------------------------------------getCarTypes
    function getCarTypes(suburbId) {
        homeSrvc.getCarTypesbySuburb(suburbId)
            .then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    $scope.bookingForm.carTypeList = response.data.CarTypes;
                    $scope.bookingForm.maxiRange = response.data.maxiRange;
                    $scope.bookingForm.maxiRange.sort(function (a, b) { return a - b });
                    $scope.isCarTypeMaxi = false;
                    $scope.bookingForm.selectedCarType = $scope.bookingForm.carTypeList[0].Name;
                    $scope.bookingForm.selectedIcon = $scope.bookingForm.carTypeList[0].Icon;
                    bookingObj.CarType = 0; //reset
                } else {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.getCarTypesbySuburb(suburbId): INVALID RESPONSE', // name: string
                            {
                                ['handledAt']: 'HomeController.js',
                                ['handledFunc']: 'getCarTypes(suburbId)',
                                ['suburbId']: suburdId
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }
                    $scope.errorMsg = "Server is not accessible";
                }
            })
            .catch(function (err) {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.getCarTypesbySuburb(suburbId): FAIL', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: 'getCarTypes(suburbId)',
                            ['suburbId']: suburdId
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                if (angular.isDefined(err.status)) {
                    console.log(err.status + " - " + err.statusText);
                    $scope.errorMsg = "Server is not accessible";
                } else {
                    $scope.errorMsg = err.message;
                }
                //$scope.errorMsg = err.status + " - " + err.statusText;
            });
    }

    // ----------------------------------------------------------------------------trackAssignedTaxi
    function trackAssignedTaxi(bookingId, carNumber, puLat, puLng) {
        var isFirstPoint = true;
        var lastUpdate;
        var pkPoint = new google.maps.LatLng(puLat, puLng);

        if (angular.isUndefined(trackMap)) {
            var mapOptions = {
                center: { lat: puLat, lng: puLng },
                zoom: 17,
                scrollwheel: false,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            trackMap = new google.maps.Map(document.getElementById("mapholder"), mapOptions);
            //var trafficLayer = new google.maps.TrafficLayer();
            //trafficLayer.setMap(trackMap);
            passMarker = new google.maps.Marker({
                map: trackMap,
                position: new google.maps.LatLng(puLat, puLng),
                icon: "/Content/Images/map-pickup-icon.png",
                title: "Pickup point"
            });
            trackMarkers.push(passMarker);
        } else {
            passMarker.setPosition(pkPoint);
            trackMap.setCenter(pkPoint);
        }

        updateRouteonMap(bookingId, carNumber);

        function updateRouteonMap(bkId, carNum) {

            homeSrvc.getTaxiLocationbyNumber(carNum).then(function (response) {

                if ((response != null) && (response.data != null) && (response.data !== "")) {

                    if (!response.data.InError) {
                        console.log("CallBackInSec : " + response.data.CallBackInSec);
                        console.log("PointsCount : " + response.data.Points.length);
                        console.log("UpdatedTime : " + response.data.Updated);
                        var carPoints = [];
                        var pLoc;
                        carPoints = response.data.Points;
                        var cLoc = new google.maps.LatLng(carPoints[carPoints.length - 1].Latitude, carPoints[carPoints.length - 1].Longitude);

                        if (isFirstPoint) {
                            if (carPoints.length > 2) {
                                pLoc = new google.maps.LatLng(carPoints[carPoints.length - 2].Latitude, carPoints[carPoints.length - 2].Longitude);
                                var heading = google.maps.geometry.spherical.computeHeading(pLoc, cLoc);
                                carIcon = {
                                    path: "M17.402,0H5.643C2.526,0,0,3.467,0,6.584v34.804c0,3.116,2.526,5.644,5.643,5.644h11.759c3.116,0,5.644-2.527,5.644-5.644 V6.584C23.044,3.467,20.518,0,17.402,0z M22.057,14.188v11.665l-2.729,0.351v-4.806L22.057,14.188z M20.625,10.773 c-1.016,3.9-2.219,8.51-2.219,8.51H4.638l-2.222-8.51C2.417,10.773,11.3,7.755,20.625,10.773z M3.748,21.713v4.492l-2.73-0.349 V14.502L3.748,21.713z M1.018,37.938V27.579l2.73,0.343v8.196L1.018,37.938z M2.575,40.882l2.218-3.336h13.771l2.219,3.336H2.575z M19.328,35.805v-7.872l2.729-0.355v10.048L19.328,35.805z",
                                    scale: .7,
                                    strokeColor: "black",
                                    strokeWeight: .10,
                                    fillOpacity: 1,
                                    fillColor: "#404040",
                                    anchor: new google.maps.Point(10, 25),
                                    offset: "5%",
                                    rotation: heading
                                };
                            } else {
                                carIcon = {
                                    path: "M17.402,0H5.643C2.526,0,0,3.467,0,6.584v34.804c0,3.116,2.526,5.644,5.643,5.644h11.759c3.116,0,5.644-2.527,5.644-5.644 V6.584C23.044,3.467,20.518,0,17.402,0z M22.057,14.188v11.665l-2.729,0.351v-4.806L22.057,14.188z M20.625,10.773 c-1.016,3.9-2.219,8.51-2.219,8.51H4.638l-2.222-8.51C2.417,10.773,11.3,7.755,20.625,10.773z M3.748,21.713v4.492l-2.73-0.349 V14.502L3.748,21.713z M1.018,37.938V27.579l2.73,0.343v8.196L1.018,37.938z M2.575,40.882l2.218-3.336h13.771l2.219,3.336H2.575z M19.328,35.805v-7.872l2.729-0.355v10.048L19.328,35.805z",
                                    scale: .7,
                                    strokeColor: "black",
                                    strokeWeight: .10,
                                    fillOpacity: 1,
                                    fillColor: "#404040",
                                    anchor: new google.maps.Point(10, 25),
                                    offset: "5%"
                                    //url: "/Content/Images/yellow-taxi.png",
                                    //anchor: new google.maps.Point(10, 12)
                                };
                            }

                            carMarker = new google.maps.Marker({
                                map: trackMap,
                                position: cLoc,
                                icon: carIcon,
                                title: carNum
                            });
                            trackMarkers.push(carMarker);
                            isFirstPoint = false;

                            $timeout(function () {
                                trackMap.setZoom(17);
                                trackMap.setCenter(carMarker.getPosition());
                            }, 1000);
                            lastUpdate = carPoints[carPoints.length - 1].Time;
                        }

                        console.log("*************************************************************************");
                        var pathValues = carMarker.position.lat() + "," + carMarker.position.lng();
                        var lastTime = new Date(lastUpdate);

                        for (var k = 0; k < carPoints.length; k++) {
                            var pointTime = new Date(carPoints[k].Time);
                            if (pointTime > lastTime) {
                                console.log("lastTime : " + lastTime);
                                console.log("pointTime : " + pointTime);
                                console.log("-----------------------------------");
                                var pt = new google.maps.LatLng(carPoints[k].Latitude, carPoints[k].Longitude);
                                pathValues += "|" + pt.lat() + "," + pt.lng();
                                console.log("point " + k + " : " + carPoints[k].Latitude + " , " + carPoints[k].Longitude + " * Time : " + carPoints[k].Time);
                                lastUpdate = carPoints[k].Time;
                            }
                        }

                        homeSrvc.snapToRoad(pathValues).then(function (res) {
                            var duration, step, i;
                            if (angular.isDefined(res.data.snappedPoints)) {
                                step = res.data.snappedPoints.length;
                                i = 0;
                                duration = Math.floor((response.data.CallBackInSec * 1000) / step);
                                if (step > 1) {
                                    if (duration > 1000) {
                                        duration = 1000;
                                    }
                                    console.log("duration : " + duration);
                                    moveMarker();
                                }
                            }

                            function moveMarker() {
                                var latlng = new google.maps.LatLng(res.data.snappedPoints[i].location.latitude, res.data.snappedPoints[i].location.longitude);
                                var heading = google.maps.geometry.spherical.computeHeading(carMarker.getPosition(), latlng);
                                //var distance = google.maps.geometry.spherical.computeDistanceBetween(latlng, carMarker.getPosition()); // in meters

                                if (!trackMap.getBounds().contains(latlng)) {
                                    trackMap.panTo(carMarker.getPosition());
                                }

                                if (heading !== 0 && heading !== carIcon.rotation) {
                                    carIcon.rotation = heading;
                                    carMarker.setIcon(carIcon);
                                }

                                carMarker.animateTo(latlng, {
                                    easing: "linear",
                                    duration: duration,
                                    complete: function () {
                                        console.log(i + " / " + step);
                                        if (i < step - 1) {
                                            i++;
                                            moveMarker();
                                        } else {
                                            //updateRouteonMap(bkId, carNum); 
                                            // see DIS-383
                                        }
                                    }
                                });
                            }
                        });
                    }
                    if (trackList[bkId]) {
                        var delay = angular.isDefined(response.data.CallBackInSec) ? response.data.CallBackInSec : 1;
                        $timeout(function () { updateRouteonMap(bkId, carNum); }, delay * 1000);
                    }
                } else {
                    $timeout(function () {
                        if (carNum === response.data.CarNumber) {
                            angular.forEach($scope.bookingList, function (value, key) {
                                if (value.BookingId === bkId) {
                                    if ($scope.bookingList[key].Status === "Accepted" && trackList[bkId]) {
                                        updateRouteonMap(bkId, carNum);
                                    }
                                }
                            });
                        }
                    }, 2000);
                }
            }).catch(function (err) {
                if (angular.isDefined(err.status)) {
                    console.log(err.status + " - " + err.statusText);
                } else {
                    console.log(err.message);
                }
            });
        }

    }

    // ----------------------------------------------------------------------------showTrackMap
    $scope.showTrackMap = function (bkObj) {
        if ($scope.selectedBookingtoTrack !== bkObj.BookingId) {
            $scope.selectedBookingtoTrack = bkObj.BookingId;
            if (bkObj.Status === "Accepted") {
                if (angular.isDefined(nearByCars)) {
                    $interval.cancel(nearByCars);
                }
                trackList[bkObj.BookingId] = true;
                trackAssignedTaxi(bkObj.BookingId, bkObj.CarNumber, bkObj.PuLatitude, bkObj.PuLongitude);
            } else {
                trackList[bkObj.BookingId] = false;
            }
        }
    }

    // ----------------------------------------------------------------------------refreshBookingsStatus
    function refreshBookingsStatus() {
        if (angular.isDefined($scope.bookingList)) {
            $scope.bookingList = $filter("orderBy")($scope.bookingList, "StatusId");
            var activeList = [];
            activeList[0] = activeList[1] = activeList[2] = 0;
            for (var j = 0; j < listCount - 1; j++) {
                if (angular.isDefined($scope.bookingList[j]) && $scope.bookingList[j] != null) {
                    activeList[j] = angular.isDefined($scope.bookingList[j].BookingId) ? $scope.bookingList[j].BookingId : 0;
                }
            }
            if (activeList[0] !== 0 || activeList[1] !== 0 || activeList[2] !== 0) {
                homeSrvc.updateBookingList(activeList[0], activeList[1], activeList[2]).then(function (response) {
                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        if (!response.data.InError) {
                            $scope.activeBookings = 0;
                            for (var l = 0; l < listCount; l++) {
                                if (activeList[l] !== 0 && angular.isDefined($scope.bookingList[l]) && $scope.bookingList[l].StatusId !== response.data[l].StatusId) {
                                    $scope.bookingList[l] = response.data[l];
                                }
                                if (angular.isDefined($scope.bookingList[l]) && $scope.bookingList[l] != null) {

                                    if ($scope.bookingList[l].Status !== "Accepted") {
                                        if ($scope.selectedBookingtoTrack === $scope.bookingList[l].BookingId) {
                                            $scope.selectedBookingtoTrack = 0;
                                            for (var i = 0; i < trackMarkers.length; i++) {
                                                trackMarkers[i].setMap(null);
                                            }
                                            trackMarkers = [];
                                        }
                                        trackList[$scope.bookingList[l].BookingId] = false;
                                    }
                                    if ($scope.bookingList[l].Status !== "Completed" && $scope.bookingList[l].Status !== "Cancelled") {
                                        $scope.activeBookings = $scope.activeBookings + 1;
                                    }
                                    if ($scope.bookingList[l].Status === "Accepted" && $scope.selectedBookingtoTrack === 0) {
                                        if (angular.isDefined(nearByCars)) {
                                            $interval.cancel(nearByCars);
                                        }
                                        $scope.selectedBookingtoTrack = $scope.bookingList[index].BookingId;
                                        trackList[$scope.bookingList[l].BookingId] = true;
                                        trackAssignedTaxi($scope.bookingList[l].BookingId, $scope.bookingList[l].CarNumber, $scope.bookingList[l].PuLatitude, $scope.bookingList[l].PuLongitude);
                                    }
                                }
                            }
                        }
                    }
                });
            }

            if (angular.isDefined($scope.bookingList[0]) && $scope.bookingList[0] != null && $scope.bookingList[0].Status !== "Completed" && $scope.bookingList[0].Status !== "Cancelled") {
                if (angular.isUndefined(intervals[0])) {
                    intervals[0] = $interval(function () {
                        $scope.bookingList[0].DispatchWaitingTime--;
                    }, 1000);
                }
            }

            if (angular.isDefined($scope.bookingList[1]) && $scope.bookingList[1] != null && $scope.bookingList[1].Status !== "Completed" && $scope.bookingList[1].Status !== "Cancelled") {
                if (angular.isUndefined(intervals[1])) {
                    intervals[1] = $interval(function () {
                        $scope.bookingList[1].DispatchWaitingTime--;
                    }, 1000);
                }
            }

            if (angular.isDefined($scope.bookingList[2]) && $scope.bookingList[2] != null && $scope.bookingList[2].Status !== "Completed" && $scope.bookingList[2].Status !== "Cancelled") {
                if (angular.isUndefined(intervals[2])) {
                    intervals[2] = $interval(function () {
                        $scope.bookingList[2].DispatchWaitingTime--;
                    }, 1000);
                }
            }

        }
    }

    // ----------------------------------------------------------------------------showTaxisAround
    $scope.showTaxisAround = function () {
        if (angular.isUndefined(nearByCars)) {
            if (angular.isDefined(bookingObj.pickupObj) && angular.isDefined(bookingObj.pickupObj.GeoPoint)) {
                showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
            }
        }
    }

    // ----------------------------------------------------------------------------cartypeselected
    $scope.cartypeselected = function (item) {
        $scope.bookingForm.selectedCarType = item.Name;
        $scope.bookingForm.selectedIcon = item.Icon;
        $scope.isCarTypeMaxi = false;
        bookingObj.CarType = item.Id;
        if (item.Id === 3) {
            $scope.isCarTypeMaxi = true;
        }
    }

    // ----------------------------------------------------------------------------cancelBooking
    $scope.cancelBooking = function (bkId, index) {
        //ga("send", "event", "Booking", "Cancel", "Yes");
        if (!(bkId > 0)) {
            return;
        }
        $scope.isLoading = true;
        homeSrvc.cancelBooking(bkId).then(function (response) {
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                if (response.data.InError) {
                    $scope.bookingList[index].Message = response.data.ErrorMessage;
                    //$scope.showConfirm[index] = false;
                    //$scope.isLoading = false;
                } else {
                    console.log(response.data);
                    refreshBookingsStatus();
                }
                $timeout(function () {
                    $scope.showConfirm[index] = false;
                    $scope.isLoading = false;
                }, 1000);
            } else {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.cancelBooking(bkId): INVALID RESPONSE', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: '$scope.cancelBooking',
                            ['bookingId']: bkId
                        }   // properties?: {[string]:string}                                                                 
                        );
                }

                $scope.bookingList[index].Message = "Server is not accessible";
                $scope.showConfirm[index] = false;
                $scope.isLoading = false;
            }

        }).catch(function (err) {
            var appInsights = window.appInsights;
            if (appInsights) {
                appInsights.trackEvent('homeSrvc.cancelBooking(bkId): FAIL', // name: string
                    {
                        ['handledAt']: 'HomeController.js',
                        ['handledFunc']: '$scope.cancelBooking',
                        ['bookingId']: bkId
                    }   // properties?: {[string]:string}                                                                 
                    );
            }

            $scope.bookingList[index].Message(err.status + " - " + err.statusText);

        });
    }

    // ----------------------------------------------------------------------------keepBooking
    $scope.keepBooking = function (index) {
        //ga("send", "event", "Booking", "Cancel", "No");
        $scope.showConfirm[index] = !$scope.showConfirm[index];
    }

    // ----------------------------------------------------------------------------sendVerificationCode
    $scope.sendCode = function (number) {
        $scope.isSending = true;
        $scope.btnSendText = "";
        $http.get("/Home/SendVerificationCode", { params: { phoneNumber: number, userId: 0 } }).then(function (response) {
            if ((response != null) && (response.data != null) && (response.data)) {
                $scope.errorMsgCode = "";
                $scope.infoMsgCode = "Verification Code Sent";
                $scope.code01 = "";
            } else {
                $scope.infoMsgCode = "";
                $scope.errorMsgCode = "Failed to send sms";
            }
            $scope.btnSendText = "Resend code";
            $scope.isSending = false;
        }).catch(function (response) {
            console.log(response.status + " - " + response.statusText);
            $scope.btnSendText = "Resend code";
            $scope.isSending = false;
        });
    }

    // ----------------------------------------------------------------------------handleKeyboard
    $scope.handleKeyboard = function (event, maxLength) {
        var value_ = $("#code01").val();
        if (value_ != undefined && value_.toString().length === maxLength) {
            $scope.btnSendText = "";
            var verifyCode = value_;

            $http.get("/Home/VerifyMobileNumber", { params: { code: verifyCode, userId: 0, phNumber: $scope.mobileNumber } }).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data)) {
                    $scope.infoMsgCode = "";
                    $scope.errorMsgCode = "";
                    $scope.isSending = false;
                    $("#smsBookingModal").modal("hide");
                    submitRequestToServer(serverBookingObj);
                } else {
                    $scope.infoMsgCode = "";
                    $scope.errorMsgCode = "Code is not correct";
                }
                $scope.btnSendText = "Resend code";
            }).catch(function (response) {
                console.log(response.status + " - " + response.statusText);
                $scope.btnSendText = "Resend code";
            });
        }
    }

    $scope.limitKeypress = function ($event, maxLength) {
        var value_ = $("#code01").val();
        if (value_ != undefined && value_.toString().length >= maxLength) {
            $event.preventDefault();
        }
    }

    // ----------------------------------------------------------------------------verifyPhoneNumber  -- Not in Use
    $scope.verifyBooking = function (event, nextId) {
        if (nextId !== 5 && event.keyCode !== 8 && event.keyCode !== 46 && event.keyCode !== 9 && event.keyCode !== 13) {
            angular.element(document.querySelector("#code0" + nextId))[0].focus();
        }

    }

    // ----------------------------------------------------------------------------submitRequest
    $scope.submitRequest = function (formData) {
        $scope.errorMsg = "";
        $scope.recaptchaErrMsg = "";
        serverBookingObj = null;
        $scope.pbForm.$submitted = true;
        $scope.$broadcast("pbForm:$validate");
        if ($scope.pbForm.$invalid) {
            return;
        }
        //ga("send", "event", "Booking", "Request", bookingObj.pickupObj.AddressDbId);
        //if (validateRecaptcha()) {
        $scope.requested = false;
        if ($scope.pickupSelected && $scope.pbForm.$valid) {
            $scope.btnSubmitText = "";
            if (angular.isUndefined(formData.LastName)) {
                formData.LastName = "";
            }
            formData.ContactName = formData.FirstName + " " + formData.LastName;
            formData.CarType = bookingObj.CarType;
            formData.StateId = bookingObj.StateId;
            formData.PkState = bookingObj.pickupObj.Suburb.State;
            formData.AddressDbId = bookingObj.pickupObj.AddressDbId;
            formData.PkLatitude = bookingObj.pickupObj.GeoPoint.Latitude;
            formData.PkLongitude = bookingObj.pickupObj.GeoPoint.Longitude;
            formData.PkSuburbId = bookingObj.pickupObj.Suburb.Id;
            formData.PkSuburbName = bookingObj.pickupObj.Suburb.Name;
            formData.PkStreetName = bookingObj.pickupObj.Street.Name;
            formData.PkDesignationName = bookingObj.pickupObj.Designation.Name;
            formData.PkUnit = bookingObj.pickupObj.Unit;
            formData.PkNumber = bookingObj.pickupObj.Number;
            formData.PkStreetId = bookingObj.pickupObj.Street.StreetId;
            formData.PkStreetDesignationId = bookingObj.pickupObj.Street.StreetId + "," + bookingObj.pickupObj.Designation.DesignationId;
            formData.PkPlaceId = bookingObj.pickupObj.Place.Id;
            formData.PkPlaceName = bookingObj.pickupObj.Place.Name;
            formData.Remarks = formData.Remarks;
            if (jQuery("#g-recaptcha-response").length) {
                formData.grecaptcha = getRecaptchaResponse();
            } else {
                formData.grecaptcha = "";
            }
            if ($scope.destSelected) {
                formData.DestLatitude = bookingObj.destObj.GeoPoint.Latitude;
                formData.DestLongitude = bookingObj.destObj.GeoPoint.Longitude;
                formData.DestState = bookingObj.destObj.Suburb.State;
                formData.DestSuburbId = bookingObj.destObj.Suburb.Id;
                formData.DestSuburbName = bookingObj.destObj.Suburb.Name;
                formData.DestStreetName = bookingObj.destObj.Street.Name;
                formData.DestDesignationName = bookingObj.destObj.Designation.Name;
                formData.DestUnit = bookingObj.destObj.Unit;
                formData.DestNumber = bookingObj.destObj.Number;
                formData.DestStreetId = bookingObj.destObj.Street.StreetId;
                formData.DestStreetDesignationId = bookingObj.destObj.Street.StreetId + "," + bookingObj.destObj.Designation.DesignationId;
                formData.DestPlaceId = bookingObj.destObj.Place.Id;
                formData.DestPlaceName = bookingObj.destObj.Place.Name;
            } else {
                formData.DestSuburbId = 0;
                //pbForm.dest = "As Requested";
                //$scope.bookingForm.dstAddress = "As Requested";
            }

            if (formData.RememberMe) {
                $cookies.remove("bkForm");
                $cookies.remove("bkObject");
                $cookies.putObject("bkForm", $scope.bookingForm);
                $cookies.putObject("bkObject", bookingObj);
            } else {
                $cookies.remove("bkForm");
                $cookies.remove("bkObject");
            }

            console.log(formData);

            $http.get("/Home/ValidatePhoneNumber", { params: { phoneInput: formData.ContactPhone } }).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    if (response.data.IsValidMobileNumber) {
                        serverBookingObj = formData;
                        $scope.sendCode(formData.ContactPhone);
                        $scope.btnSubmitText = "Request 13CABS";
                        $("#smsBookingModal").on("shown.bs.modal", function () {
                            $("#code01").focus();
                        });
                        $("#smsBookingModal").modal({
                            backdrop: "static",
                            keyboard: true
                        });
                        $("#code01").focus();
                        $scope.mobileNumber = response.data.PhoneNumber;
                        $scope.infoMsgCode = "";
                        $scope.errorMsgCode = "";
                        $scope.isSending = false;
                    } else {
                        submitRequestToServer(formData);
                    }
                } else {
                    submitRequestToServer(formData);
                }
            });

        } else {
            return;
        }
    }

    // --------------------------------------------------------------------------------submitRequestToServer
    function submitRequestToServer(requestObj) {
        $scope.btnSubmitText = "";
        homeSrvc.submitBooking(requestObj).then(function (response) {
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                if (response.data.InError) {
                    $scope.errorMsg = response.data.ErrorMessage;
                } else {
                    console.log("submitBooking : ");
                    console.log(response.data);
                    $scope.activeBookings = $scope.activeBookings + 1;
                    if ($scope.bookingList.length > 2) {
                        $scope.bookingList.splice(2, 1);
                    }
                    if ($scope.pbForm.dest.$$lastCommittedViewValue === "") {
                        response.data.DestAddress = "AS REQUESTED";
                    }
                    $scope.bookingList.unshift(response.data);
                    refreshBookingsStatus();
                    $cookies.remove("bkList");
                    var expireDate = new Date();
                    expireDate.setMinutes(expireDate.getMinutes() + 50);
                    var userBkList = [];
                    for (var i = 0; i < $scope.bookingList.length; i++) {
                        userBkList[i] = $scope.bookingList[i].BookingId;
                    }
                    $cookies.putObject("bkList", userBkList, { 'expires': expireDate });
                    if (angular.isDefined(nearByCars)) {
                        $interval.cancel(nearByCars);
                    }
                    if (angular.isDefined(markerList)) {
                        for (var k = 0; k < markerList.length; k++) {
                            markerList[k].setMap(null);
                        }
                        markerList = [];
                    }
                    getCarTypes(requestObj.PkSuburbId);
                    initiateDateTimeList(requestObj.AddressDbId);
                    $scope.bookingForm.TimeMode = "tmNow";
                    gmap.setZoom(16);

                    if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                        pkMarker.setMap(null);
                    }
                    pkMarker = new google.maps.Marker({
                        position: new google.maps.LatLng(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude),
                        map: gmap,
                        icon: "/Content/Images/map-pickup-icon.png",
                        title: bookingObj.pickupObj.Place.Name
                    });
                    gmap.panTo(pkMarker.getPosition());
                    showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                    nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                    $scope.pbForm.dest = "";
                    $scope.bookingForm.dstAddress = "";
                    $scope.destSelected = false;
                    bookingObj.destObj = {
                        AddressDbId: 0,
                        GeoPoint: { Latitude: 0, Longitude: 0 },
                        Designation: { DesignationId: 0, Name: "" },
                        Number: "",
                        Place: { Id: 0, Name: "" },
                        Street: { StreetId: 0, Name: "" },
                        Suburb: {
                            Id: 0,
                            IsServiceable: false,
                            IsDefaultPickup: false,
                            Name: "",
                            NspPhone: "",
                            Postcode: "",
                            State: "",
                            AddressDbId: 0,
                            GeoPoint: { Latitude: 0, Longitude: 0 }
                        },
                        Unit: ""
                    };
                    $scope.pbForm.$submitted = false;
                    $scope.pbForm.$setPristine();

                }
            } else {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.submitBooking(requestObj): INVALID RESPONSE', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: 'submitRequestToServer(requestObj)',
                            ['requestObj']: JSON.stringify(requestObj)
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                console.log("submitBooking error : ");
                console.log(response);
                $scope.errorMsg = "Server is not accessible";
            }
            $scope.btnSubmitText = "Request 13CABS";
            resetRecaptcha();
        }).catch(function (err) {
            var appInsights = window.appInsights;
            if (appInsights) {
                appInsights.trackEvent('homeSrvc.submitBooking(requestObj): FAIL', // name: string
                    {
                        ['handledAt']: 'HomeController.js',
                        ['handledFunc']: 'submitRequestToServer(requestObj)',
                        ['requestObj']: JSON.stringify(requestObj)
                    }   // properties?: {[string]:string}                                                                 
                    );
            }
            if (angular.isDefined(err.status)) {
                console.log("submitBooking : " + err.status + " - " + err.statusText);
                $scope.errorMsg = "Server is not accessible";
            } else {
                $scope.errorMsg = err.message;
            }
            $scope.btnSubmitText = "Request 13CABS";
            resetRecaptcha();
        });
    }

    refreshBookingsStatus();
    $interval(refreshBookingsStatus, 5000);

    // --------------------------------------------------------------------------------timeout
    $timeout(function () {
        $("#onlineRequest").draggable({
            containment: "parent",
            opacity: 0.5,
            snap: false
        });
        $("#bookingStatus").draggable({
            containment: "parent",
            opacity: 0.5,
            snap: false
        });
        //directionsService = new google.maps.DirectionsService;
        //directionsDisplay = new google.maps.DirectionsRenderer;
        //directionsDisplay.setOptions(rendererOptions);
        // ---------------------------------------------------------
        var options = { componentRestrictions: { country: "au" } };
        var autocomplete = new google.maps.places.Autocomplete(document.getElementById("pickup"), options);
        autocomplete.addListener("place_changed", getPickupAddressDetails);

        var autocompleteDest = new google.maps.places.Autocomplete(document.getElementById("dest"), options);
        autocompleteDest.addListener("place_changed", getDestAddressDetails);

        // ----------------------------------------------------------------------------getPickupAddressDetails
        function getPickupAddressDetails() {
            var place = autocomplete.getPlace();
            if (angular.isUndefined(place.address_components)) {
                $scope.pkErrMsg = "Please enter valid street address";
                $scope.pickupSelected = false;
                $scope.$apply();
            }
            else {
                $scope.pkErrMsg = "";
                $scope.isLoadingPk = true;
                console.log("googlePlace : ");
                console.log($scope.pbForm.pickup);
                $scope.bookingForm.pkAddress = jQuery("#pickup").val();
                var inputPlace = {
                    address_components: place.address_components,
                    geometry: place.geometry,
                    place_id: place.place_id,
                    types: place.types
                };
                inputPlace.LocationType = 1;
                homeSrvc.verifyGoogleSearchResult(inputPlace).then(function (response) {
                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        response.data.Place.Name = place.name;
                        pickupObj = response.data;
                        console.log("api verified pickup : ");
                        console.log(pickupObj);
                        bookingObj.pickupObj = pickupObj;
                        bookingObj.StateId = homeSrvc.getStateId(pickupObj.Suburb.State);
                        if (pickupObj.Suburb.IsServiceable) {
                            getCarTypes(pickupObj.Suburb.Id);
                            initiateDateTimeList(pickupObj.AddressDbId);
                            $scope.pickupSelected = true;
                            showPosition();
                            gmap.setCenter(place.geometry.location);
                            gmap.setZoom(16);
                            if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                                pkMarker.setMap(null);
                            }
                            pkMarker = new google.maps.Marker({
                                position: place.geometry.location,
                                map: gmap,
                                icon: "/Content/Images/map-pickup-icon.png",
                                title: place.name
                            });
                            if (angular.isDefined(nearByCars)) { $interval.cancel(nearByCars); }
                            if (angular.isDefined(markerList)) {
                                for (var k = 0; k < markerList.length; k++) {
                                    markerList[k].setMap(null);
                                }
                                markerList = [];
                            }
                            showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                            nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                            $scope.pbForm.dest = "";
                            $scope.bookingForm.dstAddress = "";
                            $scope.destSelected = false;
                            bookingObj.destObj = {
                                AddressDbId: 0,
                                GeoPoint: { Latitude: 0, Longitude: 0 },
                                Designation: { DesignationId: 0, Name: "" },
                                Number: "",
                                Place: { Id: 0, Name: "" },
                                Street: { StreetId: 0, Name: "" },
                                Suburb: {
                                    Id: 0,
                                    IsServiceable: false,
                                    IsDefaultPickup: false,
                                    Name: "",
                                    NspPhone: "",
                                    Postcode: "",
                                    State: "",
                                    AddressDbId: 0,
                                    GeoPoint: { Latitude: 0, Longitude: 0 }
                                },
                                Unit: ""
                            };
                        } else {
                            $scope.pkErrMsg = "Web bookings are not available from this address";
                        }
                    } else {
                        var appInsights = window.appInsights;
                        if (appInsights) {
                            appInsights.trackEvent('homeSrvc.verifyGoogleSearchResult(inputPlace): INVALID RESPONSE', // name: string
                                {
                                    ['handledAt']: 'HomeController.js',
                                    ['handledFunc']: 'getDestAddressDetails',
                                    ['inputPlace']: JSON.stringify(inputPlace)
                                }   // properties?: {[string]:string}                                                                 
                                );
                        }
                        $scope.pkErrMsg = "Server is not accessible";
                    }
                    $scope.isLoadingPk = false;
                }).catch(function (err) {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.verifyGoogleSearchResult(inputPlace): FAIL', // name: string
                            {
                                ['handledAt']: 'HomeController.js',
                                ['handledFunc']: 'getDestAddressDetails',
                                ['inputPlace']: JSON.stringify(inputPlace)
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }
                    if (angular.isDefined(err.status)) {
                        console.log("api pickup : " + err.status + " - " + err.statusText);
                    } else {
                        console.log(err.message);
                    }
                    $scope.pkErrMsg = "Please check your pickup address";
                    $scope.pickupSelected = false;
                    $scope.isLoadingPk = false;
                });
            }
        }

        // ----------------------------------------------------------------------------getDestAddressDetails
        function getDestAddressDetails() {
            var dest = autocompleteDest.getPlace();
            if (angular.isUndefined(dest.address_components)) {
                $scope.destErrMsg = "Please check your destination address";
                $scope.destSelected = false;
                $scope.$apply();
                return;
            }
            $scope.destErrMsg = "";
            $scope.isLoadingDest = true;
            $scope.bookingForm.dstAddress = jQuery("#dest").val();
            dest.LocationType = 2;
            homeSrvc.verifyGoogleSearchResult(dest).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    response.data.Place.Name = dest.name;
                    destObj = response.data;
                    console.log("api verified destination : ");
                    console.log(destObj);
                    bookingObj.destObj = destObj;

                    if (bookingObj.pickupObj.AddressDbId !== destObj.AddressDbId) {
                        $scope.destErrMsg = "Please check your destination address";
                        $scope.destSelected = false;
                        $scope.isLoadingDest = false;
                        return;
                    }

                    $scope.destSelected = true;

                    if (angular.isDefined(nearByCars)) {
                        $interval.cancel(nearByCars);
                    }

                    if (angular.isDefined(markerList)) {
                        for (var k = 0; k < markerList.length; k++) {
                            markerList[k].setMap(null);
                        }
                        markerList = [];
                    }

                    //directionsDisplay.setMap(null);
                    if (angular.isDefined(destMarker) && angular.isObject(destMarker)) {
                        destMarker.setMap(null);
                    }
                    destMarker = new google.maps.Marker({
                        position: dest.geometry.location,
                        map: gmap,
                        icon: "/Content/Images/map-dest-icon.png",
                        title: dest.name
                    });
                }
                else {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.verifyGoogleSearchResult(dest): INVALID RESPONSE', // name: string
                            {
                                ['handledAt']: 'HomeController.js',
                                ['handledFunc']: 'getDestAddressDetails',
                                ['dest']: JSON.stringify(dest)
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }

                    $scope.destErrMsg = "Server is not accessible";
                    $scope.destSelected = false;
                }
                $scope.isLoadingDest = false;
            }).catch(function (err) {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.verifyGoogleSearchResult(dest): FAIL', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: 'getDestAddressDetails',
                            ['dest']: JSON.stringify(dest)
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                if (angular.isDefined(err.status)) {
                    console.log("api destination : " + err.status + " - " + err.statusText);
                } else {
                    console.log(err.message);
                }
                $scope.destErrMsg = "Please check your destination address";
                $scope.destSelected = false;
                $scope.isLoadingDest = false;
            });
        }

        // ----------------------------------------------------------------------------Marker.animateTo
        // newPosition        - the new Position as google.maps.LatLng()
        // options            - optional options object (optional)
        // options.duration   - animation duration in ms (default 1000)
        // options.easing     - easing function from jQuery and/or the jQuery easing plugin (default 'linear')
        // options.complete   - callback function. Gets called, after the animation has finished
        google.maps.Marker.prototype.animateTo = function (newPosition, options) {

            var defaultOptions = {
                duration: 1000,
                easing: "linear",
                complete: null
            };
            options = options || {};

            // complete missing options
            for (key in defaultOptions) {
                options[key] = options[key] || defaultOptions[key];
            }

            // throw exception if easing function doesn't exist
            if (options.easing !== "linear") {
                if (typeof jQuery == "undefined" || !jQuery.easing[options.easing]) {
                    throw "\"" + options.easing + "\" easing function doesn't exist. Include jQuery and/or the jQuery easing plugin and use the right function name.";
                    return;
                }
            }

            window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
            window.cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;

            // save current position. prefixed to avoid name collisions. separate for lat/lng to avoid calling lat()/lng() in every frame
            this.AT_startPosition_lat = this.getPosition().lat();
            this.AT_startPosition_lng = this.getPosition().lng();
            var newPositionLat = newPosition.lat();
            var newPositionLng = newPosition.lng();

            // crossing the 180° meridian and going the long way around the earth?
            if (Math.abs(newPositionLng - this.AT_startPosition_lng) > 180) {
                if (newPositionLng > this.AT_startPosition_lng) {
                    newPositionLng -= 360;
                } else {
                    newPositionLng += 360;
                }
            }

            var animateStep = function (marker, startTime) {
                var ellapsedTime = (new Date()).getTime() - startTime;
                var durationRatio = ellapsedTime / options.duration; // 0 - 1
                var easingDurationRatio = durationRatio;

                // use jQuery easing if it's not linear
                if (options.easing !== "linear") {
                    easingDurationRatio = jQuery.easing[options.easing](durationRatio, ellapsedTime, 0, 1, options.duration);
                }

                if (durationRatio < 1) {
                    var deltaPosition = new google.maps.LatLng(marker.AT_startPosition_lat + (newPositionLat - marker.AT_startPosition_lat) * easingDurationRatio,
                                                                marker.AT_startPosition_lng + (newPositionLng - marker.AT_startPosition_lng) * easingDurationRatio);
                    marker.setPosition(deltaPosition);

                    // use requestAnimationFrame if it exists on this browser. If not, use setTimeout with ~60 fps
                    if (window.requestAnimationFrame) {
                        marker.AT_animationHandler = window.requestAnimationFrame(function () { animateStep(marker, startTime) });
                    } else {
                        marker.AT_animationHandler = setTimeout(function () { animateStep(marker, startTime) }, 17);
                    }

                } else {

                    marker.setPosition(newPosition);

                    if (typeof options.complete === "function") {
                        options.complete();
                    }

                }
            }

            // stop possibly running animation
            if (window.cancelAnimationFrame) {
                window.cancelAnimationFrame(this.AT_animationHandler);
            } else {
                clearTimeout(this.AT_animationHandler);
            }

            animateStep(this, (new Date()).getTime());
        }

    }, 3000);

    // ----------------------------------------------------------------------------showNearbyCars
    function showNearbyCars(centerLat, centerLng, targetMap) {
        if (angular.isUndefined(centerLat) || angular.isUndefined(centerLng) || angular.isUndefined(targetMap)) {
            return;
        } else {
            homeSrvc.getNearbyCars(centerLat, centerLng, 20).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    var nearbyCarsList = response.data;
                    for (var j = 0; j < markerList.length; j++) {
                        markerList[j].setMap(null);
                    }
                    markerList = [];
                    for (var i = 0; i < nearbyCarsList.length; i++) {
                        markerList[i] = new google.maps.Marker({
                            position: new google.maps.LatLng(nearbyCarsList[i].Latitude, nearbyCarsList[i].Longitude),
                            map: targetMap,
                            icon: "/Content/Images/yellow-taxi.png",
                            title: nearbyCarsList[i].CarNumber
                        });
                    }
                } else {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.getNearbyCars(centerLat, centerLng, 20): INVALID RESPONSE', // name: string
                            {
                                ['handledAt']: 'HomeController.js',
                                ['handledFunc']: 'showNearbyCars(centerLat, centerLng, targetMap)',
                                ['lat']: centerLat,
                                ['lng']: centerLng
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }
                    $scope.errorMsg = "Server is not accessible";
                }
            }).catch(function (err) {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.getNearbyCars(centerLat, centerLng, 20): FAIL', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: 'showNearbyCars(centerLat, centerLng, targetMap)',
                            ['lat']: centerLat,
                            ['lng']: centerLng
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                if (angular.isDefined(err.status)) {
                    console.log(err.status + " - " + err.statusText);
                } else {
                    console.log(err.message);
                }
            });
        }
    }

    // debug test
    //$timeout(function () {
    //    trackAssignedTaxi("10203040", "T8267", -37.8274851, 144.9527565);
    //}, 5000);
}]);

// ##################################################################################################################################################
// Fleet Info Cntrl #################################################################################################################################
// ##################################################################################################################################################

mainApp.controller("fleetCtrl", function ($scope) {

    jQuery("#animatedCars").addClass("hideme");

    var handler = onVisibilityChange(jQuery("#animatedCars"), function (el) {
        el.addClass("showme animated slideInRight").removeClass("hideme");
    });

    // load - DOMContentLoaded - scroll
    $(document).on("scroll resize", handler);
});

// ##################################################################################################################################################
// Fare Estimate Cntrl ##############################################################################################################################
// ##################################################################################################################################################

mainApp.controller("fareEstCtrl", ["$scope", "homeSrvc", "$timeout", function ($scope, homeSrvc, $timeout) {

    $scope.isPkSelected = false;
    $scope.isDestSelected = false;
    $scope.calculated = false;
    $scope.failed = false;
    $scope.validated = false;
    $scope.btnEstimateText = "Estimate";

    // Google Address Search
    var options = {
        componentRestrictions: { country: "au" }
    };

    var fareRequest = { PuLat: 0, PuLng: 0, DestLat: 0, DestLng: 0 };
    var directionsService, rendererOptions, directionsDisplay;
    var fmap, pkMarker, destMarker;

    $timeout(function () {

        // ----------------------------------------------------------------------------getPickupAddressEst
        function getPickupAddressEst() {
            var place = autocompleteEstPk.getPlace();
            if (angular.isUndefined(place.address_components)) {
                $scope.isPkSelected = false;
                return;
            }
            var pickup = angular.fromJson(place);
            console.log(pickup);
            fareRequest.PuLat = pickup.geometry.location.lat();
            fareRequest.PuLng = pickup.geometry.location.lng();
            //street_number, route, locality, administrative_area_level_1, postal_code, country
            $scope.isPkSelected = true;
        }

        // ----------------------------------------------------------------------------getDestAddressEst
        function getDestAddressEst() {
            var dest = autocompleteEstDest.getPlace();
            if (angular.isUndefined(dest.address_components)) {
                $scope.isDestSelected = false;
                return;
            }
            var destination = angular.fromJson(dest);
            console.log(destination);
            fareRequest.DestLat = destination.geometry.location.lat();
            fareRequest.DestLng = destination.geometry.location.lng();
            $scope.isDestSelected = true;
        }

        var autocompleteEstPk = new google.maps.places.Autocomplete(document.getElementById("pickupEst"), options);
        autocompleteEstPk.addListener("place_changed", getPickupAddressEst);

        var autocompleteEstDest = new google.maps.places.Autocomplete(document.getElementById("destEst"), options);
        autocompleteEstDest.addListener("place_changed", getDestAddressEst);


        // ----------------------------------------------------------------------------Show Google Map
        var prop = {
            center: { lat: -37.8862602, lng: 145.0831 },
            zoom: 13,
            draggable: false,
            scrollwheel: false,
            zoomControl: false,
            clickableIcons: false,
            streetViewControl: false,
            disableDoubleClickZoom: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: false
        };
        fmap = new google.maps.Map(document.getElementById("fareMap"), prop);
        directionsService = new google.maps.DirectionsService();
        rendererOptions = { map: fmap, suppressMarkers: true };
        directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);

        $timeout(function () {
            var elem1 = jQuery("#fareMap").find(".gmnoprint")[0];
            if (angular.isDefined(jQuery("#fareMap").find(elem1))) {
                var gmnoprint = jQuery("#fareMap").find(elem1);
                if (angular.isDefined(gmnoprint.attr("style"))) {
                    gmnoprint.css("right", "190px");
                    gmnoprint.css("bottom", "35px");
                }
            }

            var elem2 = jQuery("#fareMap").find(".gmnoprint")[1];
            if (angular.isDefined(jQuery("#fareMap").find(elem2))) {
                var gmnoprint1 = jQuery("#fareMap").find(elem2);
                if (angular.isDefined(gmnoprint1.attr("style"))) {
                    gmnoprint1.css("right", "210px");
                    gmnoprint1.css("bottom", "20px");
                }
            }

            var elem3 = jQuery("#fareMap").find(".gm-style-cc")[2];
            if (angular.isDefined(jQuery("#fareMap").find(elem3))) {
                var gmStyleCc = jQuery("#fareMap").find(elem3);
                if (angular.isDefined(gmStyleCc.attr("style"))) {
                    gmStyleCc.css("right", "200px");
                    gmStyleCc.css("bottom", "5px");
                }
            }

            var elem4 = jQuery("#fareMap").find(".gm-style");
            var logo = elem4.children("div")[1];
            if (angular.isDefined(elem4.find(logo))) {
                var logoStyle = elem4.find(logo);
                if (angular.isDefined(logoStyle.attr("style"))) {
                    logoStyle.css("left", "210px");
                    logoStyle.css("bottom", "50px");
                }
            }
        }, 3000);

    }, 2000);

    //var componentForm = { street_number: "short_name", route: "long_name", locality: "long_name", administrative_area_level_1: "short_name", country: "long_name", postal_code: "short_name" };

    // ----------------------------------------------------------------------------estimateFare
    $scope.estimateFare = function () {
        if (angular.isUndefined(fareRequest) || !$scope.isPkSelected || !$scope.isDestSelected) {
            return;
        }
        //ga("send", "event", "Estimate", "Estimate Fare");
        $scope.btnEstimateText = "";
        $scope.sedanFare = "";
        $scope.silverFare = "";
        $scope.maxiFare = "";
        $scope.wagonFare = "";
        $scope.wheelchairFare = "";
        homeSrvc.estimateFare(fareRequest).then(function (response) {
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                var fareObj = response.data;
                console.log(fareObj);
                if (fareObj.Success) {
                    if (angular.isUndefined(fareObj.Fare["Sedan"]) && angular.isUndefined(fareObj.Fare["SilverService"]) && angular.isUndefined(fareObj.Fare["Maxi"])) {
                        $scope.failed = true;
                        $scope.calculated = true;
                        $scope.errMsg = "Selected route is not serviceable";
                    } else {
                        $scope.failed = false;
                        $scope.calculated = true;
                        if (angular.isDefined(fareObj.Fare["Sedan"])) {
                            $scope.sedanFare = fareObj.Fare["Sedan"].Range;
                        }
                        if (angular.isDefined(fareObj.Fare["SilverService"])) {
                            $scope.silverFare = fareObj.Fare["SilverService"].Range;
                        }
                        if (angular.isDefined(fareObj.Fare["Maxi"])) {
                            $scope.maxiFare = fareObj.Fare["Maxi"].Range;
                        }
                        if (angular.isDefined(fareObj.Fare["Wagon"])) {
                            $scope.wagonFare = fareObj.Fare["Wagon"].Range;
                        }
                        if (angular.isDefined(fareObj.Fare["Wheelchair"])) {
                            $scope.wheelchairFare = fareObj.Fare["Wheelchair"].Range;
                        }
                    }

                    $scope.distance = fareObj.Distance.Text;
                    $scope.eta = fareObj.Eta.Text;
                    if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                        pkMarker.setMap(null);
                    }
                    if (angular.isDefined(destMarker) && angular.isObject(destMarker)) {
                        destMarker.setMap(null);
                    }
                    if (angular.isDefined(directionsDisplay) && angular.isObject(directionsDisplay)) {
                        directionsDisplay.setMap(null);
                    }
                    var start = new google.maps.LatLng(fareRequest.PuLat, fareRequest.PuLng);
                    var end = new google.maps.LatLng(fareRequest.DestLat, fareRequest.DestLng);
                    pkMarker = new google.maps.Marker({ position: start, map: fmap, icon: "/Content/Images/map-pickup-icon.png", title: "" });
                    destMarker = new google.maps.Marker({ position: end, map: fmap, icon: "/Content/Images/map-dest-icon.png", title: "" });
                    directionsDisplay.setMap(fmap);
                    var request = { origin: start, destination: end, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING };
                    directionsService.route(request, function (response, status) {
                        if (status === google.maps.DirectionsStatus.OK) {
                            directionsDisplay.setDirections(response);
                        }
                    });

                    // rePosition Google logo and terms
                    $timeout(function () {

                        var elem1 = jQuery("#fareMap").find(".gmnoprint")[0];
                        if (angular.isDefined(jQuery("#fareMap").find(elem1))) {
                            var gmnoprint = jQuery("#fareMap").find(elem1);
                            if (angular.isDefined(gmnoprint.attr("style"))) {
                                gmnoprint.css("right", "190px");
                                gmnoprint.css("bottom", "35px");
                            }
                        }

                        var elem2 = jQuery("#fareMap").find(".gmnoprint")[1];
                        if (angular.isDefined(jQuery("#fareMap").find(elem2))) {
                            var gmnoprint1 = jQuery("#fareMap").find(elem2);
                            if (angular.isDefined(gmnoprint1.attr("style"))) {
                                gmnoprint1.css("right", "210px");
                                gmnoprint1.css("bottom", "20px");
                            }
                        }

                        var elem3 = jQuery("#fareMap").find(".gm-style-cc")[2];
                        if (angular.isDefined(jQuery("#fareMap").find(elem3))) {
                            var gmStyleCc = jQuery("#fareMap").find(elem3);
                            if (angular.isDefined(gmStyleCc.attr("style"))) {
                                gmStyleCc.css("right", "200px");
                                gmStyleCc.css("bottom", "5px");
                            }
                        }

                        var elem4 = jQuery("#fareMap").find(".gm-style");
                        var logo = elem4.children("div")[1];
                        if (angular.isDefined(elem4.find(logo))) {
                            var logoStyle = elem4.find(logo);
                            if (angular.isDefined(logoStyle.attr("style"))) {
                                logoStyle.css("left", "210px");
                                logoStyle.css("bottom", "50px");
                            }
                        }
                    }, 3000);

                } else {
                    $scope.failed = true;
                    $scope.calculated = false;
                    if (angular.isUndefined(fareObj.Message)) {
                        $scope.errMsg = fareObj;
                    } else {
                        $scope.errMsg = fareObj.Message;
                    }
                }
            }
            else {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.estimateFare(fareRequest): INVALID RESPONSE', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: '$scope.estimateFare',
                            ['fareRequest']: JSON.stringify(fareRequest)
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                $scope.failed = true;
                $scope.calculated = false;
                $scope.errMsg = "Server is not accessible";
            }
            $scope.btnEstimateText = "Estimate";
        }).catch(function (err) {
            var appInsights = window.appInsights;
            if (appInsights) {
                appInsights.trackEvent('homeSrvc.estimateFare(fareRequest): FAIL', // name: string
                    {
                        ['handledAt']: 'HomeController.js',
                        ['handledFunc']: '$scope.estimateFare',
                        ['fareRequest']: JSON.stringify(fareRequest)
                    }   // properties?: {[string]:string}                                                                 
                    );
            }
            if (angular.isDefined(err.status)) {
                $scope.errMsg = err.status + " - " + err.statusText;
            } else {
                $scope.errMsg = err.message;
            }
            $scope.failed = true;
            $scope.calculated = false;
            $scope.btnEstimateText = "Estimate";
        });
    }

}]);

// ##################################################################################################################################################
// Contact Us Cntrl #################################################################################################################################
// ##################################################################################################################################################

mainApp.controller("contactCtrl", function ($scope, homeSrvc, $http) {

    $scope.bgContact = "bg-contact-us.png";
    $scope.currentCity = "Sydney";
    $scope.templateUrl = "/Templates/contactInfoSydney.html";

    $http.get("https://ipinfo.io").then(function (response) {
        if ((response != null) && (response.data != null) && (response.data !== "")) {
            console.log(response.data);
            if (response.data.city === "Melbourne" || response.data.region === "Victoria") {
                $scope.currentCity = "Melbourne";
                $scope.templateUrl = "/Templates/contactInfoMelbourne.html";
            } else if (response.data.city === "Sydney" || response.data.region === "New South Wales") {
                $scope.currentCity = "Sydney";
            } else if (response.data.city === "Newcastle" || response.data.region === "New South Wales") {
                $scope.currentCity = "Newcastle";
                $scope.templateUrl = "/Templates/contactInfoNewcastle.html";
            } else if (response.data.city === "Adelaide" || response.data.region === "South Australia") {
                $scope.currentCity = "Adelaide";
                $scope.templateUrl = "/Templates/contactInfoAdelaide.html";
            }
        }
    });

    $scope.cityChanged = function (city) {
        if (city === "S" || city === "Sydney") {
            $scope.currentCity = "Sydney";
            $scope.templateUrl = "/Templates/contactInfoSydney.html";
        } else if (city === "M" || city === "Melbourne") {
            $scope.currentCity = "Melbourne";
            $scope.templateUrl = "/Templates/contactInfoMelbourne.html";
        } else if (city === "N" || city === "Newcastle") {
            $scope.currentCity = "Newcastle";
            $scope.templateUrl = "/Templates/contactInfoNewcastle.html";
        } else if (city === "A" || city === "Adelaide") {
            $scope.currentCity = "Adelaide";
            $scope.templateUrl = "/Templates/contactInfoAdelaide.html";
        }
    }

    $scope.geClick = function () {
        $scope.templateUrl = "/Templates/generalEnquiry.html";
        $scope.bgContact = "bg-contact-us.png";
    }

    $scope.lpClick = function () {
        $scope.templateUrl = "/Templates/lostProperty.html";
        $scope.bgContact = "bg-lost-property.png";
    }

});

mainApp.controller("generalEnqCtrl", function ($scope, homeSrvc) {
    $scope.btnSubmitText = "Submit enquiry";
    $scope.errorMsg = "";
    $scope.infoMsg = "";

    $scope.submitEnquiry = function (formData) {
        $scope.btnSubmitText = "";
        var region = 1;
        var city = $scope.$parent.currentCity;
        if (city === "Sydney") {
            region = 2;
        }
        console.log(formData);
        var model = {};
        model.EnquiryType = 1;
        model.EnquiryRegion = region;
        model.ContactName = formData.fname + " " + formData.lname;
        model.ContactPhone = formData.phone;
        model.ContactEmail = formData.email,
        model.Message = formData.message;
        console.log(model);

        homeSrvc.submitEnquiry(model).then(function (response) {
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                if (response.data.InError) {
                    $scope.errorMsg = response.data.ErrorMessage;
                    $scope.infoMsg = "";
                } else {
                    console.log(response.data);
                    $scope.infoMsg = response.data.InfoMessage;
                    $scope.errorMsg = "";
                    $scope.geForm.$setPristine();
                    $scope.enquiryForm = {};
                }
            } else {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.submitEnquiry(model): INVALID RESPONSE', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: '$scope.submitEnquiry',
                            ['model']: JSON.stringify(model)
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                $scope.errorMsg = "Server is not accessible";
                $scope.infoMsg = "";
            }
            $scope.btnSubmitText = "Submit enquiry";
        }).catch(function (err) {
            var appInsights = window.appInsights;
            if (appInsights) {
                appInsights.trackEvent('homeSrvc.submitEnquiry(model): FAIL', // name: string
                    {
                        ['handledAt']: 'HomeController.js',
                        ['handledFunc']: '$scope.submitEnquiry',
                        ['model']: JSON.stringify(model)
                    }   // properties?: {[string]:string}                                                                 
                    );
            }

            if (angular.isDefined(err.status)) {
                console.log(err.status + " - " + err.statusText);
                $scope.errorMsg = "Server is not accessible";
            } else {
                $scope.errorMsg = err.message;
            }
            $scope.infoMsg = "";
            $scope.btnSubmitText = "Submit enquiry";
        });

    }

});

mainApp.controller("lostPropCtrl", function ($scope, homeSrvc) {

    $scope.btnSubmitText = "Submit enquiry";
    $scope.lostForm = {};
    $scope.errorMsg = "";
    $scope.infoMsg = "";
    jQuery("#timePicker").datetimepicker({
        format: "hh:mm a",
        allowInputToggle: true
    });
    $scope.categoryList = ["Camera", "Clothing", "Computer", "Glasses", "Jewellery", "Keys", "Luggage", "Money", "Passport", "Phone", "Plastic Cards", "Umbrella", "Wallet", "Other"];
    $scope.lostForm.category = $scope.categoryList[$scope.categoryList.length - 1];

    // Google Address Search ------------------------------------------------------
    var options = { componentRestrictions: { country: "au" } };
    var autocomplete = new google.maps.places.Autocomplete(document.getElementById("pickup"), options);
    autocomplete.addListener("place_changed", getPickupAddressDetails);

    var autocompleteDest = new google.maps.places.Autocomplete(document.getElementById("dest"), options);
    autocompleteDest.addListener("place_changed", getDestAddressDetails);

    // ----------------------------------------------------------------------------
    function getPickupAddressDetails() {
        var place = autocomplete.getPlace();
        if (angular.isUndefined(place.address_components)) {
            return;
        }
        console.log(place);
        $scope.lostForm.pickup = place.formatted_address;
    }

    // ----------------------------------------------------------------------------
    function getDestAddressDetails() {
        var dest = autocompleteDest.getPlace();
        if (angular.isUndefined(dest.address_components)) {
            return;
        }
        $scope.lostForm.dest = dest.formatted_address;
    }

    // ----------------------------------------------------------------------------
    $scope.submitEnquiry = function (formData) {
        $scope.btnSubmitText = "";
        var region = 1;
        var city = $scope.$parent.currentCity;
        if (city === "Sydney") {
            region = 2;
        }
        formData.time = jQuery("#pkTime").val();
        console.log(formData);
        var model = {};
        model.EnquiryType = 4;
        model.EnquiryRegion = region;
        model.ContactName = formData.fname + " " + formData.lname;
        model.ContactPhone = formData.phone;
        model.ContactEmail = formData.email,
        model.Message = formData.message;
        model.PickupDate = formData.date;
        model.PickupTime = formData.time;
        model.CarNumber = formData.carNumber;
        model.DriverNumber = formData.driverNumber;
        model.PickupAddress = formData.pickup;
        model.Destination = formData.dest;
        model.ItemCategory = formData.category;
        console.log(model);

        homeSrvc.submitLostProperty(model).then(function (response) {
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                if (response.data.InError) {
                    $scope.errorMsg = response.data.ErrorMessage;
                    $scope.infoMsg = "";
                } else {
                    console.log(response.data);
                    $scope.infoMsg = response.data.InfoMessage;
                    $scope.errorMsg = "";
                    $scope.lpForm.$setPristine();
                    $scope.lostForm = {};
                }
            } else {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.submitLostProperty(model): INVALID RESPONSE', // name: string
                        {
                            ['handledAt']: 'HomeController.js',
                            ['handledFunc']: '$scope.submitEnquiry',
                            ['model']: JSON.stringify(model)
                        }   // properties?: {[string]:string}                                                                 
                        );
                }
                $scope.errorMsg = "Server is not accessible";
                $scope.infoMsg = "";
            }
            $scope.btnSubmitText = "Submit enquiry";
        }).catch(function (err) {
            var appInsights = window.appInsights;
            if (appInsights) {
                appInsights.trackEvent('homeSrvc.submitLostProperty(model): FAIL', // name: string
                    {
                        ['handledAt']: 'HomeController.js',
                        ['handledFunc']: '$scope.submitEnquiry',
                        ['model']: JSON.stringify(model)
                    }   // properties?: {[string]:string}                                                                 
                    );
            }
            if (angular.isDefined(err.status)) {
                console.log(err.status + " - " + err.statusText);
                $scope.errorMsg = "Server is not accessible";
            } else {
                $scope.errorMsg = err.message;
            }
            $scope.infoMsg = "";
            $scope.btnSubmitText = "Submit enquiry";
        });
    }
});



;

mainApp.service("homeSrvc", function ($http) {

    //var apiKey = "AIzaSyC5ERVn06p5AfQUrUNxGYnMs-t9wM4NYTQ"; // Server-Key Debug
    var apiKey = "AIzaSyDr7D1ViqkOElhPbEBCsM5blRhWr1j93Yc"; // Client-Key Release

    //get Menu items
    this.getMenuItems = function () {
        return $http.get("/Home/GetMenuItems");
    };

    //is User Logged in
    this.isUserLoggedIn = function () {
        return $http.get("/Home/IsUserLoggedIn");
    };

    // get StateId
    this.getStateId = function (state) {
        switch (state) {
            case "VIC":
                return 1;
            case "NSW":
                return 2;
            case "ACT":
                return 4;
            case "QLD":
                return 3;
            case "SA":
                return 5;
            case "NT":
                return 6;
            case "TAS":
                return 7;
            default:
                return 1;
        }
    }

    // get CarTypes By suburbId
    this.getCarTypesbySuburb = function (suburbId) {
        return $http.get("/Base/AvailableCarTypes", { params: { id: suburbId } });
    }

    // get CarTypes By suburbId
    this.getAddressDetailsbyPlaceId = function (placeId) {
        return $http.get("/Home/FetchGooglePlaceAddressDetails", { params: { gPlaceId: placeId } });
    }

    // verify Google search result
    this.verifyGoogleSearchResult = function (inputPlace) {
        var response = $http({
            method: "post",
            url: "/Home/ValidateGoogleResult",
            data: inputPlace,
            dataType: "json"
        });
        return response;
    }

    // submit Booking
    this.submitBooking = function (formVars) {
        var response = $http({
            method: "post",
            url: "/Home/CreateBooking",
            data: formVars,
            dataType: "json"
        });
        return response;
    }
    
    // get Booking last Status
    this.getBookingLastStatus = function (bkId) {
        return $http.get("Home/LastBookingStatus", { params: { id: bkId } });
    }

    // update Booking list 
    this.updateBookingList = function (bkId1, bkId2, bkId3) {
        return $http.get("Home/UpdateBookingList", { params: { bk1: bkId1, bk2: bkId2, bk3: bkId3 } });
    }

    // cancel Booking
    this.cancelBooking = function (id) {
        var response = $http({
            method: "post",
            url: "Home/CancelBooking/" + id
        });
        return response;
    }

    // get CarTypes By suburbId
    this.getDateTimeList = function (addressDbId) {
        return $http.get("/Base/RequestedDateTime", { params: { id: addressDbId } });
    }

    // get Nearby Cars
    this.getNearbyCars = function (lat,lng,cnt) {
        return $http.get("/Home/NearbyCars", { params: { centerLat: lat, centerLng: lng, count: cnt } });
    }

    // get myTaxi Location 
    this.getTaxiLocationbyNumber = function (carNumber) {
        return $http.get("Home/TaxiLocation", { params: { carNumber: carNumber } });
    }

    // get Tracking Actual Route 
    this.snapToRoad = function (path) {
        return $http.get("https://roads.googleapis.com/v1/snapToRoads", { params: { interpolate: true, path: path, key: apiKey } });
    }
    
    // fare estimate
    this.estimateFare = function (fareRequest) {
        var response = $http({
            method: "post",
            url: "Home/EstimateFare",
            data: fareRequest,
            dataType: "json"
        });
        return response;
    }

    // submit Enquiry
    this.submitEnquiry = function (formVars) {
        var response = $http({
            method: "post",
            url: "/Home/Enquiry",
            data: formVars,
            dataType: "json"
        });
        return response;
    }

    // submit Enquiry
    this.submitLostProperty = function (formVars) {
        var response = $http({
            method: "post",
            url: "/Home/LostProperty",
            data: formVars,
            dataType: "json"
        });
        return response;
    }
    
    // reset Password
    this.resetPassword = function (username) {
        return $http.get("Home/ResetPassword", { params: { username: username } });
        //var response = $http({
        //    method: "post",
        //    url: "/Home/ResetPassword",
        //    data: username,
        //    dataType: "string"
        //});
        //return response;
    }

    // Login
    this.login = function (formVars) {
        var response = $http({
            method: "post",
            url: "User/Login",
            data: formVars,
            dataType: "json"
        });
        return response;
    }

    // Register
    this.register = function (formVars) {
        var response = $http({
            method: "post",
            url: "User/Register",
            data: formVars,
            dataType: "json"
        });
        return response;
    }
   
    

});;


// ##################################################################################################################################################
// Advanced User Booking Cntrl ######################################################################################################################
// ##################################################################################################################################################

mainApp.controller("userBookingCtrl", [
    "$scope", "homeSrvc", "userSrvc", "$cookies", "$interval", "$timeout", "$filter", "$window", "$http",
    function ($scope, homeSrvc, userSrvc, $cookies, $interval, $timeout, $filter, $window, $http) {

        var gmap, trackMap, nearByCars;
        var pkMarker, destMarker, carMarker, passMarker, carIcon = {}, bookingObj = {};
        var pickupObj = {
            AddressDbId: 0,
            GeoPoint: { Latitude: 0, Longitude: 0 },
            Designation: { DesignationId: 0, Name: "" },
            Number: "",
            Place: { Id: 0, Name: "" },
            Street: { StreetId: 0, Name: "" },
            Suburb: {
                Id: 0,
                IsServiceable: false,
                IsDefaultPickup: false,
                Name: "",
                NspPhone: "",
                Postcode: "",
                State: "",
                AddressDbId: 0,
                GeoPoint: { Latitude: 0, Longitude: 0 }
            },
            Unit: ""
        };
        var destObj = pickupObj;
        var intervals = [];
        var updateList = [];
        var trackList = [];
        var markerList = [];
        var trackMarkers = [];

        $scope.isFixedRemark = false;
        $scope.selectedBookingtoTrack = 0;
        $scope.btnSendText = "Resend code";
        $scope.orderNumberRequired = false;
        $scope.isDVA = false;
        $scope.btnSubmitText = "Request 13CABS";
        $scope.activeBookings = 0;
        $scope.isLoadingPk = false;
        $scope.isLoadingDest = false;
        $scope.isLoading = false;
        $scope.showConfirm = [false, false, false];
        $scope.bookingList = [];
        $scope.pickupSelected = false;
        $scope.destSelected = false;
        $scope.errorMsg = "";
        $scope.pkErrMsg = "";
        $scope.destErrMsg = "";
        $scope.curYear = new Date().getFullYear();
        $scope.requested = false;
        $scope.infoMsgCode = "";
        $scope.errorMsgCode = "";
        $scope.code01 = $scope.code02 = $scope.code03 = $scope.code04 = "";
        $scope.minBookingDate = new Date();
        $scope.maxBookingDate = new Date();

        // *********************************************************************************************************************** getUserProfile
        userSrvc.getUserProfile().then(function (response) {
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                if (response.data === "NotAuthorised") {
                    console.log(" Not Authorised ");
                    $window.location.href = "/User/Logout";
                } else {
                    if (response.data.ContactPhone.indexOf("61") === 0) {
                        var tmp = "0" + response.data.ContactPhone.substring(2, response.data.ContactPhone.length);
                        response.data.ContactPhone = tmp;
                    }
                    $scope.bookingForm.userData = response.data;
                    if (!response.data.IsVerified) {
                        if (response.data.IsValidMobileNumber) {
                            if (!response.data.HasValidVerificationCode) {
                                $scope.sendCode(response.data.ContactPhone);
                            }
                            $("#smsModal").on("shown.bs.modal", function () {
                                $("#code01").focus();
                            });
                            $("#smsModal").modal({
                                backdrop: "static",
                                keyboard: false
                            });
                            $scope.mobileNumber = response.data.ContactPhone;
                            $scope.infoMsgCode = "";
                            $scope.errorMsgCode = "";
                            $scope.isSending = false;
                        }
                    }
                    setBookingDate(response.data);
                    showPosition();
                    loadUserDetails(response.data);
                    if (response.data.Remarks.length) {
                        $scope.isFixedRemark = true;
                        if ($scope.bookingForm.userData.Remarks[0].RemarkText !== "Notes for driver") {
                            var defaultRemark = {};
                            defaultRemark.IsDestination = false;
                            defaultRemark.IsParcel = false;
                            defaultRemark.IsPickup = false;
                            defaultRemark.RemarkText = "Notes for driver";
                            $scope.bookingForm.userData.Remarks.unshift(defaultRemark);
                        }
                        $scope.selectedRemark = $scope.bookingForm.userData.Remarks[0];
                    } else {
                        $scope.isFixedRemark = false;
                    }

                    if (response.data.Accounts.length) {
                        initiateAccounts();
                    } else {
                        $scope.bookingForm.userData.Accounts = [];
                    }
                }
            } else {
                console.log(" Not Authorised ");
                $window.location.href = "/User/Logout";
            }

        }).catch(function (response) {
            console.log(response.status + " - " + response.statusText);
            //$window.location.href = "/User/Logout";
        });

        // *********************************************************************************************************************** sendVerificationCode
        $scope.sendCode = function (number) {
            $scope.isSending = true;
            $scope.btnSendText = "";
            userSrvc.sendVerificationCode(number, $scope.bookingForm.userData.UserId).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data)) {
                    $scope.errorMsgCode = "";
                    $scope.infoMsgCode = "Verification Code Sent";
                    $scope.code01 = $scope.code02 = $scope.code03 = $scope.code04 = "";
                } else {
                    $scope.infoMsgCode = "";
                    $scope.errorMsgCode = "Failed to send sms";
                }
                $scope.btnSendText = "Resend code";
                $scope.isSending = false;
            }).catch(function (response) {
                console.log(response.status + " - " + response.statusText);
                $scope.btnSendText = "Resend code";
                $scope.isSending = false;
            });
        }

        // *********************************************************************************************************************** handleKeyboard        
        $scope.handleKeyboard = function (event, nextId) {
            if (nextId - 2 > 0 && event.keyCode === 8) {
                angular.element(document.querySelector("#code0" + (nextId - 2)))[0].focus();
                if (angular.element(document.querySelector("#code0" + (nextId - 1)))[0].value === "") {
                    if ((nextId - 2) === 1) {
                        $scope.code01 = "";
                    }
                    if ((nextId - 2) === 2) {
                        $scope.code02 = "";
                    }
                    if ((nextId - 2) === 3) {
                        $scope.code03 = "";
                    }
                }
            }

            if (angular.isDefined($scope.code01) && $scope.code01 !== "" &&
                angular.isDefined($scope.code02) && $scope.code02 !== "" &&
                angular.isDefined($scope.code03) && $scope.code03 !== "" &&
                angular.isDefined($scope.code04) && $scope.code04 !== "") {
                $scope.btnSendText = "";
                var verifyCode = $scope.code01.toString() + $scope.code02.toString() + $scope.code03.toString() + $scope.code04.toString();                
                userSrvc.verifyMobileNumber(verifyCode, $scope.bookingForm.userData.UserId).then(function (response) {
                    if ((response != null) && (response.data != null) && (response.data)) {
                        showPosition();
                        loadUserDetails($scope.bookingForm.userData);
                        if ($scope.bookingForm.userData.Accounts.length) {
                            initiateAccounts();
                        } else {
                            $scope.bookingForm.userData.Accounts = [];
                        }
                        $scope.mobileNumber = response.data.ContactPhone;
                        $scope.infoMsgCode = "";
                        $scope.errorMsgCode = "";
                        $scope.isSending = false;
                        $("#smsModal").modal("hide");
                    } else {
                        $scope.infoMsgCode = "";
                        $scope.errorMsgCode = "Code is not correct";
                    }
                    $scope.btnSendText = "Resend code";
                }).catch(function (response) {
                    console.log(response.status + " - " + response.statusText);
                    $scope.btnSendText = "Resend code";
                });
            }
        }

        $scope.limitKeypress = function (event, value, maxLength) {
            if (value != undefined && value.toString().length >= maxLength) {
                event.preventDefault();
            }
        }        

        // *********************************************************************************************************************** verifyPhoneNumber -- Not in Use
        $scope.verifyPhone = function (event, nextId) {
            if (nextId !== 5 && event.keyCode !== 8 && event.keyCode !== 46 && event.keyCode !== 9 && event.keyCode !== 13) {
                angular.element(document.querySelector("#code0" + nextId))[0].focus();
            }
        }

        // *********************************************************************************************************************** getLocation
        function getLocation() {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(showPosition, showError);
            } else {
                showPosition();
                console.log("We can not identify your location /r/n Geolocation is not supported by this browser.");
            }
        }

        // *********************************************************************************************************************** initiateAccounts
        function initiateAccounts() {
            if ($scope.bookingForm.userData.Accounts[0].AccountName !== "Not on Account") {
                var defaultAcc = {};
                defaultAcc.AccountName = "Not on Account";
                defaultAcc.AccountLabel = "";
                defaultAcc.OrderNumberLabel = "";
                defaultAcc.CustomerNameLabel = "";
                defaultAcc.AccountNumber = "";
                defaultAcc.OrderNumberRequired = false;
                defaultAcc.IsDVA = false;
                $scope.bookingForm.userData.Accounts.unshift(defaultAcc);
            }
            $scope.selectedAcc = $scope.bookingForm.userData.Accounts[0];
            $scope.bookingForm.AccountNumber = "";
            $scope.bookingForm.OrderNumber = "";
            $scope.bookingForm.VXNumber = "";
        }

        // *********************************************************************************************************************** loadUserDetails
        function loadUserDetails(userInfo) {
            $scope.bookingForm.FirstName = userInfo.FirstName;
            $scope.bookingForm.LastName = userInfo.LastName;
            $scope.bookingForm.ContactPhone = userInfo.ContactPhone;
            $scope.bookingForm.BookingContactSource = userInfo.BookingContactSource;

            if (angular.isDefined($cookies.getObject("bkFormClient"))) {
                var savedUser = $cookies.getObject("bkFormClient");
                if (savedUser.userData.UserId === userInfo.UserId) {
                    $scope.bookingForm = savedUser;
                    bookingObj = $cookies.getObject("bkObjectClient");
                    initiateDateTimeList(bookingObj.pickupObj.AddressDbId);
                    $scope.bookingForm.TimeMode = "tmNow";
                    getCarTypes(bookingObj.pickupObj.Suburb.Id);
                    $scope.pickupSelected = true;
                    setPickupViaCookie();
                }
                // -------------------------------------------------------------------------setPickupViaCookie
                function setPickupViaCookie() {
                    if (typeof google === "object" && typeof google.maps === "object") {
                        gmap.setZoom(16);
                        if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                            pkMarker.setMap(null);
                        }
                        pkMarker = new google.maps.Marker({
                            position: new google.maps.LatLng(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude),
                            map: gmap,
                            icon: "/Content/Images/map-pickup-icon.png",
                            title: bookingObj.pickupObj.Place.Name
                        });
                        gmap.panTo(pkMarker.getPosition());

                        if (angular.isDefined(nearByCars)) {
                            $interval.cancel(nearByCars);
                        }
                        if (angular.isDefined(markerList)) {
                            for (var k = 0; k < markerList.length; k++) {
                                markerList[k].setMap(null);
                            }
                            markerList = [];
                        }
                        showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                        nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                    } else {
                        $timeout(function () {
                            setPickupViaCookie();
                        }, 2000);
                    }
                }

                $scope.bookingForm.dstAddress = "";
                $scope.destSelected = false;
                bookingObj.destObj = {
                    AddressDbId: 0,
                    GeoPoint: { Latitude: 0, Longitude: 0 },
                    Designation: { DesignationId: 0, Name: "" },
                    Number: "",
                    Place: { Id: 0, Name: "" },
                    Street: { StreetId: 0, Name: "" },
                    Suburb: {
                        Id: 0,
                        IsServiceable: false,
                        IsDefaultPickup: false,
                        Name: "",
                        NspPhone: "",
                        Postcode: "",
                        State: "",
                        AddressDbId: 0,
                        GeoPoint: { Latitude: 0, Longitude: 0 }
                    },
                    Unit: ""
                };
            }

            if (userInfo.DefaultLocationType === "Pickup" && userInfo.GooglePlaceId != null && userInfo.GooglePlaceId !== "") {
                homeSrvc.getAddressDetailsbyPlaceId(userInfo.GooglePlaceId).then(function (response) {
                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        response.data.Place.Name = userInfo.CompanyName;
                        pickupObj = response.data;
                        console.log("api verified pickup by placeId : ");
                        console.log(pickupObj);
                        $scope.bookingForm.pkAddress = userInfo.CompanyName + ", " + userInfo.Address + ", " + pickupObj.Suburb.State + " " + pickupObj.Suburb.Postcode;
                        bookingObj.pickupObj = pickupObj;
                        bookingObj.StateId = homeSrvc.getStateId(pickupObj.Suburb.State);
                        if (pickupObj.Suburb.IsServiceable) {
                            getCarTypes(pickupObj.Suburb.Id);
                            initiateDateTimeList(pickupObj.AddressDbId);
                            $scope.pickupSelected = true;
                            //showPosition();
                            var center = { lat: pickupObj.GeoPoint.Latitude, lng: pickupObj.GeoPoint.Longitude };
                            gmap.setCenter(center);
                            gmap.setZoom(16);
                            if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                                pkMarker.setMap(null);
                            }
                            pkMarker = new google.maps.Marker({
                                position: center,
                                map: gmap,
                                icon: "/Content/Images/map-pickup-icon.png",
                                title: userInfo.CompanyName
                            });
                            if (angular.isDefined(nearByCars)) {
                                $interval.cancel(nearByCars);
                            }
                            if (angular.isDefined(markerList)) {
                                for (var k = 0; k < markerList.length; k++) {
                                    markerList[k].setMap(null);
                                }
                                markerList = [];
                            }
                            showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                            nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                            $scope.ubForm.dest = "";
                            $scope.bookingForm.dstAddress = "";
                            $scope.destSelected = false;
                            bookingObj.destObj = {
                                AddressDbId: 0,
                                GeoPoint: { Latitude: 0, Longitude: 0 },
                                Designation: { DesignationId: 0, Name: "" },
                                Number: "",
                                Place: { Id: 0, Name: "" },
                                Street: { StreetId: 0, Name: "" },
                                Suburb: {
                                    Id: 0,
                                    IsServiceable: false,
                                    IsDefaultPickup: false,
                                    Name: "",
                                    NspPhone: "",
                                    Postcode: "",
                                    State: "",
                                    AddressDbId: 0,
                                    GeoPoint: { Latitude: 0, Longitude: 0 }
                                },
                                Unit: ""
                            };
                        } else {
                            var appInsights = window.appInsights;
                            if (appInsights) {
                                appInsights.trackEvent('Pickup place not serviceable', // name: string
                                {
                                    ['handledAt']: 'UserController.js',
                                    ['handledFunc']: 'loadUserDetails(userInfo)',
                                    ['googlePlaceId']: userInfo.GooglePlaceId,
                                    ['response']: JSON.stringify(response.data)
                                }   // properties?: {[string]:string}                                                                 
                                );
                            }
                            //$scope.pkErrMsg = "Web bookings are not available from this address";
                        }
                    } else {
                        var appInsights = window.appInsights;
                        if (appInsights)
                        {
                            appInsights.trackEvent('homeSrvc.getAddressDetailsbyPlaceId(userInfo.GooglePlaceId): INVALID RESPONSE', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: 'loadUserDetails(userInfo)',
                                ['googlePlaceId']: userInfo.GooglePlaceId,
                                ['response']: JSON.stringify(response.data)
                            }   // properties?: {[string]:string}                                                                 
                            );
                        }
                        //$scope.pkErrMsg = "Server is not accessible";
                    }
                    $scope.isLoadingPk = false;
                }).catch(function (err) {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.getAddressDetailsbyPlaceId(userInfo.GooglePlaceId): FAIL', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: 'loadUserDetails(userInfo)',
                                ['googlePlaceId']: userInfo.GooglePlaceId
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }

                    if (angular.isDefined(err.status)) {
                        console.log("api pickup : " + err.status + " - " + err.statusText);
                    } else {
                        console.log(err.message);
                    }
                    //$scope.pkErrMsg = "Please check your pickup address";
                    $scope.pickupSelected = false;
                    $scope.isLoadingPk = false;
                });
            }

            getUserBookings(userInfo.UserId);
        }

        // *********************************************************************************************************************** initiateDateTimeList
        function initiateDateTimeList(addressDbId) {
            homeSrvc.getDateTimeList(addressDbId).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    var data = response.data;
                    $scope.minuteList = data.MinuteList;
                    $scope.hourList = data.HourList;
                    $scope.dateList = data.DateList;
                    $scope.ampmList = data.AmPmList;
                    $scope.bookingForm.Minute = data.Minute;
                    $scope.bookingForm.Hour = data.Hour;
                    $scope.bookingForm.AmPm = data.AmPm;
                    $scope.bookingForm.RequestedDate = data.DateList[0];
                    $scope.bookingForm.UseCalendar = $scope.useCalendarForDate;
                } else {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.getDateTimeList(addressDbId): INVALID RESPONSE', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: 'initiateDateTimeList(addressDbId)',
                                ['addressDbId']: addressDbId,
                                ['response']: JSON.stringify(response.data)
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }
                    $scope.errorMsg = "Server is not accessible";
                }
            }).catch(function (response) {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.getDateTimeList(addressDbId): FAIL', // name: string
                        {
                            ['handledAt']: 'UserController.js',
                            ['handledFunc']: 'initiateDateTimeList(addressDbId)',
                            ['addressDbId']: addressDbId
                        }   // properties?: {[string]:string}                                                                 
                        );
                }

                console.log(response.status + " - " + response.statusText);
            });
        }

        // *********************************************************************************************************************** showPosition
        function showPosition(position) {
            var centerpoint;
            if (angular.isUndefined(position)) {
                centerpoint = { lat: -37.8447733, lng: 144.7661791 };
            } else {
                centerpoint = { lat: position.coords.latitude, lng: position.coords.longitude };
            }

            var mapProp = {
                center: centerpoint,
                zoom: 15,
                draggable: true,
                scrollwheel: false,
                zoomControl: true,
                clickableIcons: false,
                streetViewControl: false,
                disableDoubleClickZoom: true,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                mapTypeControl: false
            };
            gmap = new google.maps.Map(document.getElementById("mapholder"), mapProp);
        }

        function setBookingDate(data) {
            if (data.BookingInAdvanceAddedDays != 0) {
                $scope.minBookingDate = new Date();
                $scope.maxBookingDate = new Date();
                $scope.maxBookingDate.setDate($scope.maxBookingDate.getDate() + data.BookingInAdvanceAddedDays);
                $scope.useCalendarForDate = true;
            } else {
                $scope.useCalendarForDate = false;
            }
        }

        // *********************************************************************************************************************** showError
        function showError(error) {
            showPosition();
            switch (error.code) {
                case error.PERMISSION_DENIED:
                    console.log("User denied the request for Geolocation.");
                    break;
                case error.POSITION_UNAVAILABLE:
                    console.log("Location information is unavailable.");
                    break;
                case error.TIMEOUT:
                    console.log("The request to get user location timed out.");
                    break;
                case error.UNKNOWN_ERROR:
                    console.log("An unknown error occurred.");
                    break;
            }
        }

        // *********************************************************************************************************************** getCarTypes
        function getCarTypes(suburbId) {
            homeSrvc.getCarTypesbySuburb(suburbId)
                .then(function (response) {
                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        $scope.bookingForm.carTypeList = response.data.CarTypes;
                        $scope.bookingForm.maxiRange = response.data.maxiRange;
                        $scope.bookingForm.maxiRange.sort(function (a, b) { return a - b });
                        $scope.isCarTypeMaxi = false;
                        $scope.bookingForm.selectedCarType = $scope.bookingForm.carTypeList[0].Name;
                        $scope.bookingForm.selectedIcon = $scope.bookingForm.carTypeList[0].Icon;
                        bookingObj.CarType = 0; //reset
                    } else {
                        var appInsights = window.appInsights;
                        if (appInsights) {
                            appInsights.trackEvent('homeSrvc.getCarTypesbySuburb(suburbId): INVALID RESPONSE', // name: string
                                {
                                    ['handledAt']: 'UserController.js',
                                    ['handledFunc']: 'getCarTypes(suburbId)',
                                    ['suburbId']: suburbId,
                                    ['response']: JSON.stringify(response.data)
                                }   // properties?: {[string]:string}                                                                 
                                );
                        }
                        $scope.errorMsg = "Server is not accessible";
                    }
                })
                .catch(function (err) {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.getCarTypesbySuburb(suburbId): FAIL', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: 'getCarTypes(suburbId)',
                                ['suburbId']: suburbId
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }

                    if (angular.isDefined(err.status)) {
                        console.log(err.status + " - " + err.statusText);
                        $scope.errorMsg = "Server is not accessible";
                    } else {
                        $scope.errorMsg = err.message;
                    }
                    //$scope.errorMsg = err.status + " - " + err.statusText;
                });
        }

        // *********************************************************************************************************************** trackAssignedTaxi
        function trackAssignedTaxi(bookingId, carNumber, puLat, puLng) {
            var isFirstPoint = true;
            var lastUpdate;
            var pkPoint = new google.maps.LatLng(puLat, puLng);

            if (angular.isUndefined(trackMap)) {
                var mapOptions = {
                    center: { lat: puLat, lng: puLng },
                    zoom: 17,
                    scrollwheel: false,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                trackMap = new google.maps.Map(document.getElementById("mapholder"), mapOptions);
                passMarker = new google.maps.Marker({
                    map: trackMap,
                    position: new google.maps.LatLng(puLat, puLng),
                    icon: "/Content/Images/map-pickup-icon.png",
                    title: "Pickup point"
                });
                trackMarkers.push(passMarker);
            } else {
                passMarker.setPosition(pkPoint);
                trackMap.setCenter(pkPoint);
            }
            updateRouteonMap(bookingId, carNumber);

            function updateRouteonMap(bkId, carNum) {

                homeSrvc.getTaxiLocationbyNumber(carNum).then(function (response) {

                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        if (!response.data.InError) {
                            console.log("CallBackInSec : " + response.data.CallBackInSec);
                            console.log("PointsCount : " + response.data.Points.length);
                            console.log("UpdatedTime : " + response.data.Updated);
                            var carPoints = [];
                            var pLoc;
                            carPoints = response.data.Points;
                            var cLoc = new google.maps.LatLng(carPoints[carPoints.length - 1].Latitude, carPoints[carPoints.length - 1].Longitude);

                            if (isFirstPoint) {
                                if (carPoints.length > 2) {
                                    pLoc = new google.maps.LatLng(carPoints[carPoints.length - 2].Latitude, carPoints[carPoints.length - 2].Longitude);
                                    var heading = google.maps.geometry.spherical.computeHeading(pLoc, cLoc);
                                    carIcon = {
                                        path: "M17.402,0H5.643C2.526,0,0,3.467,0,6.584v34.804c0,3.116,2.526,5.644,5.643,5.644h11.759c3.116,0,5.644-2.527,5.644-5.644 V6.584C23.044,3.467,20.518,0,17.402,0z M22.057,14.188v11.665l-2.729,0.351v-4.806L22.057,14.188z M20.625,10.773 c-1.016,3.9-2.219,8.51-2.219,8.51H4.638l-2.222-8.51C2.417,10.773,11.3,7.755,20.625,10.773z M3.748,21.713v4.492l-2.73-0.349 V14.502L3.748,21.713z M1.018,37.938V27.579l2.73,0.343v8.196L1.018,37.938z M2.575,40.882l2.218-3.336h13.771l2.219,3.336H2.575z M19.328,35.805v-7.872l2.729-0.355v10.048L19.328,35.805z",
                                        scale: .7,
                                        strokeColor: "black",
                                        strokeWeight: .10,
                                        fillOpacity: 1,
                                        fillColor: "#404040",
                                        anchor: new google.maps.Point(10, 25),
                                        offset: "5%",
                                        rotation: heading
                                    };
                                } else {
                                    carIcon = {
                                        path: "M17.402,0H5.643C2.526,0,0,3.467,0,6.584v34.804c0,3.116,2.526,5.644,5.643,5.644h11.759c3.116,0,5.644-2.527,5.644-5.644 V6.584C23.044,3.467,20.518,0,17.402,0z M22.057,14.188v11.665l-2.729,0.351v-4.806L22.057,14.188z M20.625,10.773 c-1.016,3.9-2.219,8.51-2.219,8.51H4.638l-2.222-8.51C2.417,10.773,11.3,7.755,20.625,10.773z M3.748,21.713v4.492l-2.73-0.349 V14.502L3.748,21.713z M1.018,37.938V27.579l2.73,0.343v8.196L1.018,37.938z M2.575,40.882l2.218-3.336h13.771l2.219,3.336H2.575z M19.328,35.805v-7.872l2.729-0.355v10.048L19.328,35.805z",
                                        scale: .7,
                                        strokeColor: "black",
                                        strokeWeight: .10,
                                        fillOpacity: 1,
                                        fillColor: "#404040",
                                        anchor: new google.maps.Point(10, 25),
                                        offset: "5%"
                                        //url: "/Content/Images/yellow-taxi.png",
                                        //anchor: new google.maps.Point(10, 12)
                                    };
                                }

                                carMarker = new google.maps.Marker({
                                    map: trackMap,
                                    position: cLoc,
                                    icon: carIcon,
                                    title: carNum
                                });
                                trackMarkers.push(carMarker);
                                isFirstPoint = false;

                                $timeout(function () {
                                    trackMap.setZoom(17);
                                    trackMap.setCenter(carMarker.getPosition());
                                }, 1000);
                                lastUpdate = carPoints[carPoints.length - 1].Time;
                            }

                            console.log("*************************************************************************");
                            var pathValues = carMarker.position.lat() + "," + carMarker.position.lng();
                            var lastTime = new Date(lastUpdate);

                            for (var k = 0; k < carPoints.length; k++) {
                                var pointTime = new Date(carPoints[k].Time);
                                if (pointTime > lastTime) {
                                    console.log("lastTime : " + lastTime);
                                    console.log("pointTime : " + pointTime);
                                    console.log("-----------------------------------");
                                    var pt = new google.maps.LatLng(carPoints[k].Latitude, carPoints[k].Longitude);
                                    pathValues += "|" + pt.lat() + "," + pt.lng();
                                    console.log("point " + k + " : " + carPoints[k].Latitude + " , " + carPoints[k].Longitude + " * Time : " + carPoints[k].Time);
                                    lastUpdate = carPoints[k].Time;
                                }
                            }

                            homeSrvc.snapToRoad(pathValues).then(function (res) {
                                var duration, step, i;
                                if (angular.isDefined(res.data.snappedPoints)) {
                                    step = res.data.snappedPoints.length;
                                    i = 0;
                                    duration = Math.floor((response.data.CallBackInSec * 1000) / step);
                                    if (step > 1) {
                                        if (duration > 1000) {
                                            duration = 1000;
                                        }
                                        console.log("duration : " + duration);
                                        moveMarker();
                                    }
                                }

                                function moveMarker() {
                                    var latlng = new google.maps.LatLng(res.data.snappedPoints[i].location.latitude, res.data.snappedPoints[i].location.longitude);
                                    var heading = google.maps.geometry.spherical.computeHeading(carMarker.getPosition(), latlng);

                                    if (!trackMap.getBounds().contains(latlng)) {
                                        trackMap.panTo(carMarker.getPosition());
                                    }

                                    if (heading !== 0 && heading !== carIcon.rotation) {
                                        carIcon.rotation = heading;
                                        carMarker.setIcon(carIcon);
                                    }

                                    carMarker.animateTo(latlng, {
                                        easing: "linear",
                                        duration: duration,
                                        complete: function () {
                                            console.log(i + " / " + step);
                                            if (i < step - 1) {
                                                i++;
                                                moveMarker();
                                            }
                                        }
                                    });
                                }
                            });
                        }
                        if (trackList[bkId]) {
                            var delay = angular.isDefined(response.data.CallBackInSec) ? response.data.CallBackInSec : 1;
                            $timeout(function () { updateRouteonMap(bkId, carNum); }, delay * 1000);
                        }
                    } else {
                        $timeout(function () {
                            if (carNum === response.data.CarNumber) {
                                angular.forEach($scope.bookingList, function (value, key) {
                                    if (value.BookingId === bkId) {
                                        if ($scope.bookingList[key].Status === "Accepted" && trackList[bkId]) {
                                            updateRouteonMap(bkId, carNum);
                                        }
                                    }
                                });
                            }
                        }, 2000);
                    }
                }).catch(function (err) {
                    if (angular.isDefined(err.status)) {
                        console.log(err.status + " - " + err.statusText);
                    } else {
                        console.log(err.message);
                    }
                });
            }
        }

        // *********************************************************************************************************************** showTrackMap
        $scope.showTrackMap = function (bkObj) {
            if ($scope.selectedBookingtoTrack !== bkObj.BookingId) {
                $scope.selectedBookingtoTrack = bkObj.BookingId;
                if (bkObj.Status === "Accepted") {
                    if (angular.isDefined(nearByCars)) {
                        $interval.cancel(nearByCars);
                    }
                    trackList[bkObj.BookingId] = true;
                    trackAssignedTaxi(bkObj.BookingId, bkObj.CarNumber, bkObj.PuLatitude, bkObj.PuLongitude);
                } else {
                    trackList[bkObj.BookingId] = false;
                }
            }
        };

        // *********************************************************************************************************************** getUserBookins
        function getUserBookings(userId) {

            $http.get("User/UserBookingsList", { params: { id: userId } }).then(function (response) {

                if ((response != null) && (response.data != null) && (response.data !== "")) {

                    if (!response.data.InError) {

                        if ($scope.bookingList.length !== response.data.length) {
                            $scope.bookingList = response.data;
                            $scope.bookingList = $filter("orderBy")($scope.bookingList, "StatusId");
                        }

                        for (var j = 0; j < $scope.bookingList.length; j++) {
                            if (angular.isDefined($scope.bookingList[j]) && $scope.bookingList[j] != null) {
                                if ($scope.bookingList[j].Status !== "Completed" && $scope.bookingList[j].Status !== "Cancelled") {
                                    if (!(angular.isDefined(updateList[$scope.bookingList[j].BookingId]) && updateList[$scope.bookingList[j].BookingId] != null)) {
                                        updateBookingDetails(j, $scope.bookingList[j]);
                                        updateList[$scope.bookingList[j].BookingId] = $interval(updateBookingDetails, 10000, 0, true, j, $scope.bookingList[j]);
                                    }
                                } else {
                                    if (angular.isDefined(updateList[$scope.bookingList[j].BookingId])) {
                                        $interval.cancel(updateList[$scope.bookingList[j].BookingId]);
                                        updateList[$scope.bookingList[j].BookingId] = null;
                                    }
                                }
                            }
                        }
                    }
                    else {
                        console.log(response.data);
                    }
                }
            });
        }

        // *********************************************************************************************************************** updateBookingDetails
        function updateBookingDetails(index, booking) {
            $http.get("User/BookingLastStatus", { params: { userId: booking.UserId, bkId: booking.BookingId, dsId: booking.DispatchSystemId, dsbkId: booking.DispatchBookingId } }).then(function (response) {

                if ((response != null) && (response.data != null) && (response.data !== "")) {

                    if (!response.data.InError) {

                        if (booking.StatusId !== response.data.StatusId) {
                            $scope.bookingList[index].StatusId = response.data.StatusId;
                            $scope.bookingList[index].Status = response.data.Status;
                            $scope.bookingList[index].StatusIcon = response.data.StatusIcon;
                            $scope.bookingList[index].Cancellable = response.data.Cancellable;
                            $scope.bookingList[index].CarNumber = response.data.CarNumber;
                            $scope.bookingList[index].TaxiLatitude = response.data.VehicleLatitude;
                            $scope.bookingList[index].TaxiLongitude = response.data.VehicleLongitude;

                            if ($scope.bookingList[index].Status !== "Accepted") {
                                if ($scope.selectedBookingtoTrack === $scope.bookingList[index].BookingId) {
                                    $scope.selectedBookingtoTrack = 0;
                                    for (var i = 0; i < trackMarkers.length; i++) {
                                        trackMarkers[i].setMap(null);
                                    }
                                    trackMarkers = [];
                                }
                                trackList[$scope.bookingList[index].BookingId] = false;
                            }
                        }

                        if (angular.isDefined(intervals) && angular.isUndefined(intervals[$scope.bookingList[index].BookingId])) {
                            intervals[$scope.bookingList[index].BookingId] = $interval(function () {
                                $scope.bookingList[index].DispatchWaitingTime--;
                            }, 1000);
                        }

                        if ($scope.bookingList[index].Status === "Accepted" && $scope.selectedBookingtoTrack === 0) {
                            if (angular.isDefined(nearByCars)) {
                                $interval.cancel(nearByCars);
                            }
                            $scope.selectedBookingtoTrack = $scope.bookingList[index].BookingId;
                            trackList[$scope.bookingList[index].BookingId] = true;
                            trackAssignedTaxi($scope.bookingList[index].BookingId, $scope.bookingList[index].CarNumber, $scope.bookingList[index].PuLatitude, $scope.bookingList[index].PuLongitude);
                        }
                    }
                    else {
                        console.log(response.data);
                    }
                }
            });
        }

        // *********************************************************************************************************************** refreshBookingsList
        function refreshBookingsList() {
            if (angular.isDefined($scope.bookingList) && angular.isDefined($scope.bookingForm.userData)) {
                getUserBookings($scope.bookingForm.userData.UserId);
            }
        }

        // *********************************************************************************************************************** showTaxisAround
        $scope.showTaxisAround = function () {
            if (angular.isUndefined(nearByCars)) {
                if (angular.isDefined(bookingObj.pickupObj) && angular.isDefined(bookingObj.pickupObj.GeoPoint)) {
                    showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                    nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                }
            }
        }

        // *********************************************************************************************************************** cartypeselected
        $scope.cartypeselected = function (item) {
            $scope.bookingForm.selectedCarType = item.Name;
            $scope.bookingForm.selectedIcon = item.Icon;
            $scope.isCarTypeMaxi = false;
            bookingObj.CarType = item.Id;
            if (item.Id === 3) {
                $scope.isCarTypeMaxi = true;
            }
        };

        // *********************************************************************************************************************** updateAccount
        $scope.updateAccount = function (selectedAcc) {
            if (angular.isDefined(selectedAcc)) {
                if (selectedAcc.OrderNumberRequired) {
                    $scope.orderNumberRequired = true;
                    $scope.orderNumberText = selectedAcc.OrderNumberLabel !== "" ? selectedAcc.OrderNumberLabel : "Order Number";
                } else {
                    $scope.orderNumberRequired = false;
                }
                if (selectedAcc.IsDVA) {
                    $scope.orderNumberRequired = true;
                    $scope.isDVA = true;
                    $scope.orderNumberText = "Provider Number";
                } else {
                    $scope.isDVA = false;
                }
                $scope.bookingForm.AccountNumber = selectedAcc.AccountNumber;
                //$scope.$apply();
            }
        };

        // *********************************************************************************************************************** cancelBooking
        $scope.cancelBooking = function (bkId, index) {
            //ga("send", "event", "Booking", "Cancel", "Yes");
            if (!(bkId > 0)) {
                return;
            }
            $scope.isLoading = true;
            homeSrvc.cancelBooking(bkId).then(function (response) {
                if ((response != null) && (response.data != null) && (response.data !== "")) {
                    if (response.data.InError) {
                        $scope.bookingList[index].Message = response.data.ErrorMessage;
                    } else {
                        console.log(response.data);
                    }
                    $timeout(function () {
                        updateBookingDetails(index, $scope.bookingList[index]);
                        $scope.showConfirm[index] = false;
                        $scope.isLoading = false;
                    }, 1000);
                } else {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.cancelBooking(bkId): INVALID RESPONSE', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: '$scope.cancelBooking',
                                ['bookingId']: bkId,
                                ['response']: JSON.stringify(response.data)
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }
                    $scope.bookingList[index].Message = "Server is not accessible";
                    $scope.showConfirm[index] = false;
                    $scope.isLoading = false;
                }

            }).catch(function (err) {
                var appInsights = window.appInsights;
                if (appInsights) {
                    appInsights.trackEvent('homeSrvc.cancelBooking(bkId): FAIL', // name: string
                        {
                            ['handledAt']: 'UserController.js',
                            ['handledFunc']: '$scope.cancelBooking',
                            ['bookingId']: bkId
                        }   // properties?: {[string]:string}                                                                 
                        );
                }

                $scope.bookingList[index].Message(err.status + " - " + err.statusText);

            });
        };

        // *********************************************************************************************************************** keepBooking
        $scope.keepBooking = function (index) {
            $scope.showConfirm[index] = !$scope.showConfirm[index];
        };

        // *********************************************************************************************************************** submitRequest
        $scope.submitRequest = function (formData) {
            $scope.errorMsg = "";
            $scope.ubForm.$submitted = true;
            $scope.$broadcast("ubForm:$validate");

            if ($scope.ubForm.$invalid) {
                return;
            }

            $scope.requested = false;

            if ($scope.pickupSelected && $scope.ubForm.$valid) {
                $scope.btnSubmitText = "";
                if ($scope.bookingForm.AccountNumber !== "") {
                    formData.AccountNumber = $scope.bookingForm.AccountNumber;
                    formData.OrderNumber = $scope.bookingForm.OrderNumber;
                    if ($scope.IsDVA) {
                        formData.VxNumber = $scope.bookingForm.VXNumber;
                    }
                }

                formData.PassengerPhone = formData.ContactPhone;
                formData.PassengerName = formData.FirstName + " " + formData.LastName;
                formData.ContactName = formData.PassengerName;

                if ($scope.bookingForm.BookingContactSource === "User" || $scope.bookingForm.BookingContactSource === "") {
                    formData.ContactName = $scope.bookingForm.userData.ContactName;
                    formData.ContactPhone = $scope.bookingForm.userData.ContactPhone;
                }

                formData.CarType = bookingObj.CarType;
                formData.StateId = bookingObj.StateId;
                formData.AddressDbId = bookingObj.pickupObj.AddressDbId;
                formData.PkSuburbId = bookingObj.pickupObj.Suburb.Id;
                formData.PkUnit = bookingObj.pickupObj.Unit;
                formData.PkNumber = bookingObj.pickupObj.Number;
                formData.PkStreetId = bookingObj.pickupObj.Street.StreetId;
                formData.PkStreetDesignationId = bookingObj.pickupObj.Street.StreetId + "," + bookingObj.pickupObj.Designation.DesignationId;
                formData.PkPlaceId = bookingObj.pickupObj.Place.Id;
                formData.PkPlaceName = bookingObj.pickupObj.Place.Name;
                formData.PkState = bookingObj.pickupObj.Suburb.State;
                formData.PkLatitude = bookingObj.pickupObj.GeoPoint.Latitude;
                formData.PkLongitude = bookingObj.pickupObj.GeoPoint.Longitude;
                formData.PkSuburbName = bookingObj.pickupObj.Suburb.Name;
                formData.PkStreetName = bookingObj.pickupObj.Street.Name;
                formData.PkDesignationName = bookingObj.pickupObj.Designation.Name;

                if (formData.RequestedDate.Value instanceof Date) {
                    formData.RequestedDate.Value = moment(formData.RequestedDate.Value).format('YYYY-MM-DD');
                }

                if ($scope.isFixedRemark) {
                    if ($scope.selectedRemark.RemarkText !== "Notes for driver") {
                        formData.Remarks = $scope.selectedRemark.RemarkText;
                    } else {
                        formData.Remarks = "";
                    }
                } else {
                    formData.Remarks = formData.Remarks;
                }

                if ($scope.destSelected) {
                    formData.DestLatitude = bookingObj.destObj.GeoPoint.Latitude;
                    formData.DestLongitude = bookingObj.destObj.GeoPoint.Longitude;
                    formData.DestState = bookingObj.destObj.Suburb.State;
                    formData.DestSuburbId = bookingObj.destObj.Suburb.Id;
                    formData.DestSuburbName = bookingObj.destObj.Suburb.Name;
                    formData.DestStreetName = bookingObj.destObj.Street.Name;
                    formData.DestDesignationName = bookingObj.destObj.Designation.Name;
                    formData.DestUnit = bookingObj.destObj.Unit;
                    formData.DestNumber = bookingObj.destObj.Number;
                    formData.DestStreetId = bookingObj.destObj.Street.StreetId;
                    formData.DestStreetDesignationId = bookingObj.destObj.Street.StreetId + "," + bookingObj.destObj.Designation.DesignationId;
                    formData.DestPlaceId = bookingObj.destObj.Place.Id;
                    formData.DestPlaceName = bookingObj.destObj.Place.Name;
                } else {
                    formData.DestSuburbId = 0;
                }

                $cookies.remove("bkFormClient");
                $cookies.remove("bkObjectClient");
                $cookies.putObject("bkFormClient", $scope.bookingForm);
                $cookies.putObject("bkObjectClient", bookingObj);
                console.log(formData);

                userSrvc.submitBooking(formData).then(function (response) {
                    if (response === "ACCESS_DENIED") {
                        console.log("submitBooking error : ");
                        console.log(response);
                        $scope.errorMsg = "Access Denied";
                        return;
                    }
                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        if (response.data.InError) {
                            $scope.errorMsg = response.data.ErrorMessage;
                        } else {
                            console.log("submitBooking : ");
                            console.log(response.data);
                            if ($scope.ubForm.dest.$$lastCommittedViewValue !== "") {
                                //response.data.DestAddress = $scope.ubForm.dest.$$lastCommittedViewValue;
                            } else {
                                response.data.DestAddress = "AS REQUESTED";
                            }

                            $scope.bookingList.unshift(response.data);
                            refreshBookingsList();

                            if (angular.isDefined(nearByCars)) {
                                $interval.cancel(nearByCars);
                            }
                            if (angular.isDefined(markerList)) {
                                for (var k = 0; k < markerList.length; k++) {
                                    markerList[k].setMap(null);
                                }
                                markerList = [];
                            }
                            getCarTypes(formData.PkSuburbId);
                            initiateDateTimeList(formData.AddressDbId);
                            $scope.bookingForm.TimeMode = "tmNow";
                            gmap.setZoom(16);
                            if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                                pkMarker.setMap(null);
                            }
                            pkMarker = new google.maps.Marker({
                                position: new google.maps.LatLng(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude),
                                map: gmap,
                                icon: "/Content/Images/map-pickup-icon.png",
                                title: bookingObj.pickupObj.Place.Name
                            });
                            gmap.panTo(pkMarker.getPosition());
                            showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                            nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                            $scope.ubForm.dest = "";
                            $scope.bookingForm.dstAddress = "";
                            $scope.destSelected = false;
                            bookingObj.destObj = {
                                AddressDbId: 0,
                                GeoPoint: { Latitude: 0, Longitude: 0 },
                                Designation: { DesignationId: 0, Name: "" },
                                Number: "",
                                Place: { Id: 0, Name: "" },
                                Street: { StreetId: 0, Name: "" },
                                Suburb: {
                                    Id: 0,
                                    IsServiceable: false,
                                    IsDefaultPickup: false,
                                    Name: "",
                                    NspPhone: "",
                                    Postcode: "",
                                    State: "",
                                    AddressDbId: 0,
                                    GeoPoint: { Latitude: 0, Longitude: 0 }
                                },
                                Unit: ""
                            };
                            $scope.ubForm.$submitted = false;
                            $scope.ubForm.$setPristine();
                        }
                    } else {
                        console.log("submitBooking error : ");
                        console.log(response);
                        var appInsights = window.appInsights;
                        if (appInsights) {
                            appInsights.trackEvent('homeSrvc.submitBooking(formData): INVALID RESPONSE', // name: string
                                {
                                    ['handledAt']: 'UserController.js',
                                    ['handledFunc']: '$scope.submitRequest',
                                    ['formData']: JSON.stringify(formData),
                                    ['response']: JSON.stringify(response.data)
                                }   // properties?: {[string]:string}                                                                 
                                );
                        }
                        $scope.errorMsg = "Server is not accessible";
                    }
                    $scope.btnSubmitText = "Request 13CABS";

                }).catch(function (err) {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.submitBooking(formData): FAIL', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: '$scope.submitRequest',
                                ['formData']: JSON.stringify(formData)
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }                    

                    if (angular.isDefined(err.status)) {
                        console.log("submitBooking : " + err.status + " - " + err.statusText);
                        $scope.errorMsg = "Server is not accessible";
                    } else {
                        $scope.errorMsg = err.message;
                    }
                    $scope.btnSubmitText = "Request 13CABS";

                });
            } else {
                return;
            }
        };

        //refreshBookingsList();
        $interval(refreshBookingsList, 30000);

        // *********************************************************************************************************************** timeout
        $timeout(function () {

            var options = { componentRestrictions: { country: "au" } };
            var autocomplete = new google.maps.places.Autocomplete(document.getElementById("pickup"), options);
            autocomplete.addListener("place_changed", getPickupAddressDetails);

            var autocompleteDest = new google.maps.places.Autocomplete(document.getElementById("dest"), options);
            autocompleteDest.addListener("place_changed", getDestAddressDetails);

            // *********************************************************************************************************************** getPickupAddressDetails
            function getPickupAddressDetails() {
                var place = autocomplete.getPlace();
                if (angular.isUndefined(place.address_components)) {
                    $scope.pkErrMsg = "Please enter valid street address";
                    $scope.pickupSelected = false;
                    $scope.$apply();
                } else {
                    $scope.pkErrMsg = "";
                    $scope.isLoadingPk = true;
                    $scope.bookingForm.pkAddress = jQuery("#pickup").val();
                    var inputPlace = {
                        address_components: place.address_components,
                        geometry: place.geometry,
                        place_id: place.place_id,
                        types: place.types
                    };
                    inputPlace.LocationType = 1;                    
                    homeSrvc.verifyGoogleSearchResult(inputPlace).then(function (response) {
                        if ((response != null) && (response.data != null) && (response.data !== "")) {
                            response.data.Place.Name = place.name;
                            pickupObj = response.data;
                            console.log("api verified pickup : ");
                            console.log(pickupObj);
                            bookingObj.pickupObj = pickupObj;
                            bookingObj.StateId = homeSrvc.getStateId(pickupObj.Suburb.State);
                            if (pickupObj.Suburb.IsServiceable) {
                                getCarTypes(pickupObj.Suburb.Id);
                                initiateDateTimeList(pickupObj.AddressDbId);
                                $scope.pickupSelected = true;
                                showPosition();
                                gmap.setCenter(place.geometry.location);
                                gmap.setZoom(16);
                                if (angular.isDefined(pkMarker) && angular.isObject(pkMarker)) {
                                    pkMarker.setMap(null);
                                }
                                pkMarker = new google.maps.Marker({
                                    position: place.geometry.location,
                                    map: gmap,
                                    icon: "/Content/Images/map-pickup-icon.png",
                                    title: place.name
                                });
                                if (angular.isDefined(nearByCars)) {
                                    $interval.cancel(nearByCars);
                                }
                                if (angular.isDefined(markerList)) {
                                    for (var k = 0; k < markerList.length; k++) {
                                        markerList[k].setMap(null);
                                    }
                                    markerList = [];
                                }
                                showNearbyCars(bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                                nearByCars = $interval(showNearbyCars, 20000, 0, true, bookingObj.pickupObj.GeoPoint.Latitude, bookingObj.pickupObj.GeoPoint.Longitude, gmap);
                                $scope.ubForm.dest = "";
                                $scope.bookingForm.dstAddress = "";
                                $scope.destSelected = false;
                                bookingObj.destObj = {
                                    AddressDbId: 0,
                                    GeoPoint: { Latitude: 0, Longitude: 0 },
                                    Designation: { DesignationId: 0, Name: "" },
                                    Number: "",
                                    Place: { Id: 0, Name: "" },
                                    Street: { StreetId: 0, Name: "" },
                                    Suburb: {
                                        Id: 0,
                                        IsServiceable: false,
                                        IsDefaultPickup: false,
                                        Name: "",
                                        NspPhone: "",
                                        Postcode: "",
                                        State: "",
                                        AddressDbId: 0,
                                        GeoPoint: { Latitude: 0, Longitude: 0 }
                                    },
                                    Unit: ""
                                };
                            } else {
                                $scope.pkErrMsg = "Web bookings are not available from this address";
                            }
                        } else {
                            var appInsights = window.appInsights;
                            if (appInsights) {
                                appInsights.trackEvent('getPickupAddressDetails: INVALID RESPONSE', // name: string
                                    {
                                        ['handledAt']: 'UserController.js',
                                        ['handledFunc']: 'homeSrvc.verifyGoogleSearchResult(inputPlace)',
                                        ['inputPlace']: JSON.stringify(inputPlace),
                                        ['response']: JSON.stringify(response.data)
                                    }   // properties?: {[string]:string}                                                                 
                                    );
                            }
                            $scope.pkErrMsg = "Server is not accessible";
                        }
                        $scope.isLoadingPk = false;
                    }).catch(function (err) {
                        var appInsights = window.appInsights;
                        if (appInsights) {
                            appInsights.trackEvent('getPickupAddressDetails: FAIL', // name: string
                                {
                                    ['handledAt']: 'UserController.js',
                                    ['handledFunc']: 'homeSrvc.verifyGoogleSearchResult(inputPlace)',
                                    ['inputPlace']: JSON.stringify(inputPlace)
                                }   // properties?: {[string]:string}                                                                 
                                );
                        }
                        if (angular.isDefined(err.status)) {
                            console.log("api pickup : " + err.status + " - " + err.statusText);
                        } else {
                            console.log(err.message);
                        }
                        $scope.pkErrMsg = "Please check your pickup address";
                        $scope.pickupSelected = false;
                        $scope.isLoadingPk = false;
                    });
                }
            }

            // *********************************************************************************************************************** getDestAddressDetails
            function getDestAddressDetails() {
                var dest = autocompleteDest.getPlace();
                if (angular.isUndefined(dest.address_components)) {
                    $scope.destErrMsg = "Please check your destination address";
                    $scope.destSelected = false;
                    $scope.$apply();
                    return;
                }
                $scope.destErrMsg = "";
                $scope.isLoadingDest = true;
                $scope.bookingForm.dstAddress = jQuery("#dest").val();
                dest.LocationType = 2;
                homeSrvc.verifyGoogleSearchResult(dest).then(function (response) {
                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        response.data.Place.Name = dest.name;
                        destObj = response.data;
                        console.log("api verified destination : ");
                        console.log(destObj);
                        bookingObj.destObj = destObj;

                        if (bookingObj.pickupObj.AddressDbId !== destObj.AddressDbId) {
                            $scope.destErrMsg = "Please check your destination address";
                            $scope.destSelected = false;
                            $scope.isLoadingDest = false;
                            return;
                        }

                        $scope.destSelected = true;

                        if (angular.isDefined(nearByCars)) {
                            $interval.cancel(nearByCars);
                        }

                        if (angular.isDefined(markerList)) {
                            for (var k = 0; k < markerList.length; k++) {
                                markerList[k].setMap(null);
                            }
                            markerList = [];
                        }

                        if (angular.isDefined(destMarker) && angular.isObject(destMarker)) {
                            destMarker.setMap(null);
                        }
                        destMarker = new google.maps.Marker({
                            position: dest.geometry.location,
                            map: gmap,
                            icon: "/Content/Images/map-dest-icon.png",
                            title: dest.name
                        });
                    } else {
                        var appInsights = window.appInsights;
                        if (appInsights) {
                            appInsights.trackEvent('homeSrvc.verifyGoogleSearchResult(dest): INVALID RESPONSE', // name: string
                                {
                                    ['handledAt']: 'UserController.js',
                                    ['handledFunc']: 'getDestAddressDetails',
                                    ['dest']: JSON.stringify(dest),
                                    ['response']: JSON.stringify(response.data)
                                }   // properties?: {[string]:string}                                                                 
                                );
                        }
                        $scope.destErrMsg = "Server is not accessible";
                        $scope.destSelected = false;
                    }
                    $scope.isLoadingDest = false;
                }).catch(function (err) {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('homeSrvc.verifyGoogleSearchResult(dest): FAIL', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: 'getDestAddressDetails',
                                ['dest']: JSON.stringify(dest)
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }

                    if (angular.isDefined(err.status)) {
                        console.log("api destination : " + err.status + " - " + err.statusText);
                    } else {
                        console.log(err.message);
                    }
                    $scope.destErrMsg = "Please check your destination address";
                    $scope.destSelected = false;
                    $scope.isLoadingDest = false;
                });
            }

            //  *********************************************************************************************************************** Marker.animateTo
            google.maps.Marker.prototype.animateTo = function (newPosition, options) {

                var defaultOptions = {
                    duration: 1000,
                    easing: "linear",
                    complete: null
                };
                options = options || {};

                for (key in defaultOptions) {
                    options[key] = options[key] || defaultOptions[key];
                }

                if (options.easing !== "linear") {
                    if (typeof jQuery == "undefined" || !jQuery.easing[options.easing]) {
                        throw "\"" + options.easing + "\" easing function doesn't exist. Include jQuery and/or the jQuery easing plugin and use the right function name.";
                        return;
                    }
                }

                window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
                window.cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;

                this.AT_startPosition_lat = this.getPosition().lat();
                this.AT_startPosition_lng = this.getPosition().lng();
                var newPositionLat = newPosition.lat();
                var newPositionLng = newPosition.lng();

                if (Math.abs(newPositionLng - this.AT_startPosition_lng) > 180) {
                    if (newPositionLng > this.AT_startPosition_lng) {
                        newPositionLng -= 360;
                    } else {
                        newPositionLng += 360;
                    }
                }

                var animateStep = function (marker, startTime) {
                    var ellapsedTime = (new Date()).getTime() - startTime;
                    var durationRatio = ellapsedTime / options.duration; // 0 - 1
                    var easingDurationRatio = durationRatio;

                    if (options.easing !== "linear") {
                        easingDurationRatio = jQuery.easing[options.easing](durationRatio, ellapsedTime, 0, 1, options.duration);
                    }

                    if (durationRatio < 1) {
                        var deltaPosition = new google.maps.LatLng(marker.AT_startPosition_lat + (newPositionLat - marker.AT_startPosition_lat) * easingDurationRatio,
                            marker.AT_startPosition_lng + (newPositionLng - marker.AT_startPosition_lng) * easingDurationRatio);
                        marker.setPosition(deltaPosition);

                        if (window.requestAnimationFrame) {
                            marker.AT_animationHandler = window.requestAnimationFrame(function () { animateStep(marker, startTime) });
                        } else {
                            marker.AT_animationHandler = setTimeout(function () { animateStep(marker, startTime) }, 17);
                        }
                    } else {
                        marker.setPosition(newPosition);

                        if (typeof options.complete === "function") {
                            options.complete();
                        }
                    }
                };
                if (window.cancelAnimationFrame) {
                    window.cancelAnimationFrame(this.AT_animationHandler);
                } else {
                    clearTimeout(this.AT_animationHandler);
                }

                animateStep(this, (new Date()).getTime());
            };
        }, 3000);

        // *********************************************************************************************************************** showNearbyCars
        function showNearbyCars(lat, lng, targetMap) {
            if (angular.isUndefined(lat) || angular.isUndefined(lng) || angular.isUndefined(targetMap)) {
                return;
            } else {
                $http.get("/Home/NearbyCars", { params: { centerLat: lat, centerLng: lng, count: 20 } }).then(function (response) {
                    if ((response != null) && (response.data != null) && (response.data !== "")) {
                        var nearbyCarsList = response.data;
                        for (var j = 0; j < markerList.length; j++) {
                            markerList[j].setMap(null);
                        }
                        markerList = [];
                        for (var i = 0; i < nearbyCarsList.length; i++) {
                            markerList[i] = new google.maps.Marker({
                                position: new google.maps.LatLng(nearbyCarsList[i].Latitude, nearbyCarsList[i].Longitude),
                                map: targetMap,
                                icon: "/Content/Images/yellow-taxi.png",
                                title: nearbyCarsList[i].CarNumber
                            });
                        }
                    } else {
                        var appInsights = window.appInsights;
                        if (appInsights) {
                            appInsights.trackEvent('$http.get("/Home/NearbyCars"): INVALID RESPONSE', // name: string
                                {
                                    ['handledAt']: 'UserController.js',
                                    ['handledFunc']: 'showNearbyCars(lat, lng, targetMap)',
                                    ['lat']: lat,
                                    ['lng']: lng,
                                    ['response']: JSON.stringify(response.data)
                                }   // properties?: {[string]:string}                                                                 
                                );
                        }
                        $scope.errorMsg = "Server is not accessible";
                    }
                }, function (err) {
                    var appInsights = window.appInsights;
                    if (appInsights) {
                        appInsights.trackEvent('$http.get("/Home/NearbyCars"): FAIL', // name: string
                            {
                                ['handledAt']: 'UserController.js',
                                ['handledFunc']: 'showNearbyCars(lat, lng, targetMap)',
                                ['lat']: lat,
                                ['lng']: lng
                            }   // properties?: {[string]:string}                                                                 
                            );
                    }

                    if (angular.isDefined(err.status)) {
                        console.log(err.status + " - " + err.statusText);
                    } else {
                        console.log(err.message);
                    }
                });
            }
        }

        // Check calendar
        $scope.$watch('isOpen', function (newValue, oldValue) {
            if (!newValue && oldValue) {
                document.querySelector('.md-datepicker-input').blur();
            }
        });
    }
]);

// ##################################################################################################################################################
// Profile Cntrl ######################################################################################################################################
// ##################################################################################################################################################

mainApp.controller("profileCtrl", ["$scope", "userSrvc", "$window", function ($scope, userSrvc, $window) {

    $scope.userProfile = {};
    getUserProfile();

    // ----------------------------------------------------------------------------getUserProfile
    function getUserProfile() {
        userSrvc.getUserProfile().then(function successCallback(response) {
            // this callback will be called asynchronously
            // when the response is available
            if ((response != null) && (response.data != null) && (response.data !== "")) {
                if (response.data === "NotAuthorised") {
                    console.log(" Not Authorised ");
                    $window.location.href = "/User/Logout";
                }
                else {
                    $scope.userProfile = response.data;
                }
            }
            console.log(response);
        }, function errorCallback(response) {
            // called asynchronously if an error occurs
            // or server returns response with an error status.
            console.log(response);
        });
    };

    $scope.saveProfile = function () {
        alert("saveProfile implementation");
    }

    $scope.logOut = function () {
        alert("logOut implementation");
    }    
}]);;


mainApp.service("userSrvc", function ($http) {

    // submit User Booking
    this.submitBooking = function (formVars) {
        var response = $http({
            method: "post",
            url: "User/SubmitBooking",
            data: formVars,
            dataType: "json"
        });
        return response;
    }

    // get User Profile
    this.getUserProfile = function() {
        return $http.get("/Base/GetUserProfile");
    }

    // get User Booking list
    this.getUserBookingList = function (userId) {
        return $http.get("User/UserBookingsList", { params: { id: userId } });
    }

    // get Booking last Status
    this.getBookingLastStatus = function (userId, bkId, dsId, dsbkId) {
        return $http.get("User/BookingLastStatus", { params: { userId: userId, bkId: bkId, dsId: dsId, dsbkId: dsbkId } });
    }

    // send Mobile Verification Code
    this.sendVerificationCode = function (phNumber, userId) {
        return $http.get("/Home/SendVerificationCode", { params: { phoneNumber: phNumber, userId: userId } });
    }

    // verify Mobile Number
    this.verifyMobileNumber = function (code, userId) {
        return $http.get("/Home/VerifyMobileNumber", { params: { code: code, userId: userId } });
    }

});;
